多网卡网络分流降低跨境访问网络延迟波动

多网卡网络分流,简单说就是让服务器按来源或目标把流量交给不同线路,避免单一线路拥塞导致跨境访问延迟忽高忽低。
本文用一台双网卡 Linux 服务器做演示,从查看网卡、写策略路由到验证效果,逐步带你完成配置,目标是降低跨境访问时的延迟抖动,而不是简单提升带宽。

动手前先确认这些条件

开始配置前,请先确认服务器满足下面几点,避免做到一半发现环境不支持。

  • 服务器至少有 两块物理网卡或两块内网网卡,系统建议使用 CentOS 7/8、Ubuntu 20.04 或更高版本。
  • 每块网卡分别接入了不同运营商或不同区域线路,例如电信 + CN2、联通 + 移动。若只有一块网卡,需要先联系服务商开通多线路接入。
  • 有 root 权限,能执行 iprouteiptables 等命令。
  • 知道每块网卡的 IP、网关和默认路由情况。可用 ip addrip route 查看。

第一步:查看当前网卡与路由状态

登录服务器后先执行下面的命令,记录下当前网卡名称、IP 和默认网关:

ip addr
ip route show

输出里通常能看到 eth0eth1 这样的网卡名。
假设:

  • eth0:IP 203.0.113.10,网关 203.0.113.1,对应线路 A
  • eth1:IP 198.51.100.20,网关 198.51.100.1,对应线路 B

默认只有一条默认路由,ip route show 会显示类似:

default via 203.0.113.1 dev eth0

这意味着所有出站流量都走 eth0。
我们需要用策略路由把不同流量拆分到两条线路上。

第二步:创建两张独立路由表

Linux 的策略路由依赖独立路由表。
编辑 /etc/iproute2/rt_tables,在文件末尾增加两行:

echo "100 lineA" >> /etc/iproute2/rt_tables
echo "200 lineB" >> /etc/iproute2/rt_tables

100200 是路由表编号,lineAlineB 是自定义名称。
完成后用 cat /etc/iproute2/rt_tables 确认。

第三步:为每块网卡配置默认路由

分别给两张表添加默认路由,并绑定对应网卡。
以 eth0 走线路 A、eth1 走线路 B 为例:

ip route add default via 203.0.113.1 dev eth0 table lineA
ip route add default via 198.51.100.1 dev eth1 table lineB

同时要添加直连路由,让两张表都能找到本机网段:

ip route add 203.0.113.0/24 dev eth0 src 203.0.113.10 table lineA
ip route add 198.51.100.0/24 dev eth1 src 198.51.100.20 table lineB

如果网段前缀不确定,可以用 ip addr 里显示的掩码。
执行后可以用下面的命令检查:

ip route show table lineA
ip route show table lineB

第四步:配置策略路由实现分流

策略路由的作用是让特定来源或目标 IP 走指定路由表。
常见的分流需求有两种:

按来源 IP 分流,例如让国内访问的流量走线路 A,国外访问流量走线路 B:

ip rule add from 203.0.113.10 lookup lineA
ip rule add from 198.51.100.20 lookup lineB

按目标网段分流,例如让访问某境外 IP 段走线路 B:

ip rule add to 192.0.2.0/24 lookup lineB

配置完成后用 ip rule show 查看规则是否生效。
注意策略路由是按顺序匹配的,优先级越小的规则越先执行,需要灵活调整时可用 ip rule add ... pref 50 这样的方式指定优先级。

第五步:写入持久化配置并重启网络

手动执行的 ip 命令在重启后会失效。
以 CentOS 为例,把下面的配置写入 /etc/sysconfig/network-scripts/route-eth0route-eth1,确保开机自动加载:

/etc/sysconfig/network-scripts/route-eth0

default via 203.0.113.1 dev eth0 table lineA
203.0.113.0/24 dev eth0 src 203.0.113.10 table lineA

/etc/sysconfig/network-scripts/route-eth1

default via 198.51.100.1 dev eth1 table lineB
198.51.100.0/24 dev eth1 src 198.51.100.20 table lineB

然后在 /etc/sysconfig/network-scripts/rule-eth0rule-eth1 中写入策略规则:

/etc/sysconfig/network-scripts/rule-eth0

from 203.0.113.10 lookup lineA

/etc/sysconfig/network-scripts/rule-eth1

from 198.51.100.20 lookup lineB

保存后重启网络服务:

systemctl restart network

Ubuntu 系统建议直接修改 /etc/netplan/ 下的配置文件,通过 routing-policyroutes 字段实现类似效果。

避坑指南:这些错误最容易导致分流失败

网关冲突
两块网卡的网关不能是同一个 IP,否则流量还是会走同一个出口。
如果服务商给的网关相同,需要联系他们调整。

未添加直连路由
只配置默认路由没有配置直连路由,会导致回包路由缺失,表现就是 ping 不通或连接超时。

忘记关闭反向路径过滤
Linux 内核默认的 rp_filter 会检查源地址是否从最优路径返回,多网卡分流时容易误杀正常数据包。
临时关闭方法:

sysctl -w net.ipv4.conf.all.rp_filter=0

永久生效需要修改 /etc/sysctl.conf,添加:

net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0

然后执行 sysctl -p 加载。

防火墙未放行对应网卡流量
检查 iptables 或 firewalld 是否对 eth1 做了限制,建议先放行全部流量测试分流,确认正常后再收紧规则。

如何确认延迟波动真的降低了

分流失效或生效后,最简单的验证方法是连续 ping 目标地址,观察延迟的波动幅度。

先测试默认线路:

ping -I eth0 -c 100 目标IP | tail -n 3

再测试另一条线路:

ping -I eth1 -c 100 目标IP | tail -n 3

对比两个结果的 avgmdev 值。mdev 表示平均偏差,数值越小说明延迟越稳定。

更精确的测试可以用 mtr 工具:

mtr -r -i 1 -c 50 -e 目标IP

如果某条线路的丢包率和延迟抖动明显更低,可以把这条线路设为主导线路,再通过策略路由让关键业务流量走它。
判断分流是否真的生效,也可以执行:

ip route get 目标IP

看输出里的 devsrc 是否与你预期的线路一致。

如果只是某一段时间延迟高,建议在不同时段多测几轮,跨境网络质量本身就受国际出口拥塞影响。
多网卡网络分流能降低单条线路波动,但无法完全消除物理链路和运营商互联带来的延迟问题。

遇到配置后不生效时,优先回看策略路由顺序、直连路由和 rp_filter 三项设置。
也可以在服务器上临时启动两个会话,分别用 tcpdump -i eth0tcpdump -i eth1 看流量是否真正走了两张网卡。
只要路由表、规则和防火墙都没问题,跨境访问的延迟波动通常能得到明显改善。

分享到:
上一篇
Nginx超时参数优化爬虫抓取超时失败问题解决
下一篇
数据库定时碎片优化脚本自动维护数据库性能
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意