WSL2的网络

使用WSL2,很多人关心的一个问题可能是,如何让远程计算机访问到WSL2中运行的Linux。

在WSL1中,如果windows10能被局域网其他电脑访问,那WSL中的ubuntu也能被外面访问,人们对WSL2也作同样期待,实际并非如此。

WSL2类似其他的虚拟机平台,里面的Linux使用虚地址,桥接到本机的windows系统上。外面是不能直接访问的。

我们来测试一下。

主机IP为10.13.13.2,WSL中Ubuntu地址为172.31.245.67,外部主机地址为10.13.13.4。可以看到主机可以ping通WSL,WSL也可以ping通 主机,外部主机可以ping 通主机,但ping不通WSL中的ubuntu,因为没有通向这个WSL的路由。

图片

我们可以做些改变达到目的。

需求场景:

外部主机要访问 主机WSL中Ubuntu图形界面。

方法:主机用管理员身份运行以下命令:

netsh interface portproxy add v4tov4 listenport=3390 listenaddress=0.0.0.0 connectport=3390 connectaddress=172.31.245.67

172.31.245.67 是WSL中ubuntu的地址。这句话的意思是,监听来自任何地址的3390端口,再转换到172.31.245.67的3390端口。

当然本机防火墙要开通允许3390端口入站。

这样外部电脑通过RDP协议访问这台主机的3390端口,就定向到ubuntu的3390端口了,就能访问ubuntu的图形界面了。

图片

问题

WSL虚拟机地址不是固定的,启动会获取不同的IP地址,我们需要在地址变动时重新执行这条 netsh 命令,也是很麻烦的。

这个问题记录在微软关于WSL的第4150号问题中,如果想达到无需每次执行netsh命令,可以参考文章的脚本解决。

https://github.com/microsoft/WSL/issues/4150

结束语

对于开发、设计人员来说,MacOS应该是更好的操作系统和平台,但因为Windows有了WSL2,很多人可能会改变选择,对我而言就是如此。

本文是WSL2系列的最后一篇,与上一篇相隔时间较长,主要是期间忙于解决其他问题。下一篇将是另一个主题,敬请关注。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注