网络绑定与 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 演示,例如
enp1s0和enp2s0) - NetworkManager 正在运行(EL 默认启用)
链路聚合 Bond
Section titled “链路聚合 Bond”Bond(绑定)把多块网卡组合成一个逻辑接口 bondX。根据所选模式,它既可以提供故障切换(高可用),也可以叠加带宽(负载均衡)。
选择 Bond 模式
Section titled “选择 Bond 模式”不同模式对交换机的要求和适用场景差别很大,先看表格再动手:
| 模式 | 名称 | 说明 | 交换机要求 |
|---|---|---|---|
active-backup | 主备切换 | 只有一块网卡工作,故障时自动切到备用网卡。最常用、最稳妥 | 无需配置 |
802.3ad | LACP 链路聚合 | 多块网卡同时工作,叠加带宽并提供冗余,标准协议 | 需在交换机端配置 LACP(端口聚合组) |
balance-xor | 异或负载均衡 | 按源/目的 MAC 哈希分流,固定网卡对应固定流 | 通常需静态聚合组 |
balance-rr | 轮询 | 数据包轮流从各网卡发出,可能导致乱序 | 需静态聚合组 |
创建 Bond 并添加从接口
Section titled “创建 Bond 并添加从接口”下面以最常用的 active-backup 模式为例,把 enp1s0 和 enp2s0 绑定为 bond0。
-
创建 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" -
添加第一块从接口(port)
把物理网卡
enp1s0作为bond0的从接口加入:添加第一块从接口 $ sudo nmcli con add type ethernet con-name bond0-port1 \ifname enp1s0 master bond0 -
添加第二块从接口(port)
添加第二块从接口 $ sudo nmcli con add type ethernet con-name bond0-port2 \ifname enp2s0 master bond0 -
为 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 -
激活 Bond
先激活从接口、再激活 Bond,确保顺序正确:
启用 bond0 $ sudo nmcli con up bond0
查看 Bond 状态
Section titled “查看 Bond 状态”内核会把 Bond 的实时状态导出到 /proc,这是确认主备切换是否正常工作的权威来源:
$ cat /proc/net/bonding/bond0输出会显示当前模式、活动从接口(Currently Active Slave)以及每块网卡的链路状态(MII Status: up):
Bonding Mode: fault-tolerance (active-backup)Currently Active Slave: enp1s0MII Status: up
Slave Interface: enp1s0MII Status: up
Slave Interface: enp2s0MII Status: up你也可以用 nmcli 查看连接与设备的整体状态:
$ nmcli con show$ nmcli dev statusVLAN(虚拟局域网)在同一块物理网卡上划分出多个隔离的二层网络,每个 VLAN 用一个 1–4094 的 ID 标识。要使用 VLAN,交换机对应端口需配置为 trunk 模式并放行相应 VLAN ID。
在物理网卡上创建 VLAN
Section titled “在物理网卡上创建 VLAN”下面在 enp1s0 上创建一个 ID 为 100 的 VLAN 接口,并配置 IP:
-
创建 VLAN 接口
连接名建议带上 VLAN ID 便于识别。接口名会自动生成为
enp1s0.100。在 enp1s0 上创建 VLAN 100 $ sudo nmcli con add type vlan con-name vlan100 dev enp1s0 id 100 -
为 VLAN 接口配置 IP
配置 VLAN 100 的 IP $ sudo nmcli con mod vlan100 \ipv4.addresses 192.168.100.10/24 \ipv4.method manual -
激活 VLAN 接口
启用 vlan100 $ sudo nmcli con up vlan100
在 Bond 之上创建 VLAN
Section titled “在 Bond 之上创建 VLAN”Bond 和 VLAN 可以叠加使用:先有冗余的 Bond,再在其上划分多个 VLAN。这种组合在生产服务器上非常常见。只需把 dev 指向 bond0 即可:
$ sudo nmcli con add type vlan con-name vlan200 dev bond0 id 200$ sudo nmcli con mod vlan200 \ ipv4.addresses 192.168.200.10/24 \ ipv4.method manual$ sudo nmcli con up vlan200EL 10 注意事项
Section titled “EL 10 注意事项”nmcli 命令在 EL 9 和 EL 10 上完全一致,本页所有命令在两个版本上都能直接使用。区别在于配置文件的存储方式:
NetworkManager 默认使用 keyfile 格式,存储在 /etc/NetworkManager/system-connections/。EL 9 仍保留对旧 ifcfg 脚本的读取兼容,但建议新配置直接用 keyfile。
$ ls /etc/NetworkManager/system-connections/EL 10 彻底移除了对 ifcfg 脚本的支持,所有连接只能以 keyfile 形式存储在 /etc/NetworkManager/system-connections/。由于你用的是 nmcli,这一变化对你是透明的——命令不变,NetworkManager 自动写入 keyfile。
$ ls /etc/NetworkManager/system-connections/bond0.nmconnection bond0-port1.nmconnection vlan100.nmconnection从接口(slave/port)不上线
Section titled “从接口(slave/port)不上线”先确认每块物理网卡的连接都已激活,再确认 Bond 已激活。激活顺序错误是最常见的原因:
$ nmcli dev status$ cat /proc/net/bonding/bond0如果某块网卡 MII Status 显示 down,检查物理连线和对端交换机端口;如果从接口连接处于 disconnected,手动激活它:
$ sudo nmcli con up bond0-port1802.3ad 模式不通
Section titled “802.3ad 模式不通”802.3ad(LACP)要求交换机端也配置好对应的链路聚合组(LACP / port-channel)。如果只在服务器侧启用而交换机端未配置,链路会无法正常转发流量。请联系网络管理员在交换机上为这两个端口配置 LACP,或临时改用 active-backup 验证物理链路本身没问题。
MTU 不一致导致丢包
Section titled “MTU 不一致导致丢包”Bond 的所有从接口、Bond 本身以及其上的 VLAN,MTU 必须保持一致(VLAN 标签会占用 4 字节,若使用巨型帧需统筹规划)。在连接上显式设置 MTU:
$ sudo nmcli con mod bond0 802-3-ethernet.mtu 9000Bond 配置没生效
Section titled “Bond 配置没生效”确认你激活的是 bond0 而不是某块物理网卡,并确认从接口连接存在且 master 指向正确:
$ nmcli con show$ nmcli -g connection.master con show bond0-port1如果改了配置后没生效,重新激活连接:
$ sudo nmcli con up bond0- NetworkManager 基础
- IP 与路由
- 高可用实践
man nmcli/man nm-settings