4. 配置网络绑定(配置文件)

说实话,虽然现在很多系统都提供了图形化工具或者命令行一键配置,但我个人还是习惯直接改配置文件。为什么?因为生产环境里你很可能只有 SSH 终端,没有图形界面。而且配置文件改完,你心里踏实——每一行都看得清清楚楚。

Debian 系和 RHEL 系,这两大家族的网络配置方式完全不同。我当年刚转 Linux 运维时,就被这个坑过——在 Ubuntu 上写好了绑定配置,换到 CentOS 上发现连网卡都起不来。嗯,咱们今天就把这两套体系都捋清楚。

4.1 基于 /etc/network/interfaces(Debian 系)

Debian、Ubuntu 这些发行版,网络配置集中在 /etc/network/interfaces 这个文件里。它的语法很直观,说白了就是“声明式”的——你告诉系统网卡叫什么、用什么 IP、绑不绑定。

4.1.1 基本结构

一个典型的绑定配置,需要先定义绑定接口,再引用物理网卡。我一般会先停掉 NetworkManager,避免它跟 ifupdown 抢控制权。

# /etc/network/interfaces
# 回环接口
auto lo
iface lo inet loopback

# 物理网卡 eth0 —— 不配置 IP,只加入绑定
auto eth0
iface eth0 inet manual
    bond-master bond0
    bond-primary eth0

# 物理网卡 eth1 —— 同上
auto eth1
iface eth1 inet manual
    bond-master bond0

# 绑定接口 bond0 —— 配置 IP 和绑定参数
auto bond0
iface bond0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    bond-slaves none
    bond-mode 802.3ad
    bond-miimon 100
    bond-lacp-rate fast
    bond-xmit-hash-policy layer3+4

这里有个细节:bond-slaves none 是 Debian 9 之后的要求,用来明确声明从属接口不由 interfaces 直接管理。我之前在 Debian 10 上没写这一行,结果 ifup bond0 报了一堆警告。

4.1.2 常用绑定模式对应配置

模式 bond-mode 值 典型场景
balance-rr 0 测试环境,轮询分发
active-backup 1 高可用,主备切换
balance-xor 2 简单负载均衡
802.3ad 4 生产环境,需交换机支持 LACP
balance-tlb 5 自适应发送负载均衡
balance-alb 6 自适应收发负载均衡
我的习惯:生产环境首选 mode 4(802.3ad)。如果交换机不支持 LACP,退而求其次用 mode 1(active-backup)。mode 0 和 mode 2 在大多数场景下反而会降低性能,因为数据包乱序会导致 TCP 重传。

4.1.3 配置生效

改完文件后,重启网络服务或者重新加载接口:

# 重启网络服务(Debian 系)
systemctl restart networking

# 或者只操作绑定接口
ifdown bond0 && ifup bond0

# 检查绑定状态
cat /proc/net/bonding/bond0

我记得有一次在远程服务器上执行 ifdown bond0,结果 SSH 断了——因为我的管理 IP 就在 bond0 上。从那以后,我养成了一个习惯:远程操作网络配置时,先写一个定时任务把配置回滚,再动手改。你想想看,要是连不上服务器,你就得跑机房了。

4.2 基于 /etc/sysconfig/network-scripts(RHEL 系)

CentOS、RHEL、Fedora 这些发行版,每个网络接口对应一个独立的配置文件,放在 /etc/sysconfig/network-scripts/ 目录下。命名规则是 ifcfg-<接口名>。

4.2.1 配置步骤

配置绑定需要三个文件:一个绑定接口文件,两个物理网卡文件。我一般这样组织:

第一步:创建绑定接口文件 ifcfg-bond0

# /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
NAME=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
BONDING_OPTS="mode=4 miimon=100 lacp_rate=fast xmit_hash_policy=layer3+4"

第二步:配置物理网卡 ifcfg-eth0

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes

第三步:配置物理网卡 ifcfg-eth1

# /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
注意:RHEL 7/8 中,BONDING_MASTER=yes 是必须的,否则系统不会把 bond0 当作绑定接口处理。我曾经在 CentOS 7 上漏了这一行,结果 bond0 被当成了普通网卡,IP 配上了但绑定没生效,流量全走了一个口。

4.2.2 绑定参数详解

RHEL 系的绑定参数都写在 BONDING_OPTS 这个变量里,用空格分隔。常用的参数我列一下:

参数 说明 推荐值
mode 绑定模式,0-6 4(生产)或 1(高可用)
miimon 链路监测间隔(毫秒) 100
lacp_rate LACP 报文发送频率 fast(每秒一次)或 slow(每30秒一次)
xmit_hash_policy 数据包分发哈希策略 layer3+4(基于 IP+端口)
updelay 链路恢复后延迟启用(毫秒) 0(默认)或根据交换机设置
downdelay 链路故障后延迟禁用(毫秒) 0(默认)

4.2.3 配置生效与验证

# 重启网络服务
systemctl restart network

# 或者逐个加载
ifup bond0
ifup eth0
ifup eth1

# 查看绑定状态
cat /proc/net/bonding/bond0

# 查看接口信息
ip addr show bond0
ip link show bond0

验证时,我习惯先看 /proc/net/bonding/bond0 里的 MII Status 字段。如果两个从属接口都是 up,说明链路没问题。然后看 Bonding Mode 是不是你配的模式。

4.3 两套体系的对比

说白了,Debian 系和 RHEL 系的配置思路是一样的——都是“虚拟接口 + 物理从属接口”的架构。区别在于文件组织和语法:

对比项 Debian 系 RHEL 系
配置文件 单一文件 /etc/network/interfaces 每个接口一个文件 ifcfg-*
绑定参数位置 写在接口定义块内 写在 BONDING_OPTS 变量中
从属接口声明 bond-master bond0 MASTER=bond0, SLAVE=yes
服务管理 systemctl restart networking systemctl restart network
NetworkManager 兼容性 默认不兼容,需禁用 RHEL 8+ 可通过 nmcli 管理绑定
核心要点:无论你用哪套体系,配置绑定的本质都是——
1. 创建绑定接口(bond0)并分配 IP
2. 将物理网卡声明为从属接口
3. 配置绑定参数(模式、监测间隔等)
4. 重启网络服务并验证状态

嗯,到这里,两种主流 Linux 发行版的绑定配置方法就讲完了。你可能会问:为什么不用 NetworkManager?其实 RHEL 8 之后,nmcli 配置绑定也很方便。但我觉得,理解配置文件是基本功——出了问题你能直接看文件排查,而不是依赖工具。下一节咱们聊聊绑定模式的选择和性能调优,那才是真正考验经验的地方。

网络绑定配置流程(Debian 系 vs RHEL 系) 开始配置网络绑定 选择操作系统 Debian/Ubuntu 编辑 /etc/network/interfaces 定义 bond0 + 从属接口 systemctl restart networking CentOS/RHEL 编辑 ifcfg-bond0 + ifcfg-eth* 配置 BONDING_OPTS 参数 systemctl restart network 验证:cat /proc/net/bonding/bond0