linux多网关负载均衡依赖策略路由:定义多路由表(如tab_eth0/tab_eth1)、设置源ip路由、用ip rule按源/目的/标记分流,禁用rp_filter防丢包,并通过脚本或systemd持久化配置。

Linux中实现多网关负载均衡路由,核心不是靠“多条默认路由叠加”,而是用策略路由(policy routing)配合多路由表与规则匹配,让不同流量按需走不同出口。它不改变单个连接的路径,但能整体分摊出站流量,兼顾可用性与效率。
定义独立路由表并绑定网关
先在 /etc/iproute2/rt_tables 中为每个网卡分配专属路由表名和编号,例如:
- echo "100 tab_eth0" >> /etc/iproute2/rt_tables
- echo "101 tab_eth1" >> /etc/iproute2/rt_tables
然后分别为每张表添加对应网关路由(注意指定源IP,避免回程异常):
- ip route add default via 192.168.10.1 dev eth0 src 192.168.10.100 table tab_eth0
- ip route add default via 10.0.20.1 dev eth1 src 10.0.20.100 table tab_eth1
设置分流规则决定查哪张表
规则顺序很重要,系统按优先级从上到下匹配。常用匹配维度包括源地址、目的地址或包标记:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- ip rule add from 192.168.10.100/32 table tab_eth0(该IP发出的包走tab_eth0)
- ip rule add to 10.0.100.0/24 table tab_eth1(访问该网段走tab_eth1)
- ip rule add fwmark 1 table tab_eth0(配合iptables标记后使用)
若需轮询式负载,可配合 iptables -t mangle -A OUTPUT -m statistic --mode nth --every 2 --packet 0 -j MARK --set-mark 1 实现简单分发。
关闭反向路径过滤防止丢包
多出口场景下,内核默认启用 rp_filter(反向路径验证),可能因回程接口不匹配而丢弃响应包。需对每个网卡禁用:
- echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
- echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
- 并写入 /etc/sysctl.conf 持久化:net.ipv4.conf.eth0.rp_filter = 0
确保配置重启后仍生效
临时命令重启即失效。推荐做法是:
- 将所有 ip route 和 ip rule 命令写入网络服务启动脚本(如 /etc/network/if-up.d/route-policy)
- 或封装为 systemd service,在 network-online.target 后运行
- 验证是否生效:ip rule show、ip route show table tab_eth0、curl --interface eth0 ifconfig.me










