CentOS双网卡如何配置默认路由,实现访问优先级?

在服务器管理与企业网络架构中,为一台 CentOS 服务器配置双网卡是一种常见且实用的做法,这不仅能实现内外网络的物理隔离,增强安全性,还能提供网络冗余,保障业务连续性,当两个网卡同时连接到不同的网络并都配置了网关时,一个核心问题便浮现出来:系统如何决定优先使用哪条网络路径?本文将深入探讨在 CentOS 系统中如何有效配置双网卡并科学地管理其优先级。

CentOS双网卡如何配置默认路由,实现访问优先级?

核心原理:路由表与度量值

理解网络优先级的根本在于理解 Linux 的路由表,系统中的每一个网络数据包,其发送路径都由内核根据路由表来决定,您可以通过 ip route showroute -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,数值越小优先级越高。

CentOS双网卡如何配置默认路由,实现访问优先级?

配置完成后,执行 systemctl restart network 使配置生效,再次使用 ip route show 查看,您会发现默认路由指向了 ens37 的网关。

配置方法二:NetworkManager 命令行工具

从 CentOS 7 开始,NetworkManager 成为了主流的网络管理工具,其命令行界面 nmcli 功能强大且推荐使用,使用 nmcli 配置更为直观和动态。

假设网卡连接名分别为 ens33ens37

查看现有连接

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
易用性 需要熟悉文件格式,易出错 命令语义化,不易出错,支持动态更改
推荐度 兼容性方案 现代系统的首选方案

验证与测试

配置完成后,验证是必不可少的一步。

  1. 检查路由表ip route showroute -n,确认 default 条目指向了您期望的网关和网卡,并注意其 metric 值。
  2. 测试连通性:使用 ping 命令测试内外网地址的连通性。
  3. 追踪路径:使用 traceroute 8.8.8.8 (一个公网IP) 命令,输出的第一跳应该是您的外网网关地址,这直观地证明了数据包的出口路径。

通过以上步骤,您就可以在 CentOS 系统中灵活、可靠地配置双网卡,并精确控制其网络优先级,从而满足复杂网络环境下的业务需求。


FAQs (常见问题解答)

我设置了两个网关,但网络时好时坏,非常不稳定,是什么原因?

CentOS双网卡如何配置默认路由,实现访问优先级?

解答: 这种现象通常被称为“异步路由”,当您在两个网卡上都设置了网关,但没有明确指定优先级(即度量值)或默认路由时,系统内核可能会在两条默认路由之间摇摆不定,您发出的请求可能从网卡A出去,但服务器的响应却被路由到了网卡B,由于连接状态不匹配,该数据包会被内核丢弃,导致连接超时或失败,解决方法就是必须明确指定一个主路由,通过 DEFROUTE=yes/noipv4.never-default=yes 结合 metric 值,确保系统中只有一条优先级最高的默认路由生效,所有外部流量都从这条固定的路径进出。

我想临时测试一下网卡优先级,不想重启网络服务,可以做到吗?

解答: 当然可以,您可以直接使用 ip route 命令动态地修改路由表,这些更改会立即生效,但在系统重启后会丢失。

  1. 删除所有现有的默认路由(假设有两条):

    sudo ip route del default

    如果有多条,需要重复执行,直到 ip route show 中没有 default 条目。

  2. 添加您希望作为主路由的默认路由,并指定一个较低的度量值(例如100):

    sudo ip route add default via 203.0.113.1 dev ens37 metric 100
  3. (可选)添加另一条作为备用的默认路由,并指定一个较高的度量值(例如200):

    sudo ip route add default via 192.168.100.1 dev ens33 metric 200

使用 ip route show 查看,您会看到两条默认路由,但系统会优先使用 metric 为 100 的那条,这种方式非常适合在不影响生产环境的情况下进行快速测试和验证。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-04 18:31
下一篇 2025-04-20 20:14

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信