多网卡网络分流降低跨境访问延迟的配置方法
什么是多网卡网络分流
当你的服务器同时接入国内运营商(如电信、联通)和国际线路(如CN2 GIA、IP Transit)时,默认情况下所有流量都走同一张网卡。
这会导致访问国内网站绕路、访问境外业务卡顿。多网卡网络分流就是通过路由规则,让国内IP地址走国内网卡,境外IP走国际网卡,从而降低跨境访问延迟。
准备条件
- 一台Linux服务器(本文以CentOS 7/8为例)
- 两张已联网的网卡:eth0(国内)、eth1(国际)
- 两张网卡的网关IP、子网掩码(向机房索要)
- root权限或sudo权限
确保两张网卡都已正确配置IP并连通(使用ip addr查看,每个网卡应有单独IP和网关)。
配置策略路由实现分流
1. 创建策略路由表
Linux默认只有local、main、default三张路由表。
我们需要为国际线路创建一张新表(比如表100)。
echo "100 intl" >> /etc/iproute2/rt_tables
2. 配置国际网卡的默认路由
假设国际网卡eth1的网关是203.0.113.1,将国际默认路由写入表100:
ip route add default via 203.0.113.1 dev eth1 table intl
同时添加本地直连路由(如果没有会自动生成,但手动确保):
ip route add 203.0.113.0/24 dev eth1 table intl
3. 配置路由规则(策略)
让来自国际网卡IP的流量使用表100。
假设eth1的IP是203.0.113.10:
ip rule add from 203.0.113.10 lookup intl
如果想更精细:让访问境外IP的流量也走表100(需要维护境外IP列表),但新手推荐先按源IP分流。
4. 验证规则生效
ip rule show
ip route show table intl
5. 持久化配置
重启后规则会丢失。
将以下命令写入/etc/rc.local(需执行权限)或使用systemd服务。
# /etc/rc.local 追加
ip route add default via 203.0.113.1 dev eth1 table intl
ip rule add from 203.0.113.10 lookup intl
exit 0
然后赋予执行权限:
chmod +x /etc/rc.local
避坑指南
- 默认网关不能重复:两个网卡不能同时设置默认网关(即使不再main表中),否则可能路由混乱。正确做法:只在国内网卡设置默认网关(main表),国际网卡只在独立表中设置默认路由。
- 源地址策略优先级:
ip rule add from优先级高于其他规则,确保流量正确匹配。 - 防火墙放行:如果开启iptables/firewalld,要确保两张网卡的流量通过。
- 测试时关闭缓存:每次修改路由后,可以清空路由缓存(
ip route flush cache)再测试。
效果验证
1. 检查国内访问
使用国内IP的源地址访问国内网站(如baidu.com):
curl --interface eth0 -I https://www.baidu.com
观察延迟(time_connect)是否明显低于走国际线路。
2. 检查跨境访问
使用国际网卡IP访问境外网站(如google.com):
curl --interface eth1 -I https://www.google.com
也可以用traceroute看路由路径:
traceroute -i eth1 google.com
如果路由经过的跳数明显减少且延迟降低,说明分流成功。
3. 对比测试
在配置分流前后,各测一次到同一跨境目标的ping延迟,记录改善情况。
常见问题解答
Q:配置后国内网站访问变慢怎么办?
A:检查国内网卡的默认路由是否还在main表,且规则中没有将国内流量误导入国际表。可用ip route get 114.114.114.114查看实际出口。
Q:国际网卡无法连接外网?
A:确认eth1的网关是否正确,且已添加到表intl。另外检查iptables规则是否拦截了相关端口。
Q:重启后分流失效?
A:检查/etc/rc.local是否执行成功,或者将命令写入/etc/network/interfaces的post-up段(Debian系)。
通过以上步骤,你可以为服务器实现多网卡网络分流,显著降低跨境访问延迟。
建议先在小流量环境测试,再投入生产。