实现Linux双路由的核心在于利用基于策略的路由(PBR)和多路由表技术,通过iproute2工具集精确控制数据包的转发路径,从而解决Linux内核默认只能处理一个默认网关的限制,这种配置不仅能实现网络冗余和故障切换,还能根据源地址、目标地址或应用端口进行智能流量分流,是构建高可用性服务器网络架构的关键技术。

传统单网关路由的局限性
在标准的Linux网络配置中,管理员通常通过route命令或修改/etc/network/interfaces添加默认网关,Linux内核的IP路由层在处理多个默认路由时,往往依据跃点数或路由添加顺序选择其中一个作为主路径,另一个则被忽略或仅在主路径失效时短暂启用,这种机制无法满足企业级应用对链路负载均衡和精细流量控制的需求,如果简单地配置两个默认网关,会导致返回数据包不对称,进而引发连接阻断或严重的网络延迟问题,必须引入更高级的路由机制来管理多出口网络。
核心技术:基于策略的路由(PBR)
要突破单路由表的限制,必须理解Linux内核的多路由表机制,传统的route -n仅操作main路由表,而Linux系统实际上支持多达255张路由表,基于策略的路由允许管理员定义规则,将特定的流量匹配到特定的路由表中。
这一过程主要依赖iproute2软件包中的两个核心命令:ip rule和ip route。
- ip rule:负责定义策略规则,用于决定数据包应该查找哪张路由表,匹配条件可以包括源IP地址、目标IP地址、入站接口等。
- ip route:负责在指定的路由表中添加具体的路由条目,包括网关、子网掩码和跃点数。
通过将不同的物理网卡(如eth0对应电信线路,eth1对应联通线路)绑定到不同的路由表,并设置相应的策略规则,系统就能精确控制数据流向。
实战配置:双外网环境搭建
假设服务器有两张网卡:eth0(IP: 192.168.1.10,网关: 192.168.1.1)和eth1(IP: 192.168.2.10,网关: 192.168.2.1),目标是实现通过eth0发出的流量返回时也走eth0,eth1同理,并实现链路冗余。
需要在/etc/iproute2/rt_tables文件中定义自定义路由表,

200 T1 201 T2
使用ip route命令分别为这两个表添加路由,关键在于指定src参数,确保返回包的源地址与出站接口一致,保证对称路由:
ip route add default via 192.168.1.1 dev eth0 src 192.168.1.10 table T1 ip route add default via 192.168.2.1 dev eth1 src 192.168.2.10 table T2
必须将这两个网段的路由也加入主表,以确保本地网络互通:
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.10 ip route add 192.168.2.0/24 dev eth1 src 192.168.2.10
配置ip rule策略规则,指定源地址匹配:
ip rule add from 192.168.1.10 table T1 ip rule add from 192.168.2.10 table T2
任何从源IP 192.168.1.10发出的流量都会查询T1表,从而通过eth0转发;反之亦然,这解决了多网卡环境下的“回包”混乱问题。
高级应用:链路聚合与故障切换
在实现基本的策略路由后,为了进一步优化网络性能和可靠性,可以引入多路径路由,Linux内核支持在main路由表中添加权重不同的默认网关,实现负载均衡。
在主路由表中添加:
ip route add default scope global nexthop via 192.168.1.1 weight 1 nexthop via 192.168.2.1 weight 1
这条命令告诉内核,将发往互联网的数据包按1:1的比例分配给两个网关,当某一条线路物理断开时,内核会自动检测并移除失效路径,实现毫秒级的故障切换。
结合iptables的MARK目标,还可以实现基于应用的分流,将所有标记为80(HTTP)的流量强制通过T1表,将SSH流量通过T2表,从而在带宽利用上达到最优解。

验证与排错
配置完成后,使用ip route show table T1和ip rule list检查配置是否正确,测试时,应使用ping -I参数指定源IP进行连通性测试,若出现网络不通,通常是因为缺少了特定网段的直连路由或src参数配置错误导致回包路径不对称,建议开启sysctl中的rp_filter(反向路径过滤)为2(宽松模式),以适应复杂的非对称路由场景,但在高安全需求下应保持严格模式并确保路由配置绝对对称。
相关问答
Q1:配置Linux双路由后,为什么会出现网络时断时续的情况?
A1: 这种情况通常由“不对称路由”引起,当数据包从网卡A发出,但回包被内核路由到网卡B时,如果防火墙开启了严格的反向路径过滤,内核会丢弃该回包,解决方法是确保在路由表中使用src参数绑定源IP,或者将net.ipv4.conf.all.rp_filter设置为0或2,允许非对称回包通过。
Q2:如何实现一条主线路和一条备用线路的自动切换?
A2: 可以在main路由表中配置不同权重的默认路由,或者使用ip route的nexthop功能,更专业的做法是结合网络监控脚本(如Keepalived或简单的Shell脚本),通过ICMP检测链路状态,当主线路网关不可达时,脚本自动删除主路由,待线路恢复后重新添加,从而实现高可用的自动切换。
互动
如果您在配置Linux双路由过程中遇到关于特定应用流量分流的难题,或者想了解更多关于iptables与策略路由结合的高级用法,欢迎在评论区留言,我们可以共同探讨更复杂的网络拓扑解决方案。















