早上把开发环境搞坏了,报以下错误,WSL中没有网络!
wsl: 无法配置 networkingMode Nat) (网络,回退到 networkingMode VirtioProxy。
折腾了一上午,先说我的解决办法,后面是某AI的回答,可以参考。
解决办法:
- 找到WSL Setting
- 关闭hyper防火墙
以下是参考:
你在使用 WSL(Windows Subsystem for Linux)时,遇到如下提示:
wsl: 无法配置 networkingMode Nat) (网络,回退到 networkingMode VirtioProxy。
这是因为在使用 WSL 2 时,默认的网络模式本应是 NAT(Network Address Translation),但由于某些原因(配置或系统支持问题),WSL 无法成功启用 NAT 网络模式,因此自动回退到 VirtioProxy
模式。
🔍 一、背景知识简析
WSL 2 支持三种网络模式:
-
NAT(默认):WSL 通过一个虚拟交换机桥接网络,提供更接近原生的网络体验(IP、端口转发等)。
-
Bridged(桥接):用户手动配置,WSL 与宿主机处于同一网段,适合需要局域网互通的场景。
-
VirtioProxy:更轻量的方式(如 WSLg 用于图形转发时也用这个),功能受限,不支持完整的端口映射和自定义 IP。
🧩 二、常见原因及解决方案
✅ 1. 检查 Windows 版本和 WSL 更新
-
确保你的 Windows 是 Windows 11 22H2 或以上版本,并使用了最新的 WSL。
-
执行以下命令更新 WSL:
wsl --update
然后重启电脑。
✅ 2. 启用 Hyper-V & 虚拟机平台组件
确保以下 Windows 功能已启用:
-
Hyper-V
-
虚拟机平台(Virtual Machine Platform)
打开方法:
-
Win + R → 输入
optionalfeatures.exe
-
勾选:
-
✅ Hyper-V
-
✅ 虚拟机平台(Virtual Machine Platform)
-
✅ Windows Subsystem for Linux
-
完成后重启。
✅ 3. 启用 WSL 网络功能(wsl.conf)
有些系统可能需要手动设置 wsl.conf
以启用新的 NAT 网络:
编辑 /etc/wsl.conf
:
sudo nano /etc/wsl.conf
添加:
[network] networkingMode = nat
然后在 Windows 上执行:
wsl --shutdown
再次启动 WSL。
✅ 4. 升级到新网络堆栈(自动端口转发支持)
新版 WSL 支持自动 NAT + 端口转发。如果你仍在使用旧的 wsl.exe 安装方式,建议切换为 Microsoft Store 版本的 WSL:
wsl --install
这将安装新的 Store 版本,具有更好的网络栈和兼容性。
✅ 5. 防火墙或安全软件拦截虚拟网络
部分安全软件(如卡巴斯基、诺顿)或启用了严格规则的 Windows 防火墙,可能会阻止虚拟交换机的运行,导致 NAT 初始化失败。
-
暂时禁用防火墙或安全软件测试。
-
或在防火墙中允许
vmmem.exe
和wsl.exe
的网络通信。
✅ 6. 检查 WSL 的网络驱动是否安装完整
有时虚拟交换机和驱动程序安装异常,尝试:
Get-NetAdapter | ? { $_.InterfaceDescription -like "*Hyper-V*" }
如果没有看到虚拟网卡,可能要手动修复 Hyper-V。
🧪 检查当前网络模式
在 WSL 中执行:
ip addr
或在 PowerShell 执行:
wsl.exe --status
看 networkingMode
是否生效。
🛠️ 总结
步骤 | 目的 |
---|---|
wsl --update | 更新核心组件 |
启用 Hyper-V/虚拟机平台 | 支持虚拟网络堆栈 |
设置 wsl.conf | 强制使用 NAT |
检查防火墙/安全软件 | 排除拦截 |
升级到 Microsoft Store WSL | 获取更稳定网络栈 |