Ubuntu 24.04 双网卡 bond0 绑定

Ubuntu 24.04 双网卡 bond0 绑定

一、前期准备:添加双网卡(VMware 虚拟机+物理机)

(一)VMware 虚拟机添加双网卡(详细步骤+原理)

步骤1:关闭虚拟机

操作 :选中目标 Ubuntu 24.04 虚拟机 → 右键 → 电源 → 关闭客户机
原因:VMware 硬件变更(添加/修改网卡)需虚拟机完全关机,挂起或开机状态下无法生效,且可能导致系统识别异常。

步骤2:添加第一块物理网卡(若已有可跳过)
  1. 选中虚拟机 → 点击「编辑虚拟机设置」;
  2. 硬件列表中点击「添加」→ 选择「网络适配器」→ 点击「下一步」;
  3. 网络连接选择(2块网卡需一致):
    • 桥接模式:直接连接物理网络,可与宿主机/外网通信(推荐测试用);
    • 仅主机模式:仅与宿主机及同网络虚拟机通信;
  4. 勾选「启动时连接」→ 点击「完成」→ 「确定」。
    原因
  • 网络适配器是虚拟机与外部通信的硬件基础,需先创建第一块网卡作为绑定的基础设备;
  • 勾选「启动时连接」确保开机后网卡自动启用,无需手动激活;
  • 2块网卡必须同网络模式,否则属于不同网络域,无法实现绑定(绑定要求从设备在同一网络环境)。
步骤3:添加第二块物理网卡

操作 :重复步骤2的所有操作,确保网络连接模式与第一块网卡完全一致(如均为桥接),最后点击「确定」。
原因:双网卡绑定需至少2块物理网卡,一块承担主流量,一块备用或分担流量(负载均衡模式),缺少第二块网卡无法实现高可用/带宽叠加功能。

步骤4:开机验证网卡识别(关键)

启动Ubuntu虚拟机,执行以下命令确认2块网卡已被系统识别:

bash 复制代码
ip addr  # 查看所有网络设备信息

命令解析

  • ip:Ubuntu 内置的网络配置工具,功能覆盖 ifconfig
  • addraddress 的缩写,用于查看网卡IP、设备名等信息;
    预期输出
  • 显示2块以太网网卡(类型为 ether),设备名通常为 ens33ens37(或 eth0eth1),记录这两个网卡名(后续配置需用到);
  • 网卡状态可能为 DOWNUP,无需手动激活,后续配置会自动处理。

(二)物理机添加双网卡(简要说明)

  1. 关闭物理机电源,打开机箱,将第二块网卡插入空闲PCIe插槽;
  2. 开机后执行 ip addr 命令,确认系统已识别新增网卡(识别逻辑与虚拟机一致);
  3. 若未识别,需安装网卡驱动(通常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 文件);
    写入配置 (替换 ens37ens38 为实际网卡名):
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: ens37ens38:均显示 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 模式)
  1. 打开第一个终端,持续ping目标IP(产生稳定流量):
bash 复制代码
ping 192.168.8.200 -f  # -f 快速ping,产生大量流量
  1. 打开第二个终端,查看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)故障切换测试
  1. 保持ping命令持续运行(ping 192.168.8.1);
  2. 禁用其中一块网卡(模拟故障):
bash 复制代码
sudo ip link set ens37 down

命令解析

  • ip link set 网卡名 down:禁用指定网卡(链路断开);
  1. 观察结果:
    • ping 终端:仅丢1-2个包(切换时间),随后恢复正常;
    • 查看 bond0 状态:
bash 复制代码
cat /proc/net/bonding/bond0 | grep "MII Status"

预期输出 :ens37 显示 down,ens38 显示 up,流量自动切换到 ens38;

  1. 恢复网卡:
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 消失,物理网卡恢复独立工作,网络连通正常;
原因:确认还原操作成功,系统网络状态恢复到绑定前。

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
欧云服务器5 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php