让您的 WSL2 发行版像您网络上的任何其他客户端一样运行
在 Roelofs 建议 2 的基础上,这就是我的案例中所有内容的原因。不幸的是,我太新鲜了,不能发表评论。
我的出发点:
赢 10 专业版
WSL2下的Ubuntu
(带有 Linux 容器的 Docker)
我的目标:
从网络上的客户端获取 rtmp 流进出运行在 Ubuntu 机器上的 nginx 服务器。
搭建桥梁
就我而言,我无法让 Hyper-V 正确设置网桥。在 Hyper-V 管理器的虚拟交换机部分中为 WSL 交换机选择 外部网络 并点击应用后,它最终失败并出现错误 0x80070490。不知道为什么,也没有时间调查。 WSL 没有运行,Docker 服务也没有运行。
相反,我只是将设置保留在 内部网络 上,并在网络连接 (run->ncpa.cpl) 下以手动方式桥接接口。就我而言,WiFi 连接和 vEthernet (WSL)。
这样做之后,我立即失去了互联网连接,我花了很长时间才发现需要重新启动。 (Windows 曾经没有要求我这样做!)
让虚拟机成型
重启后,我现在可以从主机访问互联网,网桥设置为 DHCP,并继承了 WiFi 接口的 IP (192.168.1.246)。太好了。
然而,VM 仍在获取虚拟交换机的 IP(或者您想查看它,windows 似乎分配给交换机和 VM 的随机 172.x.x.x 地址)。
启动 Ubuntu,我决定做一个:
sudo ip addr flush dev eth0
继续:
sudo dhclient eth0
自从我使用 Windows 商店的香草 Ubuntu 发行版以来,我遇到了一些错误,没有 systemd,没有乐趣。尽管如此,它还是设法将网桥的 IP 添加到 eth0。由于这不是很方便,我摆脱了它:
sudo ip addr del 192.168.1.248/24 dev eth0
但在偷看路由表之前:
user@vm:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
删除旧 IP 后,我从我的 DHCP 范围之外添加了一个唯一的 IP:
sudo ip addr add 192.168.1.50/24 dev eth0
我再次检查了路由表,第一个条目不见了。在这个阶段,我可以 ping LAN 但不能 WAN。
将条目添加回:
sudo ip route add default via 192.168.1.1 dev eth0
现在可以 Ping WAN IP,但无法解析 DNS。
LMGTFM:Adding permanent DNS
万一解决方案丢失,这归功于非静态:
创建一个文件:/etc/wsl.conf。
将以下行放入文件中
[网络]
generateResolvConf = false
在 cmd 窗口中,运行 wsl --shutdown
重启 WSL2
创建一个文件:/etc/resolv.conf。如果存在,则用这个新文件替换现有文件。
将以下行放入文件中
名称服务器 8.8.8.8
或者您要使用的任何 DNS 服务器的 IP,重复步骤 3 和 4。
所以,总而言之,检查您的路由并正确设置您的 DNS-conf。不幸的是,每次重新启动 WSL 时都会恢复 IP 设置。如果您每次都在讨论如何自动化它here 和here 时手动执行此操作不满意。我没有时间找到我最喜欢的。
最好的问候
亚历山大