CentOS 通过两个局域网网关连接不同外网的设置

关键字

CentOS, dual network interfaces, 南北互联, 双网卡, 双网卡路由, ip command

应用的场景

从设置的场景上讲,一台服务器使用两个公网 IP,主要是解决“南北互联” 问题。其次,连接两个网络当其中一个出现故障时,可以通过另外一个网络连接服务器。

在实际的配置上,服务器通常不会直接暴露在公网上,通常会设置两个局域网,再把机器通过局域网网关连接不同外网,同时在网关上设置端口映射来实现外网访问内部机器。

遇到问题的现象

CentOS 安装了两张网卡,如果两个网卡直接设置两个公网 IP,访问外网是不需要进行路由配置的。

现在,两张网卡分别接入不同局域网,再通过各自的局域网网关连接不同外网,再分别在网关作端口映射到机器上,此时,服务器有两个公网 IP,却只有默认路由的网卡公网 IP 可以正常访问服务器,另一个 IP 无法访问。

猜测是路由的问题,那么如何配置路由才能使两个公网 IP 同时生效?

原因分析

可能的原因是,Linux 通过路由表选择数据包通路,每个外网 IP 进入的数据包对于服务器来说,都不是局域网 IP,因此回复时,会 ip route show 中的 default 路由出,通常默认路由设置为其中一张网卡,服务器可通过两个网关接受外部网络包,但只通过一个出口发出网络包,无法形成回路。现象上就是一个 IP 不通。

设置步骤

设置的目标是,从不同局域网网关进入的数据包,通过原网关出。

查看网络路由

ip route show

增加电信和网通两个路由表

echo "101 ChinaNet" >> /etc/iproute2/rt_tables
echo "102 ChinaCnc" >> /etc/iproute2/rt_tables

设置默认路由

假设两张网卡分别是 enp2s0 和 enp3s0

ip route add default via 192.168.0.1 dev enp2s0 table ChinaNet
ip route add default via 192.168.1.1 dev enp3s0 table ChinaCnc

添加路由规则

ip rule add from 192.168.0.9 table ChinaNet
ip rule add from 192.168.1.9 table ChinaCnc

经过上述设置,即实现了让不同网络的流量各行其道的目的。

附:南北互联

中国互联网特色问题,原先中国电信公司负责建设中国的网络基础设施和经营,2000年,为打破垄断,中国电信拆分出中国网通,以长江为界,上海为中间点,长江以南由中国电信经营,长江以北由中国网通经营。拆分是为了打破垄断,促进竞争,但这也造成了南北网络互相访问速度很慢的局面。

南北网的连通上带宽有限,如果服务器向全国提供服务,就会涉及来自中国电信、中国铁通、中国新联通、中国移动等公司的网络流量,就会遇到跨网访问的网速慢的问题。

最直接的方案是设计分布式系统,这样我们可以在不同网络租用不同服务器,把我们的服务分拆到不同网络中,但这样会涉及分布式系统的业务拆分和数据同步问题,付出更高的软件研发成本。

其次,针对静态内容可以租用 CDN 服务,和上述思路类似,但只是解决静态内容多网络的分发问题,动态内容难以利用 CDN 分发。

再次,自建 DNS,把来自不同网络的流量,动态分配到不同的网络节点上。这种需要额外维护相对准确的 IP 地址库。

最常用的还是双线网络方案,即让服务器同时连接南北两个网络。

发表评论

电子邮件地址不会被公开。 必填项已用*标注