WSL2 通过桥接实现访问主机的网络
背景介绍
之所以有这个需求的主要原因是需要用WSL和外部机器人硬件调试分布部署的ROS系统,WSL2是在windows主机内部建立的虚拟局域网,其ip从外部无法访问,网上很多文章提到端口转发,但是ROS的文档里面要求用到所有的端口,采用端口转发不太实际。所以要想办法让WSL2的ip暴露出来,使得外部主机能够访问到。
一、普通实现方法
思路就是将wsl2自建的虚拟NAT网络桥接到windows主机网卡上,主要参考这篇文章
https://zhuanlan.zhihu.com/p/488442403
1、开启hyper-v
桥接功能需要windows的hyper-v组件支持,但是win10/11家庭版是不包含hyper-v的,专业版才包含。网上也有文章提到家庭版安装hyper-v的方法,但是我没有测试,以下内容都是在win11专业版上进行的测试,win10专业版应该也是一样的。 首先,进入控制面板—程序—启用或关闭windows功能,勾选hyper-v,确认后重启电脑。

2、桥接网络
重启后首先运行wsl2(这样才能出现WSL的虚拟网卡),以管理员方式打开powershell,执行Get-NetAdapter,可以列出系统所有的网卡,记住想要桥接的网卡名称,比如我想桥接到有线网络其名称为“以太网”。
在powershell中执行
1 Set-VMSwitch WSL -NetAdapterName 以太网
将wsl虚拟网络和主机有线网络桥接起来。
3、手动修改WSL网络
进入wsl2内手动修改ip配置,假设WSL的有线网络为eth0,外部局域网网关为 10.0.0.1,需要将WSL网络IP 设置为 10.0.0.7/24,则在bash中分别执行如下命令:
1 sudo ip addr del $(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1) dev eth0
2 sudo ip addr add 10.0.0.7/24 broadcast 10.0.0.255 dev eth0
3 sudo ip route add 0.0.0.0/0 via 10.0.0.1 dev eth0
接下来还需要更新DNS地址,执行
1 sudo vim /etc/resolv.conf
修改文件最后一行内容为 nameserver 10.0.0.1,然后保存退出即可。 一切配置完毕,现在可以从外部局域网其他主机直接ping通WSL了
4、取消桥接
在windows中管理员方式打开powershell,执行以下指令:
1 Set-VMSwitch WSL -SwitchType Internal
然后执行 wsl --shutdown 重启wsl,即可恢复原有的虚拟内部网络。
更多推荐


所有评论(0)