WSL2网络不通排查记:NAT、代理和镜像模式

举报
yd_275379215 发表于 2026/10/22 11:30:05 2026/10/22
【摘要】 WSL2里curlgithub超时、apt更新失败,折腾了一晚上把网络模式理顺了。WSL2是跑在Hyper-V上的真虚拟机,网络和WSL1的进程级模拟完全不同,排查思路也要换。默认NAT模式的坑WSL2默认NAT:虚拟机有自己的内网网段(172.x),通过宿主NAT出网。两大痛点:宿主要访问WSL里的服务得用动态IP(每次重启变);WSL里的localhost代理失效——127.0.0.1在...

WSL2里curlgithub超时、apt更新失败,折腾了一晚上把网络模式理顺了。WSL2是跑在Hyper-V上的真虚拟机,网络和WSL1的进程级模拟完全不同,排查思路也要换。

默认NAT模式的坑

WSL2默认NAT:虚拟机有自己的内网网段(172.x),通过宿主NAT出网。两大痛点:宿主要访问WSL里的服务得用动态IP(每次重启变);WSL里的localhost代理失效——127.0.0.1在WSL2里是它自己,不是宿主。

代理软件只监听127.0.0.1时,WSL2里的请求根本到不了宿主。两个解法:代理软件开允许局域网连接,WSL里用宿主IP;或者上镜像模式。

镜像网络模式

Windows 11 22H2+和WSL 0.0.x起支持,WSL和宿主共享网络栈:

# %UserProfile%\.wslconfig
[wsl2]
networkingMode=mirrored

[experimental]
autoProxy=true          # 自动继承宿主代理设置
dnsTunneling=true        # DNS走虚拟化通道,解决DNS污染
firewall=true
sparseVhd=true
wsl --shutdown   # 改配置后必须完全重启
wsl              # 重新进入

镜像模式下localhost双向直通:WSL里起的服务宿主localhost直接访问,宿主的127.0.0.1:7890代理WSL里也能用,配合autoProxy几乎零配置。

常规排查清单

# WSL里诊断
cat /etc/resolv.conf        # DNS指向是否正常
ping -c 2 1.1.1.1           # IP通不通
curl -v https://example.com # 看卡在DNS还是TCP
ip route                     # 默认网关

IP通、域名不通是DNS问题(dnsTunneling或手动改resolv.conf,注意WSL默认自动生成这个文件,要改先在wsl.conf禁用generateResolvConf)。IP都不通看wsl --shutdown重启虚拟交换机,还有宿主VPN的虚拟网卡抢占路由的情况,断VPN测试定位。

端口转发老方案

NAT模式下要稳定地从宿主访问WSL服务,得配转发:

$v = (wsl hostname -I).Trim().Split(' ')[0]
netsh interface portproxy add v4tov4 listenport=8080 connectaddress=$v connectport=8080

WSL重启IP变了就要重配,可以写个开机脚本自动化。镜像模式出来后这套基本可以退休。

版本建议

wsl --version看版本,保持更新(wsl --update)能省掉一半老问题。Docker Desktop的WSL后端、systemd支持(wsl.conf里systemd=true)都是新版福利。WSL2的网络曾是劝退重灾区,镜像模式后终于是「打开就能用」的状态了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。