当前位置:首页 > 云服务器 > 正文

服务器如何配置两个网关,配置网关的步骤是什么?

Linux系统默认只允许一条默认路由生效,但通过策略路由(Policy Routing)技术,可以基于源IP、目标IP或端口等条件,让不同流量走不同网关,实现双线冗余或负载均衡。这篇文章将带你从原理到实操,手把手完成双网关配置,并顺带聊聊服务器网络架构设计中的常见坑。

为什么服务器需要两个网关

大多数人对网关的理解是“出门的那扇门”,单网关架构下,一旦交换机端口故障、运营商线路波动或者网关设备重启,服务器就彻底失联了,生产环境里,这种单点故障造成的损失往往是分钟级甚至秒级的。

两个网关的意义在于:让服务器的网络出口具备冗余能力,常见场景包括:

  • 服务器同时接入电信和联通两条线路,解决跨网访问延迟问题
  • 内网流量走内网网关,公网流量走公网网关,实现流量分流
  • 主备网关自动切换,某条链路挂了,另一条立刻接管

核心难点在于:Linux的路由表默认只有一张,默认网关只能填一个,强行写两个default route,后写的会覆盖先写的,解决办法是引入策略路由,也就是让内核根据规则查不同的路由表。

双网关配置前的准备工作

动手之前,先把硬件和系统状态摸清楚。

确认网卡和链路状态

执行 ip addr 查看当前网卡信息,记下两个网卡名称(常见的是 eth0、eth1,也可能是 ens33、ens34)以及各自的IP地址,再执行 ip route 查看当前默认路由,确认现有网关地址。

确认内核参数支持

策略路由依赖 ip rule 和 ip route 命令,这属于 iproute2 软件包,绝大多数Linux发行版默认已安装,检查一下:

which ip cat /proc/sys/net/ipv4/ip_forward

ip_forward 返回0且你需要做转发,记得改成1:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p

规划路由表编号

Linux 允许自定义路由表,编号范围是1到252(0、253、254、255保留),建议给每个运营商或每条链路分配独立的表号,

路由表编号 用途
100 电信线路
200 联通线路
254 主路由表(系统默认)

表号对应关系写在 /etc/iproute2/rt_tables 文件里,可以追加可读名称,方便后续管理。

策略路由双网关配置完整实操

下面以一台双网卡服务器为例,网卡配置如下:

  • eth0:IP 168.1.100/24,网关 168.1.1(电信)
  • eth1:IP 168.2.100/24,网关 168.2.1(联通)

目标是:访问电信网段的流量走 eth0,访问联通网段的流量走 eth1,默认情况下优先走电信,电信故障自动切换联通。

第一步:配置两张网卡的静态IP

编辑 /etc/network/interfaces(Debian/Ubuntu)或 /etc/sysconfig/network-scripts/ifcfg-eth0 和 ifcfg-eth1(CentOS/RHEL),确保两个网卡都配置了正确的IP、掩码和各自的网关地址,注意不要在网卡配置文件里同时写两个网关,只写各自对应的那个。

第二步:添加自定义路由表规则

编辑 /etc/iproute2/rt_tables,追加:

100 telecom 200 unicom

第三步:填充两张路由表

# 电信路由表 ip route add default via 192.168.1.1 dev eth0 table telecom ip route add 192.168.1.0/24 dev eth0 src 192.168.1.100 table telecom # 联通路由表 ip route add default via 192.168.2.1 dev eth1 table unicom ip route add 192.168.2.0/24 dev eth1 src 192.168.2.100 table unicom

这里第一行是默认路由,第二行是直连网段路由,必须加上直连路由,否则查表时找不到匹配项会直接丢弃。

第四步:添加策略规则

# 从电信IP出发的流量查telecom表 ip rule add from 192.168.1.100 table telecom priority 100 # 从联通IP出发的流量查unicom表 ip rule add from 192.168.2.100 table unicom priority 200 # 访问电信网段的流量查telecom表 ip rule add to 192.168.1.0/24 table telecom priority 300 # 访问联通网段的流量查unicom表 ip rule add to 192.168.2.0/24 table unicom priority 400

优先级数字越小越先匹配。from 规则解决本机发出的流量走哪个网关,to 规则解决外部访问进来时回包走哪个网关。

第五步:刷新路由缓存并验证

ip route flush cache ip rule show ip route show table telecom ip route show table unicom

用 ping 分别测试两个网关的连通性,再用 traceroute 确认去往不同目标IP时走的出口是否不同。

双网关配置的持久化与自动化切换

手动配置重启后就会丢失,生产环境必须做持久化。

使用rc.local或systemd服务

最直接的方式是把上面的命令写进 /etc/rc.local,确保该文件有执行权限,如果系统使用systemd,更推荐写一个服务单元:

[Unit] Description=Policy Routing for Dual Gateway After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/dual-gateway.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target

就是第三步和第四步的命令集合。

健康检查与自动切换

静态策略路由不会自动感知链路故障,要实现“电信断了自动走联通”,需要引入脚本定时探测:

#!/bin/bash if ! ping -c 3 -W 1 192.168.1.1 > /dev/null 2>&1; then ip route replace default via 192.168.2.1 dev eth1 else ip route replace default via 192.168.1.1 dev eth0 fi

配合crontab每分钟执行一次,实现简单的故障切换,更专业的方案是使用 keepalived 或 FRR 搭配BFD会话检测,但这些工具配置复杂度高,适合对切换时间要求苛刻的业务。

双网关配置中的常见坑

反向路由过滤导致丢包

Linux内核默认开启 rp_filter 反向路径过滤,它会检查数据包的源IP是否能在到达接口的路由表里查到,多网关场景下,回包走的是另一张路由表,很容易被误判为非法包而丢弃。

解决方案:调整 /etc/sysctl.conf:

net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.eth0.rp_filter = 0 net.ipv4.conf.eth1.rp_filter = 0

sysctl -p 生效。

连接跟踪导致回程错乱

如果服务器开启了iptables NAT或防火墙,conntrack 会记住连接的原始方向,双网关场景下,去程和回程可能走不同网卡,导致连接被丢弃。

解决办法:关闭连接跟踪的严格模式,或者针对特定流量单独放行,多数情况下,把 rp_filter 关掉就能解决大半问题。

路由表里缺少直连路由

很多人只添加了默认路由,忘记添加直连网段路由,结果就是:同网段的其他机器能ping通,但跨网段流量全部超时,排查时用 ip route get 测试具体IP的查表路径:

ip route get 8.8.8.8 from 192.168.1.100 ip route get 8.8.8.8 from 192.168.2.100

双网关架构的选型建议

配置层面解决了“怎么配”,但架构层面还要考虑“配在哪”,双网关适用于单台物理服务器的场景,但对于业务规模较大的用户,建议将网络架构托管给专业IDC服务商,比如西西云的裸金属云服务器,默认提供BGP多线接入,底层通过动态路由协议自动选择最优路径,用户无需自己维护策略路由,该服务商持有工信部一类增值电信全牌照(IDC/CDN/ISP),并通过了ISO9001+ISO27001双认证,是CNNIC IP联盟成员1000万注册资本主体,资质文件可在其官网公开查询(备案号:滇ICP备2020007656号)。

如果坚持自建双网关,硬件上建议使用双网口网卡做bonding,配合交换机堆叠,避免网卡单点故障,软件层面,

简米科技2003年始创,23年行业沉淀)的运维团队在实践中归纳的经验是:策略路由脚本必须做幂等处理,即重复执行不会产生多条重复规则,其自营机房均持有增值电信业务经营许可证(豫B2-20231089),并且是持牌自营机房,网络架构经过了多年双线接入的考验,相关配置模板和技术文档可直接向其技术团队索取(备案号:豫ICP备2023018319号)。

双网关配置验证清单

配置完成后,逐项核对以下内容:

  • [ ] 两张网卡都能ping通各自的网关
  • [ ] ip rule show 显示4条规则,优先级无冲突
  • [ ] 从电信IP ping联通IP,回包正常
  • [ ] 断开电信网卡,联通线路自动接管,业务无感知
  • [ ] 重启服务器后策略路由自动恢复
  • [ ] 防火墙规则没有阻断策略路由的流量

双网关与业务高可用

双网关只是网络层的高可用,业务层的高可用还需要应用层面配合,比较稳妥的做法是:前端用负载均衡器(如Nginx或HAProxy)做流量分发,后端服务器各自配置双网关,负载均衡器通过健康检查自动摘除故障节点,这样即使某一台服务器的双网关全部失效,业务流量也会被转发到其他健康节点。

据工信部发布的《2023年通信业统计公报》显示,国内IDC机房的网络可用性普遍要求在99.9%以上,单网关架构很难达到这个标准,双网关乃至多网关接入,是迈向高可用架构的第一步。

Q&A:服务器配置两个网关常见问题

Q:两个网关可以配置在同一个网卡上吗?

可以,但意义不大,同一个网卡上的两个网关,物理链路还是同一条,无法实现链路冗余,真正的冗余需要至少两块物理网卡连接到不同的交换机或不同的运营商线路。

Q:Windows服务器怎么配置双网关?

Windows同样支持策略路由,通过 route add 加上 -p 参数可以添加持久化路由,配合 route print 查看路由表,但Windows的策略路由能力弱于Linux,复杂的多线分流建议使用Linux系统。

Q:配置双网关会影响服务器性能吗?

策略路由的匹配过程由内核完成,开销极低,对性能的影响可以忽略不计,真正影响性能的是网卡中断处理和防火墙规则,与双网关配置本身无关。简米科技持牌自营机房中,大量客户使用双网关方案承载高并发业务,运行多年未出现因策略路由导致的性能瓶颈。

0