WSL2 网络突然瘫痪(Network is unreachable / 没有 eth0)最短修复指南
最近遇到 WSL2 突然无法上网,表现为:
ping 8.8.8.8→Network is unreachableip a里只有lo和一堆 Docker 网桥,没有 eth0/etc/resolv.conf不存在或无效- Windows 网络连接里也找不到
vEthernet (WSL)
这是典型的 HNS(Host Network Service)网络状态损坏,不是简单的 DNS 问题。
以下是经过实战验证、最短路径修复方法(成功率很高)。
一、快速确认是否属于此类问题
在 WSL 中执行:
bash
ip a | grep eth0
ip route
如果没有 eth0,且没有 default via 路由,基本就是这个问题。
二、最短修复步骤(核心)
全部在 Windows PowerShell(管理员)中执行:
powershell
# 1. 关闭 WSL
wsl --shutdown
# 2. 停止关键服务
Stop-Service hns -Force
Stop-Service vmcompute -Force
# 3. 删除损坏的 HNS 数据库(最关键)
Remove-Item -Path "C:\ProgramData\Microsoft\Windows\HNS\HNS.data" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\ProgramData\Microsoft\Windows\HNS\HNS.data.old" -Force -ErrorAction SilentlyContinue
# 4. 重新启动服务
Start-Service vmcompute
Start-Service hns
# 5. 启动一次 WSL,强制重建网络
wsl -e ip a
执行完后,正常情况下会看到 eth0 重新出现,并分配到 IP(例如 192.168.137.x)。
三、验证网络是否恢复
进入 WSL 后执行:
bash
ip route # 应该有 default via ...
ping -c 3 8.8.8.8 # 应该通
ping -c 3 baidu.com # 测试 DNS
如果 ping 8.8.8.8 已经通了,基本就修复完成。
五、常见伴随现象
- Windows 网络连接里只有
vEthernet (FSE HostVnic),没有vEthernet (WSL) - 安装了 Docker Desktop 后更容易出现
- Windows 更新后偶发
总结一句话
WSL2 没网且没有 eth0 时,优先清理 HNS 数据库 + 重启相关服务,是目前最快、最有效的修复方式。
把上面「二、最短修复步骤」保存下来,以后再遇到直接复制执行即可,通常 1 分钟内就能恢复。