在服务器管理与企业网络架构中,为一台 CentOS 服务器配置双网卡是一种常见且实用的做法,这不仅能实现内外网络的物理隔离,增强安全性,还能提供网络冗余,保障业务连续性,当两个网卡同时连接到不同的网络并都配置了网关时,一个核心问题便浮现出来:系统如何决定优先使用哪条网络路径?本文将深入探讨在 CentOS 系统中如何有效配置双网卡并科学地管理其优先级。
核心原理:路由表与度量值
理解网络优先级的根本在于理解 Linux 的路由表,系统中的每一个网络数据包,其发送路径都由内核根据路由表来决定,您可以通过 ip route show
或 route -n
命令查看当前的路由表。
在路由表中,最关键的一条是“默认路由”,通常显示为 0.0.0/0
,它定义了当数据包的目的地址不在任何其他特定路由条目中时,应该被发送到哪个网关,当双网卡都配置了网关时,系统中理论上会出现两条默认路由,系统依据一个名为“度量值”的参数来决定哪条默认路由更“优”。
度量值是一个整数,数值越小,代表该路由的优先级越高,在所有其他条件相同的情况下,系统会默认选择度量值最低的默认路由作为数据包的出口,设置双网卡优先级的本质,就是为不同网卡对应的默认路由配置不同的度量值。
配置方法一:传统 ifcfg 配置文件
在 CentOS 7 及更早版本中,最经典的网络配置方式是直接编辑 /etc/sysconfig/network-scripts/
目录下的 ifcfg-<网卡名>
文件,假设我们有 ens33
(内网)和 ens37
(外网)两张网卡,目标是让外网 ens37
作为默认的上网出口。
配置内网网卡 (ens33)
编辑 /etc/sysconfig/network-scripts/ifcfg-ens33
文件:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=no # 关键:禁止此网卡成为默认路由 IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=... # 保持原有UUID DEVICE=ens33 ONBOOT=yes IPADDR=192.168.100.10 NETMASK=255.255.255.0 # GATEWAY=192.168.100.1 # 不设置网关,或设置但通过DEFROUTE=no使其不生效
这里的关键是 DEFROUTE=no
,它明确告诉系统,不要使用此网卡的网关作为系统默认路由。
配置外网网卡 (ens37)
编辑 /etc/sysconfig/network-scripts/ifcfg-ens37
文件:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes # 关键:允许此网卡成为默认路由 IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens37 UUID=... # 保持原有UUID DEVICE=ens37 ONBOOT=yes IPADDR=203.0.113.10 NETMASK=255.255.255.0 GATEWAY=203.0.113.1 # 设置外网网关
DEFROUTE=yes
确保了 GATEWAY=203.0.113.1
这条路由会成为系统的默认路由,如果想更精细地控制,可以同时使用 METRIC
参数,在 ens37
的配置中加入 METRIC=100
,在 ens33
的配置中加入 METRIC=200
,数值越小优先级越高。
配置完成后,执行 systemctl restart network
使配置生效,再次使用 ip route show
查看,您会发现默认路由指向了 ens37
的网关。
配置方法二:NetworkManager 命令行工具
从 CentOS 7 开始,NetworkManager
成为了主流的网络管理工具,其命令行界面 nmcli
功能强大且推荐使用,使用 nmcli
配置更为直观和动态。
假设网卡连接名分别为 ens33
和 ens37
。
查看现有连接
nmcli connection show
配置外网网卡(设为高优先级)
# 为 ens37 连接设置IP地址、子网掩码和网关 nmcli connection modify ens37 ipv4.addresses 203.0.113.10/24 nmcli connection modify ens37 ipv4.gateway 203.0.113.1 # 设置路由度量值,数值越小优先级越高 nmcli connection modify ens37 ipv4.route-metric 100 # 确保IPv4方法为手动(静态) nmcli connection modify ens37 ipv4.method manual # 重新激活连接以应用更改 nmcli connection up ens37
配置内网网卡(设为低优先级或不作为默认路由)
# 为 ens33 连接设置IP地址和子网掩码 nmcli connection modify ens33 ipv4.addresses 192.168.100.10/24 # 方法A:设置更高的度量值 nmcli connection modify ens33 ipv4.route-metric 200 # 方法B:明确告知此连接永不作为默认路由(推荐) nmcli connection modify ens33 ipv4.never-default yes # 确保IPv4方法为手动(静态) nmcli connection modify ens33 ipv4.method manual # 重新激活连接 nmcli connection up ens33
配置完成后,使用 ip route show
验证,您会看到类似 default via 203.0.113.1 dev ens37 proto static metric 100
的输出,表明 ens37
已成功成为高优先级的默认路由。
两种配置方法的对比
特性 | 传统 ifcfg 文件 | NetworkManager (nmcli) |
---|---|---|
适用系统 | CentOS 6/7 (默认),CentOS 8/Stream (兼容) | CentOS 7+ (默认及推荐) |
配置方式 | 编辑文本文件 | 命令行交互 |
关键参数 | DEFROUTE , GATEWAY , METRIC | ipv4.gateway , ipv4.route-metric , ipv4.never-default |
易用性 | 需要熟悉文件格式,易出错 | 命令语义化,不易出错,支持动态更改 |
推荐度 | 兼容性方案 | 现代系统的首选方案 |
验证与测试
配置完成后,验证是必不可少的一步。
- 检查路由表:
ip route show
或route -n
,确认default
条目指向了您期望的网关和网卡,并注意其metric
值。 - 测试连通性:使用
ping
命令测试内外网地址的连通性。 - 追踪路径:使用
traceroute 8.8.8.8
(一个公网IP) 命令,输出的第一跳应该是您的外网网关地址,这直观地证明了数据包的出口路径。
通过以上步骤,您就可以在 CentOS 系统中灵活、可靠地配置双网卡,并精确控制其网络优先级,从而满足复杂网络环境下的业务需求。
FAQs (常见问题解答)
我设置了两个网关,但网络时好时坏,非常不稳定,是什么原因?
解答: 这种现象通常被称为“异步路由”,当您在两个网卡上都设置了网关,但没有明确指定优先级(即度量值)或默认路由时,系统内核可能会在两条默认路由之间摇摆不定,您发出的请求可能从网卡A出去,但服务器的响应却被路由到了网卡B,由于连接状态不匹配,该数据包会被内核丢弃,导致连接超时或失败,解决方法就是必须明确指定一个主路由,通过 DEFROUTE=yes/no
或 ipv4.never-default=yes
结合 metric
值,确保系统中只有一条优先级最高的默认路由生效,所有外部流量都从这条固定的路径进出。
我想临时测试一下网卡优先级,不想重启网络服务,可以做到吗?
解答: 当然可以,您可以直接使用 ip route
命令动态地修改路由表,这些更改会立即生效,但在系统重启后会丢失。
删除所有现有的默认路由(假设有两条):
sudo ip route del default
如果有多条,需要重复执行,直到
ip route show
中没有default
条目。添加您希望作为主路由的默认路由,并指定一个较低的度量值(例如100):
sudo ip route add default via 203.0.113.1 dev ens37 metric 100
(可选)添加另一条作为备用的默认路由,并指定一个较高的度量值(例如200):
sudo ip route add default via 192.168.100.1 dev ens33 metric 200
使用 ip route show
查看,您会看到两条默认路由,但系统会优先使用 metric
为 100 的那条,这种方式非常适合在不影响生产环境的情况下进行快速测试和验证。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复