在服务器网络配置中,直接添加两个默认网关会导致路由冲突和网络不稳定。实现服务器双网关的正确方法是基于“策略路由”或“静态路由分离”原则,根据数据包的源地址、目标地址或进入接口来智能匹配不同的出口网关。 这种配置不仅能解决多网卡环境下的通信问题,还能实现链路负载均衡和冗余备份,是保障企业级业务高可用的关键网络技术。

理解双网关配置的核心逻辑
在操作系统网络协议栈中,路由表主要负责决定数据包的下一跳地址,默认网关(Default Gateway,即0.0.0.0/0)是一条“兜底”路由,当数据包的目标地址不在本地路由表中时,系统会将其发送给默认网关。
如果在服务器上简单地配置两个默认网关,系统通常只会生效其中一个(根据跃点数/Metric值优先级),或者导致路由表震荡,造成网络时断时续。 核心思路是将“双默认网关”拆解为“主默认网关 + 静态路由”或“多张路由表 + 策略规则”。
基于业务场景的静态路由分离(内外网分离)
这是最常见且易于维护的场景,适用于服务器同时连接内网(专有网络)和互联网(公网)的情况,我们将访问互联网的流量指向公网网关,将访问特定内网网段的流量指向内网网关。
配置主网关
确定哪一张网卡主要负责对外通信,假设eth0为外网网卡,IP为202.100.1.10,网关为202.100.1.1,在系统配置文件中设置默认网关指向该地址,服务器所有未知目标流量都会通过eth0发出。
配置副网关与静态路由
假设eth1为内网网卡,IP为192.168.10.10,网关为192.168.10.1,在配置eth1时,不要设置默认网关,而是通过添加静态路由的方式,告诉系统凡是去往内网特定网段(如10.0.0.0/8)的数据包,才使用192.168.10.1作为下一跳。
在Linux系统中,可以使用以下命令实现:
ip route add 10.0.0.0/8 via 192.168.10.1 dev eth1
在Windows系统中,使用route命令:
route -p add 10.0.0.0 mask 255.0.0.0 192.168.10.1
通过这种方式,路由表清晰明确:公网流量走默认路由,内网流量走特定静态路由,互不干扰。
基于源地址的策略路由(双外网负载均衡)
当服务器连接两条不同的ISP线路(如电信和联通),且需要同时提供服务或进行流量分流时,简单的静态路由无法满足需求,因为回包路径可能不一致导致连接中断,此时必须使用策略路由。

创建多张路由表
Linux系统支持多张路由表,我们需要为每个外网接口定义独立的路由表。
编辑 /etc/iproute2/rt_tables 文件,添加两张表:
100 telecom
200 unicom
填充路由表规则
分别向这两张表中添加默认路由。
ip route add default via 电信网关IP dev eth0 table telecom
ip route add default via 联通网关IP dev eth1 table unicom
确保这两条物理路由在主路由表中也能找到对应的网关,以便能直接ping通网关:
ip route add via 电信网关IP dev eth0
ip route add via 联通网关IP dev eth1
设置策略规则
这是最关键的一步,使用 ip rule 命令定义流量匹配规则,我们希望从eth0进入的流量回包也走eth0,或者根据源IP来选择出口。
根据源IP选择:
ip rule add from 电信IP地址 table telecom
ip rule add from 联通IP地址 table unicom
根据入接口选择(适用于防火墙或转发场景):
ip rule add iif eth0 table telecom
ip rule add iif eth1 table unicom
通过这种配置,服务器实现了源地址路由,即来自哪个接口的请求,回应的数据包就从哪个接口出去,完美解决了非对称路由引起的连接问题。
高可用性与故障切换
仅仅设置双网关还不够,还需要考虑链路故障时的自动切换,在生产环境中,建议结合Keepalived或Shell脚本监控来实现高可用。
可以编写一个监控脚本,定期Ping电信网关和联通网关,如果电信网关连续多次无响应,脚本自动将电信路由表的权重降低或删除相关策略规则,使流量自动切换到联通线路,当电信线路恢复后,脚本再自动添加回路由规则,这种“主备切换”机制是保障业务连续性的专业实践。

配置验证与故障排查
配置完成后,必须进行严格的验证,使用 ip route show 和 ip rule show 查看当前的路由表和策略规则是否生效。
跟踪路由测试
使用 traceroute 或 tracert 命令,分别测试访问公网IP和内网IP的路径,确认流量是否按照预期走了正确的网关。
抓包分析
如果路由看似正确但网络不通,使用 tcpdump 或 wireshark 在网卡接口抓包,检查数据包的源IP和目的IP是否正确,确认回包是否从错误的接口发出,很多时候,网络不通是因为回包路径被防火墙拦截或路由不对称。
相关问答
Q1:在Windows服务器上配置双网关,为什么总是有一个网络不通?
A1:Windows系统在处理多默认网关时,会自动根据“跃点数”选择优先级最高的网关,忽略另一个,在Windows上配置双网关时,只能在一个网卡上设置默认网关,另一个网卡留空,然后使用 route -p add 命令手动添加指向该网卡网关的特定静态路由,如果两个都设为默认网关,会导致不可预测的路由行为。
Q2:配置策略路由后,服务器本身无法Ping通网关了,是什么原因?
A2:这通常是因为本地路由表中缺少“本地路由”,在Linux策略路由配置中,除了在自定义表(如table 100)中添加默认路由外,还需要在主路由表中添加指向该网关的路由(不带table参数),因为服务器自身发起的Ping请求首先查询的是主路由表,如果主路由表找不到去往网关的路径,Ping自然失败,务必确保主路由表包含所有直连网段的明细路由。
希望以上方案能帮助您解决服务器双网关的配置难题,如果您在具体的操作系统版本实施过程中遇到参数报错或路由不生效的情况,欢迎在评论区详细说明您的环境,我们将为您提供针对性的排查建议。

















