跳转到内容

网络绑定与 VLAN

适用于 CentOS Stream 9 & 10 / AlmaLinux 9.x & 10.x / Rocky Linux 9.x & 10.x

把多块物理网卡绑定成一条逻辑链路,可以在某块网卡或某条线路故障时保持网络不中断;而 VLAN 则让你在同一块网卡上划分出多个隔离的二层网络。本页带你用 nmcli 完成这两件最常见的进阶网络配置。

  • 链路聚合 Bond 的几种工作模式,以及该选哪一种
  • nmcli 创建 Bond、添加从接口、配置 IP 并查看状态
  • 在物理网卡或 Bond 之上创建 VLAN 接口
  • EL 10 在配置存储上的变化,以及常见故障的排查方法
  • 一台运行 EL 9.x 或 EL 10.x 的系统
  • sudo 权限
  • 至少两块物理网卡(用于 Bond 演示,例如 enp1s0enp2s0
  • NetworkManager 正在运行(EL 默认启用)

Bond(绑定)把多块网卡组合成一个逻辑接口 bondX。根据所选模式,它既可以提供故障切换(高可用),也可以叠加带宽(负载均衡)。

不同模式对交换机的要求和适用场景差别很大,先看表格再动手:

模式名称说明交换机要求
active-backup主备切换只有一块网卡工作,故障时自动切到备用网卡。最常用、最稳妥无需配置
802.3adLACP 链路聚合多块网卡同时工作,叠加带宽并提供冗余,标准协议需在交换机端配置 LACP(端口聚合组)
balance-xor异或负载均衡按源/目的 MAC 哈希分流,固定网卡对应固定流通常需静态聚合组
balance-rr轮询数据包轮流从各网卡发出,可能导致乱序需静态聚合组

下面以最常用的 active-backup 模式为例,把 enp1s0enp2s0 绑定为 bond0

  1. 创建 Bond 主接口

    miimon=100 表示每 100 毫秒检测一次链路状态,是故障切换能及时生效的关键。

    创建 bond0(active-backup 模式)
    $ sudo nmcli con add type bond con-name bond0 ifname bond0 \
    bond.options "mode=active-backup,miimon=100"
  2. 添加第一块从接口(port)

    把物理网卡 enp1s0 作为 bond0 的从接口加入:

    添加第一块从接口
    $ sudo nmcli con add type ethernet con-name bond0-port1 \
    ifname enp1s0 master bond0
  3. 添加第二块从接口(port)

    添加第二块从接口
    $ sudo nmcli con add type ethernet con-name bond0-port2 \
    ifname enp2s0 master bond0
  4. 为 Bond 配置静态 IP

    IP 配在 bond0 上,而不是物理网卡上:

    为 bond0 配置 IP、网关和 DNS
    $ sudo nmcli con mod bond0 \
    ipv4.addresses 192.168.1.10/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns 1.1.1.1 \
    ipv4.method manual
  5. 激活 Bond

    先激活从接口、再激活 Bond,确保顺序正确:

    启用 bond0
    $ sudo nmcli con up bond0

内核会把 Bond 的实时状态导出到 /proc,这是确认主备切换是否正常工作的权威来源:

查看 bond0 的工作状态
$ cat /proc/net/bonding/bond0

输出会显示当前模式、活动从接口(Currently Active Slave)以及每块网卡的链路状态(MII Status: up):

输出示例
Bonding Mode: fault-tolerance (active-backup)
Currently Active Slave: enp1s0
MII Status: up
Slave Interface: enp1s0
MII Status: up
Slave Interface: enp2s0
MII Status: up

你也可以用 nmcli 查看连接与设备的整体状态:

查看连接与设备状态
$ nmcli con show
$ nmcli dev status

VLAN(虚拟局域网)在同一块物理网卡上划分出多个隔离的二层网络,每个 VLAN 用一个 1–4094 的 ID 标识。要使用 VLAN,交换机对应端口需配置为 trunk 模式并放行相应 VLAN ID。

下面在 enp1s0 上创建一个 ID 为 100 的 VLAN 接口,并配置 IP:

  1. 创建 VLAN 接口

    连接名建议带上 VLAN ID 便于识别。接口名会自动生成为 enp1s0.100

    在 enp1s0 上创建 VLAN 100
    $ sudo nmcli con add type vlan con-name vlan100 dev enp1s0 id 100
  2. 为 VLAN 接口配置 IP

    配置 VLAN 100 的 IP
    $ sudo nmcli con mod vlan100 \
    ipv4.addresses 192.168.100.10/24 \
    ipv4.method manual
  3. 激活 VLAN 接口

    启用 vlan100
    $ sudo nmcli con up vlan100

Bond 和 VLAN 可以叠加使用:先有冗余的 Bond,再在其上划分多个 VLAN。这种组合在生产服务器上非常常见。只需把 dev 指向 bond0 即可:

在 bond0 上创建 VLAN 200
$ sudo nmcli con add type vlan con-name vlan200 dev bond0 id 200
为该 VLAN 配置 IP 并激活
$ sudo nmcli con mod vlan200 \
ipv4.addresses 192.168.200.10/24 \
ipv4.method manual
$ sudo nmcli con up vlan200

nmcli 命令在 EL 9 和 EL 10 上完全一致,本页所有命令在两个版本上都能直接使用。区别在于配置文件的存储方式

NetworkManager 默认使用 keyfile 格式,存储在 /etc/NetworkManager/system-connections/。EL 9 仍保留对旧 ifcfg 脚本的读取兼容,但建议新配置直接用 keyfile。

查看连接配置文件
$ ls /etc/NetworkManager/system-connections/

先确认每块物理网卡的连接都已激活,再确认 Bond 已激活。激活顺序错误是最常见的原因:

检查设备状态
$ nmcli dev status
$ cat /proc/net/bonding/bond0

如果某块网卡 MII Status 显示 down,检查物理连线和对端交换机端口;如果从接口连接处于 disconnected,手动激活它:

手动激活从接口
$ sudo nmcli con up bond0-port1

802.3ad(LACP)要求交换机端也配置好对应的链路聚合组(LACP / port-channel)。如果只在服务器侧启用而交换机端未配置,链路会无法正常转发流量。请联系网络管理员在交换机上为这两个端口配置 LACP,或临时改用 active-backup 验证物理链路本身没问题。

Bond 的所有从接口、Bond 本身以及其上的 VLAN,MTU 必须保持一致(VLAN 标签会占用 4 字节,若使用巨型帧需统筹规划)。在连接上显式设置 MTU:

为 bond0 设置 MTU
$ sudo nmcli con mod bond0 802-3-ethernet.mtu 9000

确认你激活的是 bond0 而不是某块物理网卡,并确认从接口连接存在且 master 指向正确:

确认连接关系
$ nmcli con show
$ nmcli -g connection.master con show bond0-port1

如果改了配置后没生效,重新激活连接:

重新激活 bond0
$ sudo nmcli con up bond0