既然 WSL2 会在启动时做网络适配器的配置,那么我们只需要在启动后重新为其配置网络就可以了。
首先,我们假定我们要将 WSL2 的网关设置为 192.168.50.1,并为 WSL2 分配 192.168.50.2 的 IP 地址,那么我们进入 WSL2 之后,执行以下命令即可:
sudo ip addr del $(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1) dev eth0
sudo ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0
sudo ip route add 0.0.0.0/0 via 192.168.50.1 dev eth0
sudo echo nameserver 192.168.50.1 > /etc/resolv.conf
上述命令首先删除掉 WSL2 已经配置的 IP 地址,然后为其分配 192.168.50.2/24,最后配置路由并指定 DNS Server。
这样配置完成后,你会发现 WSL2 内连不了网了。这是因为我们还没有对 WSL2 使用的 Internal Virtual Switch 进行配置。
打开 PowerShell,执行以下命令:
Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False
New-NetIPAddress -IPAddress 192.168.50.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'
Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False
New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.50.0/24;
上述命令中,首先找到 vEthernet (WSL) 这个网络适配器,然后将其所有已有的 IP 地址删除,然后为其添加 192.168.50.1/24 的 IP 地址。
最后设置 NAT:首先删除名字叫做 WSLNat 的 NAT(因为我们后续创建的 NAT 名字叫做 WSLNat,这些命令每次启动系统后都需要执行,因此可能系统中已经存在名为 WSLNat 的 NAT 了,为了防止冲突,如果存在的话就先删掉) ,然后创建一个名字叫做 WSLNat 的 NAT,设置内部地址为 192.168.50.0/24。
上述命令全部执行完成后,WSL2 将恢复网络连接。至此,你可以通过 192.168.50.2 从 Windows 下访问 WSL2(由于 Windows 会为 WSL2 自动配置端口转发,因此也可以直接访问 localhost 访问里面的应用),通过 192.168.50.1 从 WSL2 访问 Windows 了。
Bug天天改,头发日日疏,码字不易,如果有帮助到你,就点击"下方感谢"支持一下把.
一键运行解决方案
由于每次重新启动 WSL2(指完全重新启动,即重新启动了 Windows 或者通过 wsl --shutdown 彻底停止 WSL2 后的首次启动,如果只是切出去的话那不需要)都需要执行一次,不如保存成脚本文件方便使用:
保存成 .cmd 或者 .bat 文件,使用管理员身份运行即可。
更多内容
让 WSL2 使用桥接网络
为 WSL2 固定网段