WSL2无法访问互联网时,需依次执行五步修复:一、重置Windows网络栈并重启WSL服务;二、修复Hyper-V虚拟网卡绑定与适配器状态;三、禁用自动resolv.conf生成并手动配置DNS;四、切换至桥接模式并指定有效vmSwitch;五、部署wsl-vpnkit重建VirtioProxy网络栈。

如果您在使用WSL2时发现子系统完全无法访问互联网,包括ping不通IP地址、域名解析失败或HTTP请求超时,则问题可能源于网络模式异常、虚拟交换机损坏、DNS配置丢失或主机网络组件冲突。以下是解决此问题的步骤:
一、重置Windows网络栈并重启WSL服务
该方法通过清理Winsock目录、重置TCP/IP协议栈和HTTP代理设置,消除因系统更新或驱动异常导致的底层网络通信阻断。执行后可恢复WSL2与宿主机之间的基础数据通路。
1、以管理员身份启动PowerShell或CMD。
2、执行命令关闭所有正在运行的WSL实例:wsl --shutdown。
3、重置Winsock目录:netsh winsock reset。
4、重置IPv4协议栈:netsh int ip reset all。
5、重置Windows HTTP代理配置:netsh winhttp reset proxy。
6、刷新本地DNS缓存:ipconfig /flushdns。
7、重启计算机使所有更改生效。
二、修复Hyper-V虚拟网卡绑定与适配器状态
当vEthernet (WSL)虚拟网卡显示“媒体已断开连接”或被禁用时,WSL2将失去与宿主机的NAT通道。该步骤强制启用并注册该适配器,确保其能正确参与网络地址转换流程。
1、以管理员身份打开PowerShell。
2、启用WSL专用虚拟网卡:Get-NetAdapter -Name "vEthernet (WSL)" | Enable-NetAdapter -Confirm:$false。
3、若提示适配器不存在,检查Hyper-V平台是否启用:Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V。
4、如未启用,依次执行:Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart 和 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart。
5、执行 Restart-Computer 重启系统。
三、禁用自动resolv.conf生成并手动配置DNS
WSL2默认自动生成/etc/resolv.conf,但该文件常被覆盖为无效内容(如空nameserver或错误地址),导致域名无法解析。本方法通过关闭自动生成机制并锁定静态DNS配置,确保解析路径稳定可靠。
1、在WSL2中编辑全局配置文件:sudo nano /etc/wsl.conf。
2、添加以下内容并保存:[network]\ngenerateResolvConf = false。
3、删除当前resolv.conf:sudo rm /etc/resolv.conf。
4、新建并写入可信DNS服务器:echo "nameserver 8.8.8.8\nnameserver 1.1.1.1" | sudo tee /etc/resolv.conf。
5、锁定文件防止覆盖:sudo chattr +i /etc/resolv.conf。
6、退出WSL并执行 wsl --shutdown,重新启动终端验证。
四、切换至桥接模式并指定有效vmSwitch
当NAT模式持续失败且Hyper-V虚拟交换机无法修复时,桥接模式可绕过NAT依赖,直接复用物理网卡的网络环境。该方式要求Windows 11 22H2及以上,并需提前创建外部虚拟交换机。
1、在Windows中以管理员身份运行PowerShell,列出可用交换机:Get-VMSwitch。
2、记录返回结果中SwitchType为External的名称(如Default Switch或WSLBridge)。
3、在Windows用户目录(%USERPROFILE%\.wslconfig)创建或编辑该文件。
4、写入以下配置(替换vmSwitch值为上一步获取的名称):[wsl2]\nnetworkingMode = bridged\nvmSwitch = Default Switch\nipv6 = true。
5、执行 wsl --shutdown 并重启WSL2。
五、部署wsl-vpnkit重建VirtioProxy网络栈
当系统报错“无法配置networkingMode Nat”且回退至VirtioProxy模式仍无响应时,表明原生VirtioProxy网络栈已损坏。wsl-vpnkit提供独立的轻量级网络代理层,可替代失效模块实现完整TCP/IP连通性。
1、确保已安装最新版WSL(建议从GitHub Releases下载msixbundle安装包)。
2、在WSL2中启用systemd支持:sudo nano /etc/wsl.conf,添加 [boot]\nsystemd = true。
3、重启WSL使systemd生效:wsl --shutdown 后重新打开终端。
4、在WSL2中下载并安装wsl-vpnkit:curl -fsSL https://raw.githubusercontent.com/microsoft/WSL/vpnkit/install.sh | bash。
5、启动服务:sudo systemctl start wsl-vpnkit。
6、设置开机自启:sudo systemctl enable wsl-vpnkit。

















