linux配置静态路由必须显式指定dev接口或on-link: true,否则多网卡下易选错路径导致tcp连接失败;临时用ip route add需带dev参数,永久配置在centos的route-接口名文件或ubuntu netplan的routes字段中。

Linux中配置静态路由并绑定到特定接口,关键在于明确指定出口网卡(dev),否则内核可能选错路径,导致能ping通但TCP连接失败等典型问题。
临时绑定接口添加静态路由
用 ip route add 时必须带 dev 参数,确保流量从指定网卡发出:
-
正确写法(推荐):
sudo ip route add 192.168.100.0/24 via 192.168.1.1 dev eth0 -
错误写法(易出问题):
sudo ip route add 192.168.100.0/24 via 192.168.1.1(缺 dev,多网卡时不可靠) - 验证是否生效:
ip route show | grep "192.168.100.0",确认输出中包含dev eth0 - 删除该路由:
sudo ip route del 192.168.100.0/24
永久绑定:CentOS/RHEL 系统
在 /etc/sysconfig/network-scripts/route-<i>接口名</i> 文件中写入,格式严格,自动绑定接口:
- 文件名必须匹配真实接口,如网卡是
ens33,则创建/etc/sysconfig/network-scripts/route-ens33 - 内容只写路由规则,不加命令前缀:
192.168.100.0/24 via 192.168.1.1 dev ens33 - 不写
dev也可,默认走该文件对应接口;但显式写出更清晰、防误配 - 生效命令:
sudo systemctl restart network或sudo ifdown ens33 && sudo ifup ens33
永久绑定:Ubuntu/Debian(Netplan 用户)
Netplan 是默认网络管理器,需在 YAML 中通过 on-link: true 和显式 via 实现可靠绑定:
- 编辑
/etc/netplan/*.yaml,在对应网卡下添加: -
routes:- to: 192.168.100.0/24via: 192.168.1.1on-link: true -
on-link: true表示下一跳直连该网卡,避免因ARP失败导致路由失效 - 应用配置:
sudo netplan apply
为什么不能只靠网关IP?
仅指定 via 不够——内核需知道从哪张网卡发包。若目标网关不在任一本地子网内,系统会尝试查路由表找“去往网关的路径”,形成循环依赖。显式 dev 或 on-link: true 可绕过此查找,强制直连发送。











