WSL2 Debian 桌面环境导致断网 —— 排查与修复记录

WSL2 Debian 桌面环境导致断网 —— 排查与修复记录

日期:2026-08-08
环境:Windows 11 + WSL2 + Debian(systemd 初始化)
状态:✅ 已修复(2026-08-08 晚补查:systemd-networkd 才是最后的元凶,详见第八节)


一、问题现象

  • Debian 只要一启动桌面环境(graphical),WSL 虚拟机就断网。
  • 重启电脑后网络恢复,但只要再次启动桌面环境,又断网。

二、排查过程(只读诊断)

2.1 系统初始化方式

1
2
3
4
5
6
ps -p 1 -o comm=
# systemd
systemctl get-default
# graphical.target
systemctl is-enabled NetworkManager
# enabled

WSL2 默认 init 是 systemd,桌面环境(graphical.target)开机自启,
NetworkManager 随之启用。

2.2 断网时的实际状态(关键证据)

1
2
3
4
5
6
7
8
9
10
11
ip a show eth0
# eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1492 ...
# link/ether 00:15:5d:80:73:13
# inet6 fe80::215:5dff:fe80:7313/64 scope link
# (没有任何 IPv4 地址)

ip route
# (空 —— 没有任何路由)

cat /etc/resolv.conf
# nameserver 10.255.255.254 (WSL 自动生成的 DNS 代理,DNS 本身没问题)

判定:eth0 无 IPv4、无默认路由 → 这就是断网的直接原因。

2.3 NetworkManager 日志

1
journalctl -u NetworkManager -n 30 --no-pager

关键行:

1
2
device (eth0): Activation: successful, device activated.
manager: NetworkManager state is now CONNECTED_LOCAL

NM 成功”接管”了 eth0(使用它自己创建的 Wired connection 1 连接,走 DHCP),
但最终停在 CONNECTED_LOCAL —— 意思是链路通了、却一个 IP 都没拿到。

2.4 手动 DHCP 请求验证(确认 WSL2 限制)

1
2
3
4
sudo dhclient -v eth0
# DHCPDISCOVER on eth0 ... interval 6 / 8 / 13 ...
# No DHCPOFFERS received.
# No working leases in persistent database - sleeping.

WSL2 的虚拟 DHCP 服务器只在虚拟机启动时给 eth0 发一次 IP,
不响应虚拟机运行中发起的 DHCP 请求。
因此网上”NM 抢网后用 dhclient 要回 IP”的办法在 WSL2 里行不通。

三、根因

1
2
3
4
5
6
7
8
9
10
WSL2 启动时给 eth0 配好 172.x.x.x NAT 地址 → 网络正常
↓ 启动桌面环境
NetworkManager 接管 eth0(connection-assumed),清掉 WSL 的 IP,走自己的 DHCP

WSL2 虚拟 DHCP 服务器与 NM 的 DHCP 客户端互不兼容(知名老坑)

NM 拿不到租约(No DHCPOFFERS received)→ eth0 无 IP、无路由 → 断网

重启电脑 = WSL relay 状态重置,WSL 重新给 eth0 发 IP → 网络恢复
(直到下一次 NM 再次接管 eth0)

结论:不是桌面环境消耗资源,而是 NetworkManager 抢占了 eth0 的管理权。
DNS 全程正常(resolv.conf 指向 WSL 的 10.255.255.254 代理),问题纯粹在 IP/路由。

四、修复方案(已实施:NM 不管理 eth0)

4.1 让 NetworkManager 不管理 eth0

新建 drop-in 配置(不动主配置文件):

1
2
3
4
5
sudo tee /etc/NetworkManager/conf.d/10-wsl-eth0-unmanaged.conf > /dev/null <<'EOF'
[device]
match-device=interface-name:eth0
managed=0
EOF

4.2 重启 NetworkManager 并验证

1
2
sudo systemctl restart NetworkManager
nmcli device status

重启前(未生效):

1
2
3
DEVICE  TYPE      STATE                   CONNECTION
lo loopback connected (externally) lo
eth0 ethernet connected (externally) eth0

重启后(生效):

1
2
3
DEVICE  TYPE      STATE                   CONNECTION
lo loopback connected (externally) lo
eth0 ethernet unmanaged --

eth0 → unmanaged 即 NM 彻底撒手,不再接管 eth0。

4.3 重启 WSL 虚拟机,让 WSL 重新发 IP

在 Windows 侧执行:

1
wsl --shutdown

关闭所有 WSL 发行版,重新打开 Debian 后 WSL 会重新给 eth0 发 IP。
与”重启电脑”等效,但无需重启 Windows。

五、验证清单(待执行)

1
2
3
ip a show eth0        # 应看到 172.x.x.x 的 IPv4
ip route # 应有 default via 172.x.x.x dev eth0
ping -c 3 223.5.5.5 # 外网连通

六、后续注意事项

  1. 桌面环境的 NM 图形小工具里,eth0 会一直显示”未管理/不可用” —— 这是正常现象,忽略即可;网页、SSH、WSL 互访都不受影响。
  2. 以后再开桌面环境也不会断网:NM 不管理 eth0,桌面环境没有任何途径再去破坏它。
  3. 如果后续需要 NM 管理 eth0(比如要连 Wi-Fi 网卡),只需删除
    /etc/NetworkManager/conf.d/10-wsl-eth0-unmanaged.conf 并重启 NM。
  4. WSL 的 DHCP 只在启动时发一次 IP,运行中不要手动跑 dhclient——没有用。

七、备选方案(未采用)

方案 做法 取舍
NM 不管理 eth0(已采用) conf.d 里 managed=0 改动最小、只在 Debian 侧;NM 小工具里 eth0 显示”未管理”
禁用 NetworkManager systemctl disable --now NetworkManager 最简单彻底,但桌面网络设置小工具失效
WSL mirrored 网络模式 Windows .wslconfignetworkingMode=mirrored VM 直连宿主机网卡,从根上绕开 NAT/DHCP;需要较新 WSL 版本,改变网络行为

八、补充:systemd-networkd 才是最后的元凶(2026-08-08 晚,已验证)

8.1 为什么 NM 的修复不够

NM 改为 unmanaged 后,wsl --shutdown 再让 Debian 单独开机,eth0 依然无 IP、无路由。
查 journal 发现第二个抢网者:

1
2
systemd-networkd[97]: eth0: Found matching .network file: /etc/systemd/network/eth0.network
systemd-networkd[97]: eth0: Configuring with /etc/systemd/network/eth0.network.
  • 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
2
sudo systemctl disable --now systemd-networkd
sudo mv /etc/systemd/network/eth0.network /etc/systemd/network/eth0.network.disabled

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 注意事项

  1. eth0.network 已改名 .disabled 留档。如需恢复 networkd:改名回去 + systemctl enable --now systemd-networkd
    WSL2 下 networkd 的 DHCP 永远不会成功(虚拟 DHCP 只应答开机时 WSL 自己发起的首次请求)。
  2. WSL 2.9.4 下两个发行版内网 IP 相同(都是 192.168.254.151)属正常现象(共享 NAT 按 VM 区分),外网互不影响。
  3. 两个发行版都不要手动跑 dhclient——同样无效,还会再次搅乱 relay。

WSL2 Debian 桌面环境导致断网 —— 排查与修复记录
https://bote798.top/2026/08/08/wsl2-networkmanager-fix/
作者
bote798
发布于
2026年8月8日
更新于
2026年8月8日
许可协议