收起左侧

更新系统后宿主机出网 TCP/UDP 全断(ICMP 正常)

0
回复
26
查看
[ 复制链接 ]

1

主题

0

回帖

0

牛值

江湖小虾

悬赏1飞牛币未解决

更新系统后宿主机出网 TCP/UDP 全断(ICMP 正常),定位为网卡 XDP 程序异常(附完整诊断过程与临时解法)

一、环境信息

  • 机型:HP MicroServer Gen8
  • CPU:Intel Xeon E3-1265L v2(4 核 8 线程)
  • 内存:8GB
  • 网卡:
    • 板载 Broadcom BCM5720 ×2(eno1 / eno2,已聚合为 bond1)
    • PCIe 扩展卡 Intel I226-V 2.5G ×1(ens1)
  • 系统版本:更新前 【更新前版本号】 → 更新后 【更新后版本号】
  • 网络结构:bond1 开启 OVS(bond1-ovs 为管理口,192.168.3.20/24,网关 192.168.3.1);ens1 开启 OVS(ens1-ovs,静态 192.168.100.2/24,无网关);一台虚拟机(iStoreOS 软路由)的两块 virtio 网卡分别桥接到上述两个 OVS 桥;Docker 服务启用中

二、故障现象

系统更新并重启后,宿主机完全无法访问互联网:curl 挂死、系统内需要联网的功能全部失败。具体表现为:

  • ping 192.168.3.1(网关):正常
  • ping 223.5.5.5(公网 IP):正常
  • 向网关做 DNS 查询(nslookup www.baidu.com 192.168.3.1):正常
  • 向公网 DNS 查询(nslookup www.baidu.com 223.5.5.5):超时
  • curl -I http://www.baidu.com挂死无响应curl -4 同样)
  • 同路由器下其他设备上网完全正常,排除路由器与宽带问题

即:出方向的 TCP、UDP 全部中断,但 ICMP 与本网段通信正常。接口状态、IP 地址、默认路由(default via 192.168.3.1 dev bond1-ovs)检查均无异常。

三、诊断过程

逐项排除链路、路由、网关、DNS 后,注意到三块物理网卡上都挂载了 XDP 程序,且更新前后发生了变化:

  • 更新前:eno1 / eno2 显示 prog/xdp id 27,ens1 无 XDP;
  • 更新后:eno1 / eno2 变为 xdpgeneric/id:41ens1 也新增挂载 xdp/id:41

随后做摘除测试:

sudo ip link set dev eno1 xdp off
sudo ip link set dev eno2 xdp off
sudo ip link set dev ens1 xdp off
curl -I http://www.baidu.com

结果立即恢复

HTTP/1.1 200 OK
Server: bfe
...

同时,之前受影响的 OVS 桥接虚拟机(软路由下联的无线网络)上网也一并恢复正常。

四、结论

本次更新后挂载到物理网卡上的 XDP 程序(id 41)存在 bug:放行 ICMP,但出方向的 TCP/UDP 流量被丢弃,导致宿主机断网,并连带影响经 OVS 桥接的虚拟机。该组件属于系统网络栈内部功能,设置界面无对应开关("网卡性能模式"仅针对 Realtek 网卡且为关闭状态,与本问题无关)。

五、临时解决方案(供遇到同样问题的用户参考)

sudo ip link set dev eno1 xdp off   # 换成你的网卡名
sudo ip link set dev eno2 xdp off
sudo ip link set dev ens1 xdp off

注意:重启后 XDP 会被系统重新挂载,故障复发。可用下面的 systemd 单元在每次开机后自动摘除,待官方修复后删除:

sudo tee /etc/systemd/system/xdp-off.service > /dev/null <<'EOF'
[Unit]
Description=Detach buggy XDP programs (workaround)
After=network-online.target
Wants=network-online.target

[Service] Type=oneshot ExecStart=/bin/sh -c 'sleep 15; ip link set dev eno1 xdp off; ip link set dev eno2 xdp off; ip link set dev ens1 xdp off' RemainAfterExit=yes

[Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload

code

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则