最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
服务器故障排查如何排查多网卡路由错乱问题
时间:2026-08-22 20:04:49 编辑:袖梨 来源:一聚教程网
多网卡路由错乱根源是ARP响应失控、路由表冲突、策略规则错序;必须为每张网卡单独设arp_ignore=1和arp_announce=2,清理重复默认路由并按pref顺序配置ip rule,再通过sysctl、ip route get和tcpdump验证生效。
多网卡路由错乱不是“路由没加对”,而是“路由表太杂、响应太乱、回包走错路”。核心要抓三层:**ARP响应失控、路由表冲突、策略规则错序**。直接看现象、查关键点、改关键参数,不绕弯。先盯住 ARP 响应是否失控
如果两块网卡(比如 eth0 和 eth1)在同一个网段(如 192.168.1.0/24),但服务器对外表现是“时通时断”“ping 网关 MAC 频繁变”“tcpdump 看到多个接口同时回复 ARP”,那大概率是 arp_ignore=0 在作祟。
- 默认值 arp_ignore=0 意味着:只要本机配了某个 IP,任意网卡收到对应 ARP 请求都会应答——哪怕这个 IP 根本不在该网卡上
- 结果就是交换机反复学到同一 IP 对应不同 MAC,MAC 地址漂移,连接抖动
- 必须为每张业务网卡单独设:
echo 1 | sudo tee /proc/sys/net/ipv4/conf/eth0/arp_ignoreecho 1 | sudo tee /proc/sys/net/ipv4/conf/eth1/arp_ignore - 还要同步配 arp_announce=2,否则发包时源接口选错,ARP 请求发出去没人回:
echo 2 | sudo tee /proc/sys/net/ipv4/conf/eth0/arp_announceecho 2 | sudo tee /proc/sys/net/ipv4/conf/eth1/arp_announce
再查路由表有没有“默认路由打架”
执行 ip route show,重点看有没有多条 default via,尤其是 metric 值接近或相同:
- 比如
default via 192.168.1.1 dev eth0 metric 100和default via 192.168.2.1 dev eth1 metric 100——内核会按字典序或哈希随机选,回包路径不可控 - 典型症状:能 ping 通网关,但 curl 外网失败;或者某网卡“能收不能回”
- 解决不是删一条完事,而是明确主备关系:
把主出口 metric 设低(如 100),备用设高(如 200);
或干脆删掉非必要默认路由,只留一个出口
接着看策略路由规则是否“顺序颠倒”
运行 ip rule show,注意 pref 数值(越小越优先):
- 常见陷阱:一条
from all lookup main(pref=32766)排在前面,把本该走自定义表的流量全吞了 - 正确做法是:具体规则放前面,通用规则放后面
例如:
ip rule add from 10.0.1.100/32 table 101 pref 100ip rule add from all lookup main pref 32766 - 查某 IP 实际走哪条:用
ip route get from 10.0.1.100 to 8.8.8.8模拟真实路径,别只看ip route
最后验证是否真修复
改完别急着重启服务,做三件事确认生效:
- 查 ARP 设置:
sysctl net.ipv4.conf.eth0.arp_ignore返回= 1才算到位 - 查路由走向:
ip route get 192.168.1.100 from 172.16.1.50 iif eth0,确认源接口和出接口一致 - 抓包验证:
tcpdump -i eth0 arp和tcpdump -i eth1 arp同时跑,确保只有目标网卡响应对应网段 ARP