升级WSL后,WSL2 Ubuntu无法通过WSL主机IP访问Windows服务
解决WSL2升级后无法通过resolv.confIP访问Windows服务的问题
可能的原因及解决方案
1. 验证WSL主机IP的有效性
升级WSL后,NAT网络可能重置,导致/etc/resolv.conf中的nameserver IP并非当前WSL适配器的正确地址:
- 在Windows PowerShell中执行:
记录返回的IPv4地址,和WSL内Get-NetAdapter "vEthernet (WSL)" | Get-NetIPAddresscat /etc/resolv.conf的nameserver字段对比。如果不一致,说明resolv.conf的IP已过时。
2. 修复防火墙与端口转发规则
即使开启了WSL防火墙,升级后转发规则可能失效,需重新配置:
- 以管理员身份运行PowerShell,执行:
# 重置端口代理规则 netsh interface portproxy reset all # 允许WSL网段(172.16.0.0/12)访问Windows所有TCP端口 netsh advfirewall firewall add rule name="WSL2 Inbound" dir=in action=allow protocol=TCP localport=any remoteip=172.16.0.0/12
3. 确保Windows服务绑定所有网卡
如果Windows服务仅绑定了Wi-Fi适配器的IP(10.131.x.x),会导致WSL适配器IP无法访问:
- 启动服务时强制绑定
0.0.0.0(监听所有网卡),比如:# Windows终端执行 python3 -m http.server 3457 --bind 0.0.0.0
4. 配置WSL静态IP(可选,避免IP动态变动)
如果频繁遇到IP变动问题,可给WSL设置静态IP:
- 在Windows PowerShell中查看WSL适配器的网关IP:
Get-NetIPAddress -InterfaceAlias "vEthernet (WSL)" | Where-Object {$_.AddressFamily -eq "IPv4"} - 在WSL的Ubuntu中编辑
/etc/wsl.conf,禁用自动生成resolv.conf:
添加以下内容:sudo nano /etc/wsl.conf[network] generateResolvConf = false - 关闭并重启WSL:
# Windows PowerShell执行 wsl --shutdown - 重新打开WSL,设置静态IP(替换为对应网段的IP和网关):
sudo ip addr add 172.25.128.2/24 dev eth0 sudo ip route add default via 172.25.128.1 dev eth0 - 手动更新
/etc/resolv.conf:sudo echo "nameserver 172.25.128.1" > /etc/resolv.conf
5. 重置WSL网络栈
若以上方法无效,尝试重置整个WSL网络:
- 以管理员身份运行PowerShell,执行:
重启电脑后再启动WSL测试。wsl --shutdown netsh winsock reset netsh int ip reset all ipconfig /flushdns
内容的提问来源于stack exchange,提问作者lakshmi narayanan
相关产品推荐
相关产品推荐

