You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nmcli实现172.22.0.0/24子网流量的负载均衡与故障转移技术咨询

使用nmcli实现172.22.0.0/24子网流量的负载均衡与故障转移技术咨询

没问题,你完全可以用nmcli结合Linux内核的ECMP(等价多路径路由)和NetworkManager的网关监控功能来实现这个需求——既让172.22.0.0/24的流量在两个ISP网关间负载均衡,又能在某一个网关故障时自动切换到另一个。下面是一步步的具体操作:

核心思路

首先,我们要为每个ISP网关配置独立的路由表,然后通过策略路由规则,让来自172.22.0.0/24的流量均匀分配到这两个路由表中;同时借助NetworkManager的网关可达性检测,实现故障自动转移。

具体操作步骤

1. 调整外网网卡的路由表与网关配置

假设你的外网连接名称就是enp2s0(对应网关192.168.1.3)和enp3s0(对应网关192.168.1.1),先分别为它们配置专用路由表:

# 配置enp2s0使用路由表201,并添加默认路由指向192.168.1.3
nmcli connection modify enp2s0 ipv4.route-table 201
nmcli connection modify enp2s0 ipv4.routes "0.0.0.0/0 192.168.1.3 table 201"
# 启用网关故障检测:当网关不可达时,自动移除该路由表的默认路由
nmcli connection modify enp2s0 ipv4.may-fail yes
# 设置网关ping超时时间(单位:秒,这里设为30秒)
nmcli connection modify enp2s0 ipv4.gateway-ping-timeout 30

# 对enp3s0做同样配置,使用路由表202,指向网关192.168.1.1
nmcli connection modify enp3s0 ipv4.route-table 202
nmcli connection modify enp3s0 ipv4.routes "0.0.0.0/0 192.168.1.1 table 202"
nmcli connection modify enp3s0 ipv4.may-fail yes
nmcli connection modify enp3s0 ipv4.gateway-ping-timeout 30

2. 添加策略路由规则,定向内网流量

接下来,我们要让172.22.0.0/24的流量同时使用这两个路由表,实现负载均衡。把规则添加到内网网卡enp1s0的配置中:

# 添加两条优先级相同的规则,让内网流量均匀分配到两个路由表
nmcli connection modify enp1s0 ipv4.routing-rules "from 172.22.0.0/24 table 201 priority 100"
nmcli connection modify enp1s0 ipv4.routing-rules "from 172.22.0.0/24 table 202 priority 100"

3. 激活配置并验证

重新激活所有连接,让配置生效:

nmcli connection up enp2s0
nmcli connection up enp3s0
nmcli connection up enp1s0

然后验证配置是否正确:

  • 查看路由表:ip route show table 201 和 ip route show table 202,应该能看到对应网关的默认路由
  • 查看策略规则:ip rule show,能看到两条来自172.22.0.0/24的规则,优先级都是100
  • 测试负载均衡:从内网机器多次执行traceroute 8.8.8.8,或者在路由器上执行ip route get 8.8.8.8 from 172.22.0.10,应该能看到网关在192.168.1.3和192.168.1.1之间切换
  • 测试故障转移:断开其中一个ISP路由器的连接,等待30秒后,执行ip route show table 对应表号,会发现该路由已被移除,此时所有内网流量会自动走另一个网关;恢复连接后,路由会重新生效,流量恢复负载均衡

优化负载均衡效果(可选)

Linux内核默认的ECMP哈希策略是基于源IP+目的IP,这意味着同一个内网IP访问同一个外部IP会一直走同一个网关。如果想要更均匀的负载,可以调整内核参数,让哈希包含端口信息:

# 临时生效
sysctl -w net.ipv4.fib_multipath_hash_policy=1
# 永久生效,添加到/etc/sysctl.conf
echo "net.ipv4.fib_multipath_hash_policy=1" >> /etc/sysctl.conf
sysctl -p

备注:内容来源于stack exchange,提问作者Shunyata Kharg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 16:02:35