
如果您在Windows中启动WSL后发现无法访问互联网或局域网资源,则很可能是由于WSL 2默认的NAT网络模式与主机网络栈隔离所致。以下是多种可独立验证、互不依赖的故障排查与修复方法:
一、启用镜像网络模式(推荐首选)
镜像模式让WSL直接复用主机的网络接口和IP地址,彻底消除NAT层,使WSL在局域网中表现为宿主机本身,无需端口转发且IP稳定。
1、以管理员身份打开PowerShell,执行命令关闭所有WSL实例:wsl –shutdown
2、在Windows用户主目录(如C:\Users\用户名)下创建或编辑文件.wslconfig,确保内容为:
[experimental]networkingMode=mirroreddnsTunneling=truefirewall=trueautoProxy=true
3、保存文件后,重新启动WSL(例如运行wsl -d Ubuntu),再执行ifconfig或ip addr,确认eth0的IPv4地址已变为与Windows主机同一网段(如192.168.1.x)。
二、重置并重建WSL虚拟交换机
当WSL虚拟交换机状态异常(如“媒体已断开连接”)、IP路由错乱或DHCP分配失败时,需强制重建底层网络基础设施。
1、以管理员身份运行PowerShell,依次执行:
wsl –shutdown
Get-VMSwitch | Where-Object {$_.SwitchType -eq ‘Internal’} | Remove-VMSwitch -Force
2、重启Windows网络服务:
net stop wlansvcnet start wlansvcnet stop wuauservnet start wuauserv
3、重启WSL并检查路由表:ip route | grep default
确认默认网关指向172.x.x.1(NAT模式下)或局域网网关(如192.168.1.1)。
三、手动配置WSL内网卡与DNS(适用于桥接或固定IP场景)
当镜像模式不可用(如旧版系统)或需指定静态IP时,需在WSL内部显式配置网络参数,绕过WSL自动DHCP的不可靠性。
1、在WSL中编辑Netplan配置文件(路径通常为/etc/netplan/00-wsl2.yaml):
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.1.6/24] routes: – to: default via: 192.168.1.1 nameservers: addresses: [192.168.1.1, 114.114.114.114]
2、应用配置:sudo netplan apply
3、同步禁用WSL自动生成hosts与resolv.conf,编辑/etc/wsl.conf:
[network]generateHosts = falsegenerateResolvConf = false
四、修复Windows主机侧Hyper-V虚拟网卡绑定
若物理网卡(Wi-Fi或以太网)未正确绑定至WSL使用的虚拟交换机,会导致WSL流量无法出站。此问题常见于驱动更新或系统休眠唤醒后。
1、打开“控制面板 → 网络和 Internet → 网络连接”,找到名为vEthernet (WSL)的适配器。
2、右键该适配器 → “属性” → 取消勾选“Hyper-V 虚拟交换机协议”以外的所有协议(尤其是IPv6若未启用)。
3、在相同界面点击“配置” → “高级”选项卡 → 找到“网络地址(MAC)”,将其值设为空值(即删除现有MAC地址),点击确定。
4、再次运行wsl –shutdown后重启WSL。
五、禁用Windows防火墙临时规则干扰
Windows Defender 防火墙可能拦截WSL进程(如wslhost.exe)的出站连接,尤其在启用镜像模式后未同步更新规则时。
1、以管理员身份运行PowerShell,执行:
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False
2、测试WSL网络连通性(如ping baidu.com)。
3、若恢复连通,说明存在特定规则冲突;此时应逐条启用防火墙并运行以下命令定位阻断项:
Get-NetFirewallRule | Where-Object { $_.Enabled -eq ‘True’ -and $_.Direction -eq ‘Outbound’ } | Where-Object { $_.DisplayName -like ‘*WSL*’ -or $_.DisplayName -like ‘*wslhost*’ }

评论(0)