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 | 自适应收发负载均衡 |
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
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 配置绑定也很方便。但我觉得,理解配置文件是基本功——出了问题你能直接看文件排查,而不是依赖工具。下一节咱们聊聊绑定模式的选择和性能调优,那才是真正考验经验的地方。