在现代企业网络架构中,服务器有时需要同时接入两个不同的网络,例如一个用于内部管理,另一个用于对外提供服务,这就需要配置双网关,以确保不同来源或目标的流量能够通过正确的路径进行传输,在CentOS系统中,简单地设置两个默认网关会导致路由冲突,系统只会选择其中一个生效,我们需要借助策略路由来实现精细化的流量控制。
场景设定
为了清晰地说明配置过程,我们设定一个典型的双网络环境:
网卡 | IP地址 | 子网掩码 | 网关 | 用途 |
---|---|---|---|---|
eth0 | 168.1.10 | 255.255.0 | 168.1.1 | 内网通信 |
eth1 | 0.0.10 | 255.255.0 | 0.0.1 | 外网访问 |
我们的目标是:所有从eth0
(内网)发起的流量走168.1.1
网关,而其他所有流量(包括从eth1
发起的)默认走0.0.1
网关。
基础网络配置
确保两个网卡的IP地址已正确配置,可以使用nmcli
或编辑配置文件,这里以nmcli
为例:
# 配置eth0 nmcli con mod eth0 ipv4.addresses 192.168.1.10/24 nmcli con mod eth0 ipv4.gateway 192.168.1.1 # 临时设置,后续会被策略路由覆盖 nmcli con mod eth0 ipv4.method manual nmcli con up eth0 # 配置eth1 nmcli con mod eth1 ipv4.addresses 10.0.0.10/24 nmcli con mod eth1 ipv4.gateway 10.0.0.1 nmcli con mod eth1 ipv4.method manual nmcli con up eth1
系统会有一条默认路由,通常是后配置的或优先级更高的那条,我们需要建立策略路由来覆盖这个默认行为。
实施策略路由
策略路由的核心在于创建独立的路由表,并制定规则来决定何时使用哪张表。
创建新的路由表
Linux系统允许定义多张路由表,我们需要为内网流量创建一张专用表,编辑/etc/iproute2/rt_tables
文件,在末尾添加一行:
100 internal
这里100
是路由表的ID,internal
是表的名称,便于记忆。
为新路由表添加规则
我们需要为internal
这张表添加路由规则,这些规则指定了内网流量的路径。
# 添加到内网网段的路由,指定从eth0出去 ip route add 192.168.1.0/24 dev eth0 src 192.168.1.10 table internal # 为internal表添加默认网关 ip route add default via 192.168.1.1 dev eth0 table internal
创建路由策略
我们需要告诉系统:当数据包的源地址是168.1.10
时,请查询internal
路由表。
# 创建规则,源IP为192.168.1.10的流量使用internal路由表 ip rule add from 192.168.1.10/32 table internal
至此,策略路由已临时生效,你可以使用ip rule list
和ip route show table internal
来验证。
配置持久化
上述命令在重启后会失效,为了使配置永久生效,需要在网络脚本中定义。
创建路由文件
为eth0
网卡创建路由文件/etc/sysconfig/network-scripts/route-eth0
如下:
168.1.0/24 dev eth0 src 192.168.1.10
default via 192.168.1.1 dev eth0 table internal
创建规则文件
同样为eth0
创建规则文件/etc/sysconfig/network-scripts/rule-eth0
如下:
from 192.168.1.10/32 table internal
重启网络服务
保存文件后,重启网络服务以加载新配置:
systemctl restart network
即使服务器重启,双网关策略路由也会自动生效,确保了网络流量的正确分离。
相关问答FAQs
A: 因为Linux系统的核心路由表只能有一条默认路由(0.0.0/0
),当你在两个配置文件中都设置了GATEWAY
,系统在启动时可能会都加载,但最终只有一条会生效,通常是后加载的或度量值(metric)较低的那条,这会导致另一条路径完全无法使用,无法实现流量分流,策略路由通过创建多个路由表和匹配规则,绕过了这个限制,实现了基于源地址等条件的智能路由选择。
Q2: 如何验证特定流量是否真的走了正确的网关?
A: 最直接的方法是使用traceroute
(或tracepath
)命令,从服务器上发起一个到目标地址的追踪,观察第一跳的IP地址。
要验证内网流量,可以traceroute 192.168.1.20
,其第一跳应该是168.1.1
,要验证外网流量,可以traceroute www.baidu.com
,其第一跳应该是0.0.1
,通过这种方式,可以直观地确认策略路由是否按预期工作。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复