WSL2 Debian 桌面环境导致断网 —— 排查与修复记录
WSL2 Debian 桌面环境导致断网 —— 排查与修复记录
日期:2026-08-08
环境:Windows 11 + WSL2 + Debian(systemd 初始化)
状态:✅ 已修复(2026-08-08 晚补查:systemd-networkd 才是最后的元凶,详见第八节)
一、问题现象
- Debian 只要一启动桌面环境(graphical),WSL 虚拟机就断网。
- 重启电脑后网络恢复,但只要再次启动桌面环境,又断网。
二、排查过程(只读诊断)
2.1 系统初始化方式
1 | |
WSL2 默认 init 是 systemd,桌面环境(graphical.target)开机自启,
NetworkManager 随之启用。
2.2 断网时的实际状态(关键证据)
1 | |
判定:eth0 无 IPv4、无默认路由 → 这就是断网的直接原因。
2.3 NetworkManager 日志
1 | |
关键行:
1 | |
NM 成功”接管”了 eth0(使用它自己创建的
Wired connection 1连接,走 DHCP),
但最终停在 CONNECTED_LOCAL —— 意思是链路通了、却一个 IP 都没拿到。
2.4 手动 DHCP 请求验证(确认 WSL2 限制)
1 | |
WSL2 的虚拟 DHCP 服务器只在虚拟机启动时给 eth0 发一次 IP,
不响应虚拟机运行中发起的 DHCP 请求。
因此网上”NM 抢网后用 dhclient 要回 IP”的办法在 WSL2 里行不通。
三、根因
1 | |
结论:不是桌面环境消耗资源,而是 NetworkManager 抢占了 eth0 的管理权。
DNS 全程正常(resolv.conf 指向 WSL 的 10.255.255.254 代理),问题纯粹在 IP/路由。
四、修复方案(已实施:NM 不管理 eth0)
4.1 让 NetworkManager 不管理 eth0
新建 drop-in 配置(不动主配置文件):
1 | |
4.2 重启 NetworkManager 并验证
1 | |
重启前(未生效):
1 | |
重启后(生效):
1 | |
eth0 → unmanaged即 NM 彻底撒手,不再接管 eth0。
4.3 重启 WSL 虚拟机,让 WSL 重新发 IP
在 Windows 侧执行:
1 | |
关闭所有 WSL 发行版,重新打开 Debian 后 WSL 会重新给 eth0 发 IP。
与”重启电脑”等效,但无需重启 Windows。
五、验证清单(待执行)
1 | |
六、后续注意事项
- 桌面环境的 NM 图形小工具里,eth0 会一直显示”未管理/不可用” —— 这是正常现象,忽略即可;网页、SSH、WSL 互访都不受影响。
- 以后再开桌面环境也不会断网:NM 不管理 eth0,桌面环境没有任何途径再去破坏它。
- 如果后续需要 NM 管理 eth0(比如要连 Wi-Fi 网卡),只需删除
/etc/NetworkManager/conf.d/10-wsl-eth0-unmanaged.conf并重启 NM。 - WSL 的 DHCP 只在启动时发一次 IP,运行中不要手动跑
dhclient——没有用。
七、备选方案(未采用)
| 方案 | 做法 | 取舍 |
|---|---|---|
| NM 不管理 eth0(已采用) | conf.d 里 managed=0 |
改动最小、只在 Debian 侧;NM 小工具里 eth0 显示”未管理” |
| 禁用 NetworkManager | systemctl disable --now NetworkManager |
最简单彻底,但桌面网络设置小工具失效 |
| WSL mirrored 网络模式 | Windows .wslconfig 加 networkingMode=mirrored |
VM 直连宿主机网卡,从根上绕开 NAT/DHCP;需要较新 WSL 版本,改变网络行为 |
八、补充:systemd-networkd 才是最后的元凶(2026-08-08 晚,已验证)
8.1 为什么 NM 的修复不够
NM 改为 unmanaged 后,wsl --shutdown 再让 Debian 单独开机,eth0 依然无 IP、无路由。
查 journal 发现第二个抢网者:
1 | |
systemd-networkd处于 enabled + active(ubuntu 发行版也 enable 了它,但 ubuntu 是 init.d 启动,networkd 从未运行,所以没事)/etc/systemd/network/eth0.network(2026-08-07 13:28 创建,疑似按网上”WSL 修网指南”手写):1
2
3
4
5
6
7
8
9
10
11
12[Match]
Name=eth0
[Network]
DHCP=true
[DHCPv4]
UseDomains=true
UseMTU=true
[DHCP]
ClientIdentifier=mac后果:networkd 接管 eth0 → 清掉 WSL 预推的 IP → 发起 DHCP → WSL2 虚拟 DHCP 服务器不应答(同 2.4 节)→ eth0 永远无 IP、无路由。
8.2 为什么”一启动 Debian,WSL 就都断网”
Debian 每次开机 networkd 都发起 DHCP 广播,把 WSL relay(NAT/DHCP 服务)搅死后,
之后所有发行版开机都拿不到租约。实测顺序:ubuntu 第一次开机有 IP → 启动 Debian →
ubuntu 重启后也无 IP → 表现为”只要启动 Debian,整个 WSL 都断网”。
8.3 修复操作(已在 Debian 内执行)
1 | |
8.4 最终验证(全部通过)
| 场景 | 结果 |
|---|---|
wsl --shutdown 后 Debian 单独启动 |
eth0=192.168.254.151/20,default via 192.168.240.1,ping 223.5.5.5 0% 丢包,DNS 解析正常 |
| Debian 运行中再启动 ubuntu | 两个发行版同时在线,外网均通 |
| 桌面环境(graphical.target 开机自启) | 正常启动,不影响网络 |
| NM 侧 | eth0 仍 unmanaged;systemd-networkd 持久禁用,重启不复活 |
8.5 注意事项
eth0.network已改名.disabled留档。如需恢复 networkd:改名回去 +systemctl enable --now systemd-networkd,
但 WSL2 下 networkd 的 DHCP 永远不会成功(虚拟 DHCP 只应答开机时 WSL 自己发起的首次请求)。- WSL 2.9.4 下两个发行版内网 IP 相同(都是 192.168.254.151)属正常现象(共享 NAT 按 VM 区分),外网互不影响。
- 两个发行版都不要手动跑
dhclient——同样无效,还会再次搅乱 relay。