需通过策略路由与多路径路由实现流量分发:一、启用IP转发并禁用rp_filter;二、创建自定义路由表并添加源地址策略规则;三、配置基于目的地址的ECMP多路径路由;四、结合iptables fwmark实现应用层策略路由;五、通过systemd服务持久化配置。

如果您在Linux系统中需要为不同目的地址或源地址配置多条路由路径,以实现流量按策略分发到多个网络出口,则需通过策略路由与多路径路由机制完成。以下是具体配置步骤:
一、启用IP转发与禁用反向路径过滤
策略路由依赖内核开启IPv4转发功能,并需关闭严格的反向路径验证(rp_filter),否则部分策略路由包可能被丢弃。
1、临时启用IPv4转发:
执行命令 echo 1 > /proc/sys/net/ipv4/ip_forward。
2、临时关闭所有接口的rp_filter:
执行命令 for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $i; done。
3、永久生效需编辑 /etc/sysctl.conf,添加以下两行:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0。
二、创建自定义路由表并添加规则
Linux策略路由通过将路由表与选择规则绑定实现分流,需先在/etc/iproute2/rt_tables中注册新表名,再使用ip rule和ip route配置对应关系。
1、向 /etc/iproute2/rt_tables 追加两行:
200 table_a
201 table_b。
2、为接口eth0(主出口)配置默认路由至table_a:
执行命令 ip route add default via 192.168.1.1 dev eth0 table table_a。
3、为接口eth1(备用出口)配置默认路由至table_b:
执行命令 ip route add default via 10.0.2.1 dev eth1 table table_b。
4、添加基于源地址的策略规则:
执行命令 ip rule add from 192.168.1.100/32 table table_a;
执行命令 ip rule add from 10.0.2.100/32 table table_b。
三、基于目的地址的多路径路由配置
当同一目标网络存在多条可达路径时,可使用等价多路径(ECMP)或非等价多路径(UCMP)方式负载分担流量,需通过ip route的nexthop语法实现。
1、删除原有单路径默认路由(如存在):
执行命令 ip route del default。
2、添加两条等价下一跳的默认路由:
执行命令 ip route add default nexthop via 192.168.1.1 dev eth0 weight 1 nexthop via 10.0.2.1 dev eth1 weight 1。
3、验证多路径状态:
执行命令 ip route show default,输出应包含nexthop字段及两个via条目。
四、基于应用层标识的策略路由(使用iptables + fwmark)
对于无法按源/目的IP区分但需按协议或端口分流的场景,可通过iptables标记数据包,再结合fwmark匹配策略路由规则。
1、标记所有TCP 80端口出站包:
执行命令 iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1。
2、添加fwmark规则指向table_a:
执行命令 ip rule add fwmark 1 table table_a。
3、确保table_a中存在对应路由(如已配置,默认路由即可);若需专用路径,可添加:
ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0 table table_a。
五、持久化策略路由配置
重启后策略路由配置会丢失,需将命令写入系统启动脚本或使用专用服务管理,避免手动重复执行。
1、新建脚本文件 /usr/local/bin/setup-policy-routes.sh,写入全部ip rule/ip route命令。
2、添加执行权限:
执行命令 chmod +x /usr/local/bin/setup-policy-routes.sh。
3、在systemd服务中调用该脚本:
创建 /etc/systemd/system/policy-routes.service,内容包含Type=oneshot与ExecStart=/usr/local/bin/setup-policy-routes.sh,并启用服务:
systemctl enable policy-routes.service。











