多网卡绑定提升服务器出口带宽上限,新手完整指南
先搞清楚:多网卡绑定能解决什么问题
如果你的服务器有多个网口,但出口带宽被单口物理上限卡住(比如千兆网口只有1Gbps),多网卡绑定(Linux Bonding)可以把两个或多个网口“捆绑”成一个逻辑接口,让流量分摊到各个物理口上,从而实现带宽聚合。
注意:并不是所有模式都能让单条连接跑满聚合带宽,但对于多用户并发场景,效果非常明显。
本文适用对象:手头有Linux服务器(CentOS 7/8、Ubuntu 20.04/22.04)、至少有两块物理网卡、想提升总出口带宽的新手用户。
操作前准备好这些
- 一台Linux服务器,至少有两个空闲的物理网口(比如eth0、eth1)。可以用
ip link show或ifconfig -a查看现有网口。 - 确认网卡驱动支持bonding。绝大多数现代网卡都支持,不需要额外硬件。
- 如果服务器在机房或托管,请提前确认交换机是否支持LACP(802.3ad)。如果你只想用active-backup(主备)或balance-rr,交换机无需特殊配置。
- root权限或者sudo权限。
分步配置多网卡绑定
第一步:加载bonding内核模块
执行以下命令,确保系统能识别bonding模块:
sudo modprobe bonding
如果希望开机自动加载,
可以编辑 /etc/modules(Ubuntu)或 /etc/modules-load.d/bonding.conf(CentOS),
写入一行 bonding。
第二步:创建bond接口配置文件
CentOS / RHEL 7/8:网络配置文件在 /etc/sysconfig/network-scripts/。
先创建bond0的配置文件 ifcfg-bond0:
sudo vi /etc/sysconfig/network-scripts/ifcfg-bond0
写入以下内容(以静态IP为例,DHCP只需将BOOTPROTO改为dhcp并删掉IP相关行):
DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
BONDING_OPTS="mode=4 miimon=100"
ONBOOT=yes
重点:mode=4 表示802.3ad(LACP),需要交换机配合;
如果交换机不支持,可改为 mode=1(active-backup,主备模式)或 mode=0(balance-rr,轮询)。miimon=100 表示每100毫秒检测链路状态。
Ubuntu 20.04/22.04:使用netplan,编辑 /etc/netplan/01-netcfg.yaml 或类似文件。
示例(注意缩进严格):
network:
version: 2
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: 802.3ad
mii-monitor-interval: 100
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
第三步:修改物理网口配置文件,绑定到bond0
CentOS:编辑两个网卡配置文件,比如 ifcfg-eth0 和 ifcfg-eth1,内容改为:
DEVICE=eth0
NAME=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
eth1同理,只需改 DEVICE=eth1。
Ubuntu netplan:上面yaml中已经把 eth0和eth1 作为 bond0 的子接口,不需要额外配置文件。
执行 sudo netplan apply 生效。
第四步:重启网络服务并生效
CentOS:
sudo systemctl restart network
Ubuntu:
sudo netplan apply
如果遇到网络中断,建议直接在服务器本地控制台操作,或者提前准备好备用登录方式(如IPMI)。
避坑指南和常见问题
- 模式选错导致不通:如果你用的是千兆傻瓜交换机,不支持LACP,用mode=4(802.3ad)会导致bond接口无法正常工作。此时建议改用mode=1(active-backup)或mode=0(balance-rr)。注意mode=0会在所有网口间轮询发送包,但接收端可能乱序,适合局域网内无丢包重传的场景。
- MAC地址冲突:bond0会使用第一个slave网卡的MAC,如果两个网口接在不同交换机上且MAC相同可能被交换机丢弃。一般不用操心,但若出现通信异常,尝试重启交换机端口或设置bonding的fail_over_mac。
- 带宽没翻倍? 单条TCP连接只能走一个网口(取决于哈希策略),所以测速单个连接不会超过单口上限。要看到聚合效果,请用多线程工具(比如
iperf3 -P 10)同时开多个连接测试。 - 重启后bond接口不启动:检查slave网卡的
ONBOOT=yes是否设置,以及配置文件中的MASTER和SLAVE是否写错。
验证效果
- 查看bond状态:
cat /proc/net/bonding/bond0
可以看到绑定模式、每个网口的状态(up/down)、链路失败计数等。
- 测试带宽聚合:在两台机器上分别开启iperf3服务端和客户端。假设服务端IP是192.168.1.100,客户端执行:
iperf3 -c 192.168.1.100 -P 10 -t 30
观察SUM行的带宽是否接近所有网口带宽之和。
如果是千兆双口,应该看到约1.8-2.0 Gbps。
- 确认流量负载均衡:在bond接口上抓包或观察
/proc/net/bonding/bond0中的发送/接收统计,看流量是否在两个网口间分散。
总结
多网卡绑定是提升服务器出口带宽上限的实用手段,关键选对模式、配好网口文件、检查交换机支持。
按本文步骤操作,即使零基础也能在几分钟内完成配置。
遇到异常时优先回头检查 mode 和 miimon 参数,再用 cat /proc/net/bonding/bond0 定位问题。
如果你还想了解如何配置VLAN或链路聚合的其他变种,欢迎继续浏览站内相关教程。