一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

服务器故障排查如何排查多网卡路由错乱问题

时间:2026-08-22 20:04:49 编辑:袖梨 来源:一聚教程网

多网卡路由错乱根源是ARP响应失控、路由表冲突、策略规则错序;必须为每张网卡单独设arp_ignore=1和arp_announce=2,清理重复默认路由并按pref顺序配置ip rule,再通过sysctl、ip route get和tcpdump验证生效。

多网卡路由错乱不是“路由没加对”,而是“路由表太杂、响应太乱、回包走错路”。核心要抓三层:**ARP响应失控、路由表冲突、策略规则错序**。直接看现象、查关键点、改关键参数,不绕弯。

先盯住 ARP 响应是否失控

如果两块网卡(比如 eth0eth1)在同一个网段(如 192.168.1.0/24),但服务器对外表现是“时通时断”“ping 网关 MAC 频繁变”“tcpdump 看到多个接口同时回复 ARP”,那大概率是 arp_ignore=0 在作祟。

  1. 默认值 arp_ignore=0 意味着:只要本机配了某个 IP,任意网卡收到对应 ARP 请求都会应答——哪怕这个 IP 根本不在该网卡上
  2. 结果就是交换机反复学到同一 IP 对应不同 MAC,MAC 地址漂移,连接抖动
  3. 必须为每张业务网卡单独设:

    echo 1 | sudo tee /proc/sys/net/ipv4/conf/eth0/arp_ignore

    echo 1 | sudo tee /proc/sys/net/ipv4/conf/eth1/arp_ignore

  4. 还要同步配 arp_announce=2,否则发包时源接口选错,ARP 请求发出去没人回:

    echo 2 | sudo tee /proc/sys/net/ipv4/conf/eth0/arp_announce

    echo 2 | sudo tee /proc/sys/net/ipv4/conf/eth1/arp_announce

再查路由表有没有“默认路由打架”

执行 ip route show,重点看有没有多条 default via,尤其是 metric 值接近或相同:

  1. 比如 default via 192.168.1.1 dev eth0 metric 100default via 192.168.2.1 dev eth1 metric 100 ——内核会按字典序或哈希随机选,回包路径不可控
  2. 典型症状:能 ping 通网关,但 curl 外网失败;或者某网卡“能收不能回”
  3. 解决不是删一条完事,而是明确主备关系:

    把主出口 metric 设低(如 100),备用设高(如 200);

    或干脆删掉非必要默认路由,只留一个出口

接着看策略路由规则是否“顺序颠倒”

运行 ip rule show,注意 pref 数值(越小越优先):

  1. 常见陷阱:一条 from all lookup main(pref=32766)排在前面,把本该走自定义表的流量全吞了
  2. 正确做法是:具体规则放前面,通用规则放后面

    例如:

    ip rule add from 10.0.1.100/32 table 101 pref 100

    ip rule add from all lookup main pref 32766

  3. 查某 IP 实际走哪条:用 ip route get from 10.0.1.100 to 8.8.8.8 模拟真实路径,别只看 ip route

最后验证是否真修复

改完别急着重启服务,做三件事确认生效:

  1. 查 ARP 设置:sysctl net.ipv4.conf.eth0.arp_ignore 返回 = 1 才算到位
  2. 查路由走向:ip route get 192.168.1.100 from 172.16.1.50 iif eth0,确认源接口和出接口一致
  3. 抓包验证:tcpdump -i eth0 arptcpdump -i eth1 arp 同时跑,确保只有目标网卡响应对应网段 ARP

热门栏目