)
插着网线却没网一次 NetworkManager netplan 的排查记录网卡、网线、驱动、交换机端口全都正常问题是NetworkManager 的有线连接配置丢了而且它被系统永久禁止再自动创建。而配置之所以丢了就没了是因为这台机器的 NM 由netplan 托管连接的真实存储在/etc/netplan/90-NM-*.yamlNM 自动生成的连接在重启后会蒸发。修复只需一条nmcli connection add但找到它花了十几步。系统Ubuntu / Linux 6.17.0-19-genericKDE Plasma, X11网卡Realtek RTL8111/8168/8211/8411r8169驱动PCI06:00.0症状网线插好、链路灯正常但始终没有 IPNetworkManager 显示已断开一 现象$ip-brlinkenp6s0 UP 00:e0:21:9d:65:a0BROADCAST,MULTICAST,UP,LOWER_UPwlxe0ad47220334 UP e0:ad:47:22:03:34BROADCAST,MULTICAST,UP,LOWER_UP$ip-braddr enp6s0 UP ← 空的没有 IP wlxe0ad47220334 UP10.193.192.80/17 ← WiFi 正常 $ nmcli device status enp6s0 ethernet 已断开 -- ← 断开了而且没有任何连接注意LOWER_UP的意思是载波已检测到也就是物理链路是通的。网卡明明是 UP 的却已断开这就是第一个矛盾点。二 逐层排除先证明不是硬件的问题2.1 物理层 / 链路层$cat/sys/class/net/enp6s0/carrier1$cat/sys/class/net/enp6s0/speed1000$cat/sys/class/net/enp6s0/duplex full $ethtoolenp6s0 Speed: 1000Mb/s Duplex: Full Auto-negotiation: on Link partner advertisedlinkmodes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full千兆全双工对端交换机也在正常自协商。网线、水晶头、网卡 PHY、交换机端口——这一层全部健康。容易忽略的细节ethtool里的Link partner advertised link modes是判断对端是不是活的的关键。如果只有本机模式、对端那栏是空的说明对面没通电或者链路是假的。2.2 驱动 / 认卡$ethtool-ienp6s0 driver: r8169 version:6.17.0-19-generic firmware-version: rtl8168h-2_0.0.2 02/26/15 bus-info: 0000:06:00.0内核原生r8169驱动RTL8111/8168/8211/8411系列本来就在支持列表里不需要额外装r8168-dkms。驱动这层排除。2.3 有没有可能是网络认证802.1X 认证锐捷/深澜那类客户端。端口在认证通过前不放行 DHCP症状完全吻合。抓包验证只能重点看两种报文报文含义ether proto 0x888eEAPOL交换机在要求 802.1X 认证udp port 67/68DHCP有没有 DHCP 请求/回应$sudotcpdump-ienp6s0-nn-e-lether proto 0x888e or udp port 67 or udp port 6809:33:1654:05:db:7a:73:c0ff:ff:ff:ff:ff:ff DHCP Request from54:05:db:7a:73:c0 09:33:1854:05:db:7a:73:c0ff:ff:ff:ff:ff:ff DHCP Request from54:05:db:7a:73:c0 09:33:1954:05:db:7a:73:c0ff:ff:ff:ff:ff:ff DHCP Request from54:05:db:7a:73:c0结论能收到别的机器的 DHCP 广播报文→ 这个端口的二层广播域是通的没有把我们隔离。45 秒里一个0x888e都没有→ 交换机没有要求 802.1X 认证。所以不是物理层不是驱动不是认证。问题在本机。三 一个不用 root 的小技巧看收发计数器/sys/class/net/iface/statistics/是普通用户可读的这个在排查时极其好用$forfinrx_packets tx_packets rx_dropped tx_errors;doprintf%-12s %s\n$f$(cat/sys/class/net/enp6s0/statistics/$f)donerx_packets24297tx_packets0← 一个包都没发出去过 rx_dropped2377tx_errors0等 12 秒再看rx_packets 24401 ← 涨了 104在收包 rx_dropped 2401收得到发不出tx_packets 0。配合前面的抓包结论等于直接指出本机压根没在发 DHCP 请求。这是个很好的分诊器rx涨、tx为 0 → 本机没动作配置问题或者发送路径坏了rx/tx都不涨 → 链路/抓包位置有问题rx_dropped持续涨 → 驱动 ring buffer 或过滤规则的问题四 分析日志挖出真正的坑前面都是现在时真正的答案在历史日志里。$ journalctl-uNetworkManager|grep-ienp6s0关键几段09:04:19 device (enp6s0): state change: config - ip-config 09:04:19 dhcp4 (enp6s0): activation: beginning transaction (timeout in 45 seconds) 09:05:04 device (enp6s0): state change: ip-config - failed (reason ip-config-unavailable) 09:05:04 device (enp6s0): Activation: failed for connection 有线连接 1 09:05:04 dhcp4 (enp6s0): activation: beginning transaction (timeout in 45 seconds) ← 自动重试 09:05:34 device (enp6s0): state change: ip-config - deactivating (reason user-requested) 09:06:15 device (enp6s0): state change: ip-config - deactivating (reason user-requested) 09:06:54 device (enp6s0): state change: disconnected - unavailable (reason carrier-changed) 09:06:58 device (enp6s0): carrier: link connected然后什么都没有了。09:08 之后 NM 重启这块网卡就再也没被碰过。时间线还原时间事件前一天 21:30有线还好的拿到过租约10.193.9.80在/var/lib/NetworkManager/*.lease里能看到09:04:19链路起来NM 用自动生成的有线连接 1发 DHCP09:05:0445 秒超时没收到 OFFERip-config-unavailable自动重试09:05:34 / 09:06:15用户在图形界面手动断开两次09:06用户把这条连接删掉了09:08NM 重启自动连接没被持久化 → 从此网卡孤零零地已断开连 DHCP 都不试4.1no-auto-default.state隐形黑名单$cat/var/lib/NetworkManager/no-auto-default.state 00:E0:21:9D:65:A0 ← 正是这块网卡的 MAC这个文件是整件事里最阴的一环。NetworkManager 在载波出现时会自动为网卡生成一个默认连接就是那个有线连接 1。但如果用户把它删了NM 会认为这个人不想要自动连接于是把这个 MAC 记进no-auto-default.state从此永久不再为它自动建连接。于是形成了一个死锁没有配置 → 发不了 DHCP → 拿不到 IP →用不了↑ │ └────── 被 no-auto-default 禁止自动创建 ←──┘4.2 配置丢失的原因netplan 的锅$ls-la/etc/NetworkManager/system-connections/ 总计8drwxr-xr-x2root root40969月3009:33.drwxr-xr-x8root root40965月1320:04..← 空的系统连接目录完全是空的但nmcli connection show明明能看到 WiFi 和一堆 docker 网桥。那它们存哪了$ls-l/run/NetworkManager/system-connections/ -rw------- netplan-NM-3fc07062-...-ZZU-WLAN.nmconnection -rw------- netplan-NM-78c11d47-....nmconnection -rw------- docker0.nmconnection -rw------- virbr0.nmconnection...全在/run里——那是tmpfs重启即失。文件名前缀netplan-NM-说明了问题。再看 NM 的生效配置$ NetworkManager --print-config|head-5# NetworkManager configuration: /etc/NetworkManager/NetworkManager.conf# (lib: ...) (run: 10-globally-managed-devices.conf, netplan.conf) (etc: ...)↑ 就是这里以及 netplan 侧$ls/etc/netplan/ 01-network-manager-all.yaml ← network:{version:2, renderer: NetworkManager}90-NM-3fc07062-...yaml ← 从 NM 导出的 WiFi 连接90-NM-e55ada30-...yaml90-NM-78c11d47-...yaml ← 我新建的 wired已自动导出真相是这台机器的网络由 netplan 托管数据流是这样的nmcli connectionadd│ ├─→ /etc/netplan/90-NM-uuid.yaml ← 真身持久化 ✅ │ └─ netplan generate │ └─→ /run/NetworkManager/system-connections/ ← 生成物tmpfs ❌ netplan-NM-uuid.nmconnection │ └─→ NetworkManager 读取两个关键推论判断有没有配置不能只看/etc/NetworkManager/system-connections/它永远是空的要看/etc/netplan/90-NM-*.yaml。NM 自动生成的连接如有线连接 1不会被导出到 netplan所以只活在内存//run里NM 一重启就消失。这正是 09:08 之后配置凭空蒸发的原因。附赠一个冷知识为什么这台机器上有线能被 NM 管理$cat/usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf[keyfile]unmanaged-devices*,except:type:wifi,except:type:gsm,except:type:cdmaUbuntu 默认只让 NM 管 WiFi其余设备一律 unmanaged。$cat/run/NetworkManager/conf.d/10-globally-managed-devices.conf(空文件)netplan 在/run里放了一个同名空文件靠更高的配置目录优先级把它覆盖成空从而解除了这条限制。五 修复修复只有一条命令。sudonmcli connectionaddtypeethernet ifname enp6s0 con-name wired\ipv4.method auto ipv6.method auto connection.autoconnectyes结果40 毫秒就拿到了租约09:33:44 dhcp4 (enp6s0): activation: beginning transaction (timeout in 45 seconds) 09:33:44 dhcp4 (enp6s0): state changed new lease, address10.193.19.5, acd pending 09:33:44 dhcp4 (enp6s0): state changed new lease, address10.193.19.5 09:33:44 device (enp6s0): Activation: successful, device activated.抓包也印证了完整的四步握手09:33:44.841 34:dc:99:3e:68:02 00:e0:21:9d:65:a0 DHCP Reply 09:33:46.914 00:e0:21:9d:65:a0 ff:ff:ff:ff:ff:ff 0.0.0.0.68 255.255.255.255.67 DHCP Request 09:33:46.933 34:dc:99:3e:68:02 00:e0:21:9d:65:a0 DHCP Reply收尾三件事# 1. 清掉那个隐形黑名单先备份sudocp-a/var/lib/NetworkManager/no-auto-default.state{,.bak}sudotruncate-s0/var/lib/NetworkManager/no-auto-default.state# 2. 修掉 netplan 的权限告警配置文件应为 0600sudochmod600/etc/netplan/01-network-manager-all.yaml# 3. 重启 NM验证开机能否自动连上sudosystemctl restart NetworkManager六 验证检查项结果重启 NM 后自动激活✅enp6s0自己连上了wired地址 / 路由✅10.193.19.5/17默认路由 metric100优先于 WiFi 的 20600强制走有线✅curl --interface enp6s0→ HTTP 200源 IP10.193.19.530ms吞吐✅ 38.4 MB / 0.573s ≈67 MB/s≈537 MbpsPortal 劫持✅ 无204 探测直通返回 204DNS✅202.196.64.1解析正常IPv6✅ DHCPv6 也拿到了240c:cb02:302:1206::/64两个不是问题的现象避免下次再被误导ping网关和ping 223.5.5.5全丢包—— 校园网网关屏蔽 ICMP。三层通不通要看 HTTP/TCP别用 ping 下结论。rx_packets一直在涨、tx_packets为 0—— 广播域里其他设备的 ARP/DHCP 噪声不是自己发的。七 经验总结排查顺序物理链路(carrier/speed/duplex/对端自协商)↓ 正常 驱动认卡(ethtool-i/ lspci)↓ 正常 网络认证(抓 0x888e 看有没有 EAPOL)↓ 无 本机配置(nmcli device status / 连接是否存在)↓ 缺配置 ← 本次就是这里 DHCP 交互(抓67/68 看 DISCOVER/OFFER)↓ 三层连通(路由 / DNS / HTTP别用ping)五条能复用的教训LOWER_UP≠ 有网。它只说明载波在物理层通。往上还有配置、DHCP、认证、路由四层。/sys/class/net/*/statistics/不需要 rootrx/tx_packets一对比就能分诊是没在发还是发了没人回。ethtool里的Link partner advertised link modes是验证对端活着最直接的证据。/run里的东西都是临时的。看到配置莫名消失先想清楚系统的持久化链路到底是什么、由谁托管。别删 NM 自动生成的连接。删了会被写进no-auto-default.state那块网卡从此不再自动建连接——用nmcli connection modify改而不是删了重建。速查# 这条网卡到底归谁管nmcli device status NetworkManager --print-config|head-5# 看 (run: ...) / (etc: ...)netplan get# 配置到底存哪了ls-la/etc/NetworkManager/system-connections/# netplan 托管时这里是空的ls-la/etc/netplan/90-NM-*.yamlls-la/run/NetworkManager/system-connections/# 被拉黑了吗cat/var/lib/NetworkManager/no-auto-default.state# 直接建一条带 DHCP 的有线连接sudonmcli connectionaddtypeethernet ifnameifacecon-name wired\ipv4.method auto ipv6.method auto connection.autoconnectyes附录可复用的诊断脚本一次性判定端口是否需要认证 / DHCP 有没有回应#!/usr/bin/env bashset-uIFenp6s0LOG/tmp/net-diag.txtCAP/tmp/net-cap.txtexec(tee-a$LOG)21echo--- 链路 ---ip-brlinkshow$IF;ip-braddr show$IFethtool$IF2/dev/null|grep-ESpeed|Duplex|Link detectedecho--- 重置计数器 ---iplinkset$IFdown;sleep1;iplinkset$IFup;sleep2forfinrx_packets tx_packets rx_dropped tx_errors;doprintf %-12s %s\n$f$(cat/sys/class/net/$IF/statistics/$f)doneecho--- 抓包 45s (EAPOL DHCP) ---timeout45tcpdump-i$IF-nn-e-l\ether proto 0x888e or udp port 67 or udp port 68$CAP21TD$!;sleep2echo--- 触发 DHCP ---nmcli connection up wired2/dev/null||dhcpcd-1$IF||echo无可用 DHCP 客户端wait$TD2/dev/nullecho--- 结果 ---ip-braddr show$IF;iproute show dev$IFcat$CAP结果怎么读抓包现象结论有0x888eEAPOL端口要802.1X 认证装学校的认证客户端DISCOVER 出去、无 OFFER 回来端口没放行 → 多半是MAC 未注册/账号未绑定找网络中心有 OFFER 但没拿到 IP系统层被拦 → 查防火墙 /rx_dropped什么包都没有网线/端口实际不通 → 换线、换口秒拿到 OFFER配置问题收工 ✅