Linux多网卡需用策略路由:先在/etc/iproute2/rt_tables添加自定义表,再为每网卡配置直连+默认路由,用ip rule绑定源IP与表,最后关闭rp_filter并开启ip_forward。

Linux 多网卡环境下,仅靠 route add default gw 会出问题——内核只允许 main 表中存在一个默认路由,后加的会覆盖前一个;更严重的是,响应包可能从另一张网卡发出,源 IP 和出口不匹配,被对方或本机 rp_filter 丢弃,导致 SSH 卡死、ping 通但应用不通。
必须先注册自定义路由表
系统默认只有 local、main、default 三张表。新增表名必须写入 /etc/iproute2/rt_tables,格式严格为“数字 空格 表名”,不能有下划线以外的特殊字符(如 tab-eth0 无效,tab_eth0 可用):
- 用文本编辑器打开该文件,在末尾追加两行(ID 建议 ≥100,避开系统保留值):
100 tab_eth0101 tab_eth1- 保存后无需重启,但已有命令不会自动识别新表名,需重新执行规则和路由添加
为每张网卡配置专属路由表
每张表要包含两项关键路由:直连子网路由 + 默认网关路由。假设:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
eth0:IP192.168.10.100/24,网关192.168.10.1 -
eth1:IP10.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_eth0ip route add default via 192.168.10.1 dev eth0 table tab_eth0ip route add 10.0.20.0/24 dev eth1 src 10.0.20.100 table tab_eth1ip route add default via 10.0.20.1 dev eth1 table tab_eth1
绑定源地址与路由表
用 ip rule 告诉内核:“来自这个源 IP 的包,查这张表”。优先级数字越小越先匹配,建议按顺序设置:
ip rule add from 192.168.10.100/32 table tab_eth0 priority 100ip rule add from 10.0.20.100/32 table tab_eth1 priority 101- 验证是否生效:
ip rule show应看到这两条规则;ip route show table tab_eth0应显示对应路由条目
关闭反向路径过滤并开启转发
即使规则和路由全对,若 rp_filter 开启,内核会检查“回程路径是否与来路一致”,策略路由下极易判定为非法而丢包。必须设为 0:
- 临时关闭(测试用):
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filterecho 0 > /proc/sys/net/ipv4/conf/eth0/rp_filterecho 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter- 同时启用 IPv4 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:在
/etc/sysctl.conf中添加: net.ipv4.conf.all.rp_filter = 0net.ipv4.ip_forward = 1- 然后运行
sysctl -p
不复杂但容易忽略


















