一、简介
WSL2的网络模式默认是“NAT”模式,即网络地址转换模式。WSL2实例ubuntu会通过windows主机的网络简介访问互联网,同时与windows形成一个内部私有网络。这种模式下,windows主机相当于一个网关,负责WSL2与外部网络的通信转发。
NAT模式的特点
网络隔离性
WSL2会获得一个私有IP,通常是172.X.X.X,仅能被windows主机直接访问。
外部设备无法直接访问WSL2的IP
互联网访问
WSL2可通过windows主机的网络正常访问互联网,无需额外配置
Windows主机也可以直接访问WSL2
动态IP特性
WSL2重启后,其私有IP可能会变化,导致依赖固定IP的服务器需要重新配置。
根据上述特性,外部设备是无法访问WSL2的IP的,但是有时候又需要外部设备访问,例如外部设备NFS到Ubuntu上。此时就需要进行特殊配置。
操作环境如下:
WSL2,win10版本
ubuntu,20.04
注:如果WSL2是win11版本,还可以使用镜像模式。但是win10版本的WSL2是不支持的。
二、桥接
配置桥接
打开网络连接,可以看到本地网卡和WSL的网卡。
按着ctrl,同时选中“以太网”和wsl,然后右键,选择“桥接”
成功后,会在列表里多一个“网桥”的选项,右键“网桥”
双击“Internet 协议版本4”,配置网络
设置IP地址和DNS。IP地址要设置为与外部设备相同的网段。
强制WSL2使用网桥IP
在windows中使用如下指令关闭WSL
wsl --shutdown
重新启动wsl,在Ubuntu中手动配置IP,执行如下指令:
sudo ip addr flush dev eth0 # 清除原有 IP
sudo ip addr add 192.168.3.101/24 dev eth0 # 与网桥同网段
sudo ip route add default via 192.168.3.1 dev eth0 # 网关与网桥一致
执行前的IP如下
执行命令后
可以看到IP已经变成我们设置的值。
此时外部设备就已经可以ping通ubuntu了。
三、固定ubuntu IP
WSL在每次重启后,IP都会变化,导致之前配置的ip又变回了默认值,如果想让外部设备连接就需要再执行一遍上面的步骤。
通过脚本来自动配置。
在ubuntu中创建一个sel_wsl_ip.sh的脚本,内容如下:
sudo ip addr flush dev eth0
sudo ip addr add 192.168.1.101/24 dev eth0 # 替换为你的目标 IP
sudo ip route add default via 192.168.1.1 dev eth0
确定该脚本的位置。
赋予执行权限
chmod +x set_wsl_ip.sh
然后编辑~/.bashrc。在文件最下方添加如下指令
/home/qwer/set_wsl_ip.sh
保存后退出。
立即生效
source ~/.bashrc
可以看到,脚本生效了。
重新打开终端
也是生效的。