必须用策略路由实现特定流量走特定网卡,因Linux默认仅维护主路由表,无法按源IP区分路径;需创建自定义路由表、配置直连与默认路由、添加源IP匹配的策略规则并验证。

让特定流量走特定网卡必须用策略路由,普通静态路由无法区分流量来源
Linux默认只维护一张主路由表,所有出向流量都按目标IP查同一张表,导致双网卡环境下无法控制“谁发起的请求就走哪张网卡”,必须通过策略路由机制绑定源IP、标记或接口条件与独立路由表。
第一步:创建自定义路由表
编辑 /etc/iproute2/rt_tables 文件,在末尾添加两行:
100 tab_eth0
200 tab_eth1
这两行定义了编号为100和200的两张新路由表,名称可自定义但编号不能重复,也不能与系统保留编号(0~255中0=unspec、253=default、254=main、255=local)冲突。
第二步:为每张表配置对应网卡的直连与默认路由
假设 eth0 IP 为 192.168.10.100/24,网关为 192.168.10.1;eth1 IP 为 10.0.20.100/24,网关为 10.0.20.1。
执行以下命令:
ip route add 192.168.10.0/24 dev eth0 src 192.168.10.100 table tab_eth0 → ip route add default via 192.168.10.1 dev eth0 table tab_eth0
ip route add 10.0.20.0/24 dev eth1 src 10.0.20.100 table tab_eth1 → ip route add default via 10.0.20.1 dev eth1 table tab_eth1
【必须添加直连路由】 否则系统无法识别本机在该网段的地址,会导致 ping -I eth0 本地网关失败。
第三步:添加策略规则绑定源IP与路由表
策略规则决定“什么包查哪张表”。按源IP分流最常用也最稳定:
方法一:按本机出口IP精确匹配
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
ip rule add from 192.168.10.100/32 table tab_eth0
ip rule add from 10.0.20.100/32 table tab_eth1
方法二:按整个子网匹配(适合多台主机共用同一网卡)
ip rule add from 192.168.10.0/24 table tab_eth0
ip rule add from 10.0.20.0/24 table tab_eth1
注意:rule 优先级默认递增,先添加的规则 priority 值更小。若已有冲突规则,可用 ip rule add ... priority 100 显式指定。
第四步:验证策略路由是否生效
运行 ip rule show 查看规则列表,确认 from 条件与 table 名称正确对应。
运行 ip route show table tab_eth0 和 ip route show table tab_eth1,检查各表中是否包含直连网段和默认路由。
测试连通性:
ping -I eth0 8.8.8.8 → 应走 tab_eth0 表,响应来自 eth0 网关
ping -I eth1 10.0.20.1 → 应走 tab_eth1 表,响应来自 eth1 本地网关
用 ip route get 8.8.8.8 from 192.168.10.100 直接查看内核选路结果,输出中应含 oif eth0 table tab_eth0。


















