/opt/buildhome/repo/hugo-site/content/posts/post/index.md
首页 ›Tech › [扩展] Linux 网卡双网卡绑定

[扩展] Linux 网卡双网卡绑定

作者 Worthify 九月 5, 2026 4 分钟阅读# Tech
[扩展] Linux 网卡双网卡绑定
伴乐 [扩展] Linux 网卡双网卡绑定
0:00 / 0:00

对于 RPM 系发行版

对于基于 RPM 包的 Linux 发行版,可以直接使用 nmcli 网络管理工具,在命令行下配置 bond0

bond 模式

对于 bond,在配置时可以指定不同的模式以满足实际需求:

mode numbermode namedecribe
0balance-rr轮询模式,在该模式下,数据会通过该 bond 下的第一个网卡开始,依次发送和接收。
1backup主备模式,在该模式下,bond 只有一个活动网卡工作,只有当前活动网卡故障时,才会使用另一个绑定的备用网卡
2balance-xor异或(XOR) 模式,该模式下,接口会通过奇异或方式计算 MAC地址,并将得到 MAC 地址与 bond 中绑定网卡的 MAC 地址进行匹配。建立连接后,数据会匹配的网卡发送/接收
3broadcast广播模式,该模式下,bond 中所有网卡全部参与数据的发送和接收。
4802.3ad设置 IEEE 802.3ad 动态链路聚合策略。 创建共享相同速度和双工设置的聚合组。 在活动聚合器中的所有成员上同时进行发送和接收。需要支持 802.3ad 标准的交换机。
5balance-tlb设置传输负载均衡(TLB)策略,以实现容错和负载均衡。 出站流量根据各成员接口的当前负载进行分配。入站流量由当前成员网卡接收。 如果接收成员发生故障,另一成员将接管故障成员的 MAC 地址。
6balance-alb设置主动负载均衡(ALB)策略,以实现容错和负载均衡。 包括针对 IPv4 流量的发送和接收负载均衡。 通过 ARP 协商实现接收负载均衡。

配置

  1. 第一步,首先检查系统支持 bond 功能。
[root@shibo ~]$ lsmod | grep bonding
bonding               274432  0
tls                   159744  1 bonding

命令返回如上结果则表明系统以及载入 bonding 模块并且支持bond 功能。如执行后无输出,则需要手动载入 bonding 模块

[root@shibo ~]$ sudo modprobe bonding

若未出现报错,则表示以及载入模块,并且继续接下来的步骤。

  1. 第二步:查看当前系统中的网卡设备

    nmcli device
    DEVICE  TYPE      STATE                   CONNECTION
    enp1s0  ethernet  connected               enp1s0
    lo      loopback  connected (externally)  lo
    enp7s0  ethernet  disconnected            --
    
  2. 第三步:删除当前已连接的网络:

     nmcli connection delete enp1s0
    
  3. 第四步:添加 bond 网卡

    nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=balance-rr"
    
  4. 第五步:将现有网卡添加到 bond0 中。

    # 使用 ip addr show 命令查看当前系统下网卡名称
    [root@shibo ~]$ ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0c:29:39:39:fd brd ff:ff:ff:ff:ff:ff
        altname enp3s0
        inet 192.168.15.128/24 brd 192.168.15.255 scope global dynamic noprefixroute ens160
           valid_lft 1750sec preferred_lft 1750sec
        inet6 fe80::20c:29ff:fe39:39fd/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    3: ens161: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0c:29:39:39:1b brd ff:ff:ff:ff:ff:ff
        altname enp4s0
        inet 100.1.1.3/32 scope global noprefixroute ens161
           valid_lft forever preferred_lft forever
        inet 192.168.188.128/24 brd 192.168.188.255 scope global dynamic noprefixroute ens161
           valid_lft 1750sec preferred_lft 1750sec
        inet6 fe80::bbb4:2efe:89b6:2910/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    4: ens224: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
        link/ether 00:0c:29:39:39:07 brd ff:ff:ff:ff:ff:ff
        altname enp19s0
    5: ens256: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
        link/ether 00:0c:29:39:39:07 brd ff:ff:ff:ff:ff:ff permaddr 00:0c:29:39:39:11
        altname enp27s0
    # 这里我们添加 ens224 和 ens256 网卡到 bond0 中
    # 添加 ens224 网卡到 bond0 中
    nmcli connection add type ethernet con-name ens224 ifname ens224 master bond0
    # 添加 ens256 网卡到 bond0 中。
    nmcli connection add type ethernet con-name ens256 ifname ens256 master bond0 
    # 查看当前网络设备
    nmcli device
    DEVICE  TYPE      STATE                   CONNECTION 
    ens160  ethernet  connected               ens160   
    ens161  ethernet  connected               ens161   
    bond0   bond      connected               bond0  
    ens224  ethernet  connected               ens224   
    ens256  ethernet  connected               ens56  
    lo      loopback  connected (externally)  lo   
    
  5. 第六步:设置 bond 网卡的IP 地址,dns , 网关等信息。

    [root@shibo ~]$ nmcli connection modify bond0 connection.autoconnect yes \ 
    ipv4.method manual \
    ipv4.address 192.168.10.114 \
    ipv4.gateway 192.168.10.1 \
    ipv4.dns 114.114.114.114
    
    # 配置 DNS 搜索域,如果有多个,需用空格分开
    [root@shibo ~]$ nmcli connection modify bond0 ipv4.dns-search "srv.world"
    # 如果网卡未启动,使用 up 命令启动 bond0 网卡
    [root@shibo ~]$ nmcli connection up bond0
    # 重启系统:
    [root@shibo ~]$ reboot
    
    # 重启后可查看绑定状态
    [root@shibo ~]$ cat /proc/net/bonding/bond0 
    Ethernet Channel Bonding Driver: v5.14.0-427.42.1.el9_4.x86_64
    
    Bonding Mode: load balancing (round-robin)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0
    Peer Notification Delay (ms): 0
    
    Slave Interface: ens224
    MII Status: up
    Speed: 10000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 00:0c:29:39:39:07
    Slave queue ID: 0
    
    Slave Interface: ens256
    MII Status: up
    Speed: 10000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 00:0c:29:39:39:11
    Slave queue ID: 0
    
    # 显示网卡 IP 
    [root@shibo ~]$ ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0c:29:39:39:fd brd ff:ff:ff:ff:ff:ff
        altname enp3s0
        inet 192.168.15.128/24 brd 192.168.15.255 scope global dynamic noprefixroute ens160
           valid_lft 1016sec preferred_lft 1016sec
        inet6 fe80::20c:29ff:fe39:39fd/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    3: ens161: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0c:29:39:39:1b brd ff:ff:ff:ff:ff:ff
        altname enp4s0
        inet 100.1.1.3/32 scope global noprefixroute ens161
           valid_lft forever preferred_lft forever
        inet 192.168.188.128/24 brd 192.168.188.255 scope global dynamic noprefixroute ens161
           valid_lft 1016sec preferred_lft 1016sec
        inet6 fe80::bbb4:2efe:89b6:2910/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    4: ens224: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
        link/ether 00:0c:29:39:39:07 brd ff:ff:ff:ff:ff:ff
        altname enp19s0
    5: ens256: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
        link/ether 00:0c:29:39:39:07 brd ff:ff:ff:ff:ff:ff permaddr 00:0c:29:39:39:11
        altname enp27s0
    6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 00:0c:29:39:39:07 brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.114/32 scope global noprefixroute bond0
           valid_lft forever preferred_lft forever
        inet6 fe80::af1:77db:9625:9fc4/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    
    配置文件存放位置:
    [root@shibo /]$ ll  /etc/NetworkManager/system-connections/
    total 20
    -rw-------. 1 root root 253 Feb  4 15:47 bond0.nmconnection
    -rw-------. 1 root root 229 Jul 30  2024 ens160.nmconnection
    -rw-------. 1 root root 206 Sep 25  2024 ens161.nmconnection
    -rw-------. 1 root root 195 Feb  4 15:41 ens224.nmconnection
    -rw-------. 1 root root 194 Feb  4 15:42 ens56.nmconnection