Ubuntu 24.04 双网卡 bond0 绑定
一、前期准备:添加双网卡(VMware 虚拟机+物理机)
(一)VMware 虚拟机添加双网卡(详细步骤+原理)
步骤1:关闭虚拟机
操作 :选中目标 Ubuntu 24.04 虚拟机 → 右键 → 电源 → 关闭客户机
原因:VMware 硬件变更(添加/修改网卡)需虚拟机完全关机,挂起或开机状态下无法生效,且可能导致系统识别异常。
步骤2:添加第一块物理网卡(若已有可跳过)
- 选中虚拟机 → 点击「编辑虚拟机设置」;
- 硬件列表中点击「添加」→ 选择「网络适配器」→ 点击「下一步」;
- 网络连接选择(2块网卡需一致):
- 桥接模式:直接连接物理网络,可与宿主机/外网通信(推荐测试用);
- 仅主机模式:仅与宿主机及同网络虚拟机通信;
- 勾选「启动时连接」→ 点击「完成」→ 「确定」。
原因:
- 网络适配器是虚拟机与外部通信的硬件基础,需先创建第一块网卡作为绑定的基础设备;
- 勾选「启动时连接」确保开机后网卡自动启用,无需手动激活;
- 2块网卡必须同网络模式,否则属于不同网络域,无法实现绑定(绑定要求从设备在同一网络环境)。
步骤3:添加第二块物理网卡
操作 :重复步骤2的所有操作,确保网络连接模式与第一块网卡完全一致(如均为桥接),最后点击「确定」。
原因:双网卡绑定需至少2块物理网卡,一块承担主流量,一块备用或分担流量(负载均衡模式),缺少第二块网卡无法实现高可用/带宽叠加功能。
步骤4:开机验证网卡识别(关键)
启动Ubuntu虚拟机,执行以下命令确认2块网卡已被系统识别:
bash
ip addr # 查看所有网络设备信息
命令解析:
ip:Ubuntu 内置的网络配置工具,功能覆盖ifconfig;addr:address的缩写,用于查看网卡IP、设备名等信息;
预期输出:- 显示2块以太网网卡(类型为
ether),设备名通常为ens33、ens37(或eth0、eth1),记录这两个网卡名(后续配置需用到); - 网卡状态可能为
DOWN或UP,无需手动激活,后续配置会自动处理。
(二)物理机添加双网卡(简要说明)
- 关闭物理机电源,打开机箱,将第二块网卡插入空闲PCIe插槽;
- 开机后执行
ip addr命令,确认系统已识别新增网卡(识别逻辑与虚拟机一致); - 若未识别,需安装网卡驱动(通常Ubuntu会自动适配主流网卡)。
二、配置 bond0 绑定(balance-rr 轮询模式+命令解析)
步骤1:安装辅助工具(可选但推荐)
bash
sudo apt update && sudo apt install -y ifenslave
命令解析:
sudo:以管理员权限执行(网络配置需root权限);apt update:更新软件包索引,确保获取最新的工具版本;apt install -y ifenslave:安装网卡绑定辅助工具,-y自动确认安装(无需手动输入y);
原因 :ifenslave可辅助管理bond从设备,增强绑定稳定性,虽非必需,但能减少配置异常概率。
步骤2:备份原有网络配置(避免冲突)
bash
sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.bak
命令解析:
cp:复制文件命令;/etc/netplan/01-network-manager-all.yaml:Ubuntu 默认网络配置文件路径;.bak:备份文件后缀,确保后续可恢复原始配置;
原因:避免新配置与原有配置冲突,若绑定失败可快速回滚。
步骤3:创建 bond0 专属配置文件
bash
sudo vim /etc/netplan/bond0.yaml
命令解析:
vim:Ubuntu 内置文本编辑器(若不习惯,可替换为nano);/etc/netplan/bond0.yaml:新建 bond0 配置文件(Netplan 会自动加载该目录下的所有.yaml文件);
写入配置 (替换ens37、ens38为实际网卡名):
yaml
network:
version: 2 # Netplan 配置版本(固定为2)
renderer: networkd # 使用 systemd-networkd 管理网络(而非 NetworkManager,更稳定)
ethernets:
ens37: # 第一块物理网卡名
addresses: [] # 物理网卡不单独配置IP(IP由bond0统一分配)
dhcp4: false # 禁用DHCP(避免自动获取IP导致冲突)
ens38: # 第二块物理网卡名
addresses: []
dhcp4: false
bonds:
bond0: # 绑定后的虚拟网卡名
addresses: [192.168.8.124/24] # bond0 静态IP(示例:IP+子网掩码)
gateway4: 192.168.8.1 # 网关(根据实际网络修改)
nameservers:
addresses: [223.5.5.5, 119.29.29.29] # DNS服务器(解析域名)
interfaces: [ens37, ens38] # 绑定的2块物理网卡
parameters:
mode: balance-rr # 轮询负载均衡模式
mii-monitor-interval: 100 # 每100毫秒检测一次网卡链路状态
配置原理解析:
balance-rr模式:流量按顺序交替从2块网卡发送(如第1个数据包走 ens37,第2个走 ens38),实现负载均衡,提高带宽利用率(需交换机支持,无交换机也可工作,但负载效果稍差);mii-monitor-interval: 100:MII(Media Independent Interface)是网卡物理层检测机制,每100ms检测一次网卡是否正常,故障时快速切换,减少业务中断时间;- 物理网卡
addresses: []:确保物理网卡不单独占用IP,所有网络流量通过 bond0 转发,避免IP冲突。
步骤4:应用配置并生效
bash
sudo netplan apply
命令解析:
netplan apply:Netplan 核心命令,用于加载并应用新的网络配置;- 无需重启系统,配置即时生效;
原因:触发系统创建 bond0 虚拟网卡,将2块物理网卡绑定为从设备,并加载IP、网关等配置。
三、验证 bond0 绑定效果(步骤+命令解析)
测试1:查看 bond0 基本状态
bash
ip addr show bond0
命令解析:
ip addr show 设备名:查看指定设备的详细网络信息;
预期输出:- 显示
inet 192.168.8.124/24(bond0 已配置静态IP); - 状态为
UP,LOWER_UP(网卡已启用且链路正常);
原因:确认 bond0 虚拟网卡创建成功且IP配置正确。
测试2:查看绑定详细参数
bash
cat /proc/net/bonding/bond0
命令解析:
cat:读取文件内容并输出;/proc/net/bonding/bond0:系统内核维护的 bond0 状态文件,记录绑定模式、从设备状态等关键信息;
关键输出解析:Bonding Mode: load balancing (round-robin):确认绑定模式为轮询负载均衡;Slave Interface: ens37和ens38:均显示MII Status: up(2块物理网卡均正常工作);MII Polling Interval (ms): 100:验证心跳检测间隔配置生效;
原因:确认绑定参数与配置一致,从设备正常挂载。
测试3:验证网络连通性
bash
# ping 网关(测试内网连通)
ping 192.168.8.1 -c 4
# ping 外网(测试DNS与外网访问)
ping www.baidu.com -c 4
命令解析:
ping:测试网络连通性的工具(发送ICMP数据包,接收响应则表示连通);-c 4:指定发送4个数据包后停止(避免持续ping占用资源);
预期结果 :无丢包,延迟稳定,说明 bond0 网络配置正常;
原因:验证IP、网关、DNS配置无误,bond0 能正常转发网络流量。
测试4:负载均衡/故障切换测试
(1)负载均衡测试(balance-rr 模式)
- 打开第一个终端,持续ping目标IP(产生稳定流量):
bash
ping 192.168.8.200 -f # -f 快速ping,产生大量流量
- 打开第二个终端,查看2块网卡的流量统计:
bash
watch -n 1 ifstat -i ens37 -i ens38
命令解析:
watch -n 1:每1秒刷新一次输出;ifstat:查看网卡流量的工具(若未安装,执行sudo apt install ifstat);-i 网卡名:指定查看的网卡;
预期结果 :ens37 和 ens38 的tx(发送)流量基本一致,说明负载均衡生效;
原因:验证 round-robin 模式能将流量均匀分配到2块网卡。
(2)故障切换测试
- 保持ping命令持续运行(
ping 192.168.8.1); - 禁用其中一块网卡(模拟故障):
bash
sudo ip link set ens37 down
命令解析:
ip link set 网卡名 down:禁用指定网卡(链路断开);
- 观察结果:
- ping 终端:仅丢1-2个包(切换时间),随后恢复正常;
- 查看 bond0 状态:
bash
cat /proc/net/bonding/bond0 | grep "MII Status"
预期输出 :ens37 显示 down,ens38 显示 up,流量自动切换到 ens38;
- 恢复网卡:
bash
sudo ip link set ens37 up
原因:验证 bond0 的高可用能力,单网卡故障时业务不中断。
四、环境还原:取消 bond0 绑定(步骤+命令解析)
若需恢复单网卡模式,按以下步骤操作:
步骤1:删除 bond0 配置文件
bash
sudo rm -f /etc/netplan/bond0.yaml
命令解析:
rm -f:强制删除文件(忽略不存在的文件,无提示);
原因 :Netplan 仅加载/etc/netplan/下的.yaml文件,删除后 bond0 配置失效。
步骤2:恢复原始网络配置
bash
sudo mv /etc/netplan/01-network-manager-all.yaml.bak /etc/netplan/01-network-manager-all.yaml
命令解析:
mv:移动/重命名文件,将备份文件恢复为原始配置文件;
原因:恢复到绑定前的网络配置状态。
步骤3:应用还原配置
bash
sudo netplan apply
命令解析 :加载恢复后的原始配置,删除 bond0 虚拟网卡,物理网卡恢复独立状态;
原因:使还原配置生效,系统恢复单网卡工作模式。
步骤4:验证还原结果
bash
# 查看bond0是否存在(应提示"未找到设备")
ip addr show bond0
# 查看物理网卡状态(应恢复独立IP或DHCP状态)
ip addr show ens37
# 测试网络连通性
ping www.baidu.com -c 4
预期结果 :bond0 消失,物理网卡恢复独立工作,网络连通正常;
原因:确认还原操作成功,系统网络状态恢复到绑定前。