Red Hat Training

A Red Hat training course is available for RHEL 8

第 14 章 配置网络绑定

这部分论述了网络绑定的基础知识、绑定和组合间的不同,以及如何在 Red Hat Enterprise Linux 8 中配置网络绑定。

您可以在不同类型的设备中创建绑定,例如:

  • 物理和虚拟以太网设备
  • 网络桥接
  • 网络团队(team)
  • VLAN 设备

14.1. 了解网络绑定

网络绑定(network bonding)是组合或者整合网络接口的方法,以便提供一个高吞吐量或冗余的逻辑接口。

active-backupbalance-tlbbalance-alb 模式不需要任何网络交换机的具体配置。然而,其他绑定模式需要配置交换机来聚合链接。例如:对于模式 0、2 和 3,Cisco 交换机需要 EtherChannel,但对于模式 4,链接聚合控制协议(LACP)和 EtherChannel 是必需的。

详情请查看您的交换机和 Linux 以太网捆绑驱动程序 HOWTO 文档

重要

某些网络绑定的功能,比如故障切换机制,不支持不通过网络交换机的直接电缆连接。详情请查看是否支持直接连接的绑定?KCS 解决方案。

14.2. 了解控制器和端口接口的默认行为

在使用 NetworkManager 服务管理网络团队或对其进行故障排出时,请考虑以下默认行为:

  • 启动控制器接口不会自动启动端口接口。
  • 启动端口接口总会启动控制器接口。
  • 停止控制器接口也会停止端口接口。
  • 没有端口的控制器可以启动静态 IP 连接。
  • 没有端口的控制器在启动 DHCP 连接时会等待端口。
  • 当您添加带有载体的端口时,具有 DHCP 连接的控制器会等待端口完成。
  • 具有 DHCP 连接的控制器在您添加没有载体的端口时,将继续等待端口等待等待。

14.3. 网络团队和绑定功能的比较

了解网络团队和网络绑定支持的功能:

功能网络绑定网络团队

广播 Tx 策略

轮询 Tx 策略

Active-backup Tx 策略

LACP(802.3ad)支持

是(仅活动)

基于 hash 的 Tx 策略

用户可以设置哈希功能

TX 负载均衡支持(TLB)

LACP 哈希端口选择

LACP 支持的负载均衡

ethtool 链接监控

ARP 链路监控

NS/NA(IPv6)链路监控

端口启动/关闭延时

端口优先级和粘性("主要" 选项增强)

独立的每个端口链路监控设置

多个链路监控设置

有限

Lockless Tx/Rx 路径

否(rwlock)

是(RCU)

VLAN 支持

用户空间运行时控制

有限

用户空间中的逻辑

可扩展性

模块化设计

性能开销

非常低

D-Bus 接口

多设备堆栈

使用 LLDP 时零配置

(在计划中)

NetworkManager 支持

14.4. 上游交换配置取决于绑定模式

下表描述了根据绑定模式,您必须对上游交换机应用哪些设置:

绑定模式交换机上的配置

0 - balance-rr

需要启用静态的 Etherchannel(未启用 LACP 协商)

1 - active-backup

需要可自主端口

2 - balance-xor

需要启用静态的 Etherchannel(未启用 LACP 协商)

3 - broadcast

需要启用静态的 Etherchannel(未启用 LACP 协商)

4 - 802.3ad

需要启用 LACP 协商的 Etherchannel

5 - balance-tlb

需要可自主端口

6 - balance-alb

需要可自主端口

有关在交换机中配置这些设置,请查看交换机文档。

14.5. 使用 nmcli 命令配置网络绑定

这部分论述了如何使用 nmcli 命令配置网络绑定。

先决条件

流程

  1. 创建绑定接口:

    # nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"

    这个命令会创建一个名为 bond0 的绑定,它使用 active-backup 模式。

    另外,要设置 Media 独立的接口(MII)监控间隔,请将 miimon=interval 选项添加到 bond.options 属性中。例如:要使用同样的命令,但还需要将 MII 监控间隔设置为 1000 毫秒(1秒),请输入:

    # nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"
  2. 显示网络接口以及您要添加到绑定中的接口名称:

    # nmcli device status
    DEVICE   TYPE      STATE         CONNECTION
    enp7s0   ethernet  disconnected  --
    enp8s0   ethernet  disconnected  --
    bridge0  bridge    connected     bridge0
    bridge1  bridge    connected     bridge1
    ...

    在本例中:

    • enp7s0enp8s0 没有配置。要将这些设备用作端口,请在下一步中添加连接配置集。
    • bridge0bridge1 已有连接配置集。要将这些设备用作端口,请在下一步中修改其配置集。
  3. 为绑定分配接口:

    1. 如果没有配置您要分配给绑定的接口,为其创建新的连接配置集:

      # nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp7s0 master bond0
      # nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname enp8s0 master bond0

      这些命令为 enp7s0enp8s0创建配置集,并将其添加到 bond0 连接中。

    2. 要为绑定分配现有连接配置集,请将这些连接的 master 参数设置为 bond0:

      # nmcli connection modify bridge0 master bond0
      # nmcli connection modify bridge1 master bond0

      这些命令将名为 bridge0bridge1 的现有连接配置集分配给 bond0 连接。

  4. 配置绑定的 IP 设置。如果要使用这个绑定作为其它设备的端口,请跳过这一步。

    1. 配置 IPv4 设置。例如:要设置 bond0 连接的静态 IPv4 地址、网络掩码、默认网关、DNS 服务器和DNS 搜索域,请输入:

      # nmcli connection modify bond0 ipv4.addresses '192.0.2.1/24'
      # nmcli connection modify bond0 ipv4.gateway '192.0.2.254'
      # nmcli connection modify bond0 ipv4.dns '192.0.2.253'
      # nmcli connection modify bond0 ipv4.dns-search 'example.com'
      # nmcli connection modify bond0 ipv4.method manual
    2. 配置 IPv6 设置。例如:要设置 bond0 连接的静态 IPv6 地址、网络掩码、默认网关、DNS 服务器和DNS 搜索域,请输入:

      # nmcli connection modify bond0 ipv6.addresses '2001:db8:1::1/64
      # nmcli connection modify bond0 ipv6.gateway '2001:db8:1::fffe'
      # nmcli connection modify bond0 ipv6.dns '2001:db8:1::fffd'
      # nmcli connection modify bond0 ipv6.dns-search 'example.com'
      # nmcli connection modify bond0 ipv6.method manual
  5. 激活连接:

    # nmcli connection up bond0
  6. 验证端口已连接,CONNECTION 列显示端口的连接名称:

    # nmcli device
    DEVICE   TYPE      STATE      CONNECTION
    ...
    enp7s0   ethernet  connected  bond0-port1
    enp8s0   ethernet  connected  bond0-port2

    Red Hat Enterprise Linux 在系统引导时激活控制器和端口设备。激活任何端口连接时,还会激活控制器。然而,在这种情况下,只激活一个端口连接。默认情况下,激活控制器不会自动激活端口。但是,您可以对其进行设置:

    1. 启用绑定连接的 connection.autoconnect-slaves 参数:

      # nmcli connection modify bond0 connection.autoconnect-slaves 1
    2. 重新激活桥接:

      # nmcli connection up bond0

验证步骤

  1. 显示绑定状态:

    # cat /proc/net/bonding/bond0
    Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
    
    Bonding Mode: fault-tolerance (active-backup)
    Primary Slave: None
    Currently Active Slave: enp7s0
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0
    
    Slave Interface: enp7s0
    MII Status: up
    Speed: Unknown
    Duplex: Unknown
    Link Failure Count: 0
    Permanent HW addr: 52:54:00:d5:e0:fb
    Slave queue ID: 0
    
    Slave Interface: enp8s0
    MII Status: up
    Speed: Unknown
    Duplex: Unknown
    Link Failure Count: 0
    Permanent HW addr: 52:54:00:b2:e2:63
    Slave queue ID: 0

    在这个示例中,两个端口都是上线的。

  2. 验证绑定故障切换是否正常工作:

    1. 从主机中临时删除网络电缆。请注意,无法使用命令行正确测试链路失败事件。
    2. 显示绑定状态:

      # cat /proc/net/bonding/bond0

其它资源

14.6. 使用 nm-connection-editor 配置网络绑定

本节论述了如何使用 nm-connection-editor 应用程序配置网络绑定。

请注意,nm-connection-editor 只能向绑定中添加新端口。要使用现有连接配置集作为端口,使用 nmcli 工具创建绑定,如使用 nmcli 命令配置网络绑定所述。

先决条件

  • 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
  • 要将以太网设备用作绑定的端口,必须在服务器中安装物理或者虚拟以太网设备。
  • 要使用 team、bond 或 VLAN 设备作为绑定的端口,请确保这些设备还没有配置。

流程

  1. 打开终端窗口,输入 nm-connection-editor:

    $ nm-connection-editor
  2. + 按钮添加新连接。
  3. Bond 连接类型,并点 Create
  4. Bond 标签页中:

    1. 可选:在 Interface name 字段中设置绑定接口的名称。
    2. 点击 添加 按钮将网络接口作为端口添加到绑定。

      1. 选择接口的连接类型。例如,为有线连接选择 Ethernet
      2. 可选:为端口设置连接名称。
      3. 如果您是为以太网设备创建连接配置集,打开 Ethernet 标签,在 Device 字段中选择您要添加为绑定的端口。如果您选择了不同的设备类型,请相应地进行配置。请注意,您只能在没有配置的绑定中使用以太网接口。
      4. Save
    3. 对您要添加到绑定的每个接口重复前面的步骤:

      add nic to bond in nm connection editor

    4. 可选:设置其他选项,如介质独立接口(MII)监控间隔。
  5. 配置绑定的 IP 设置。如果要使用这个绑定作为其它设备的端口,请跳过这一步。

    1. IPv4 Settings 标签页中,配置 IPv4 设置。例如,设置静态 IPv4 地址、网络掩码、默认网关、DNS 服务器和 DNS 搜索域:

      bond IPv4 settings nm connection editor

    2. IPv6 Settings 标签页中,配置 IPv6 设置。例如,设置静态 IPv6 地址、网络掩码、默认网关、DNS 服务器和 DNS 搜索域:

      bond IPv6 settings nm connection editor

  6. Save 保存绑定连接。
  7. 关闭 nm-connection-editor

验证步骤

  • 查看绑定的状态:

    $ cat /proc/net/bonding/bond0
    Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
    
    Bonding Mode: fault-tolerance (active-backup)
    Primary Slave: None
    Currently Active Slave: enp7s0
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0
    
    Slave Interface: enp7s0
    MII Status: up
    Speed: Unknown
    Duplex: Unknown
    Link Failure Count: 0
    Permanent HW addr: 52:54:00:d5:e0:fb
    Slave queue ID: 0
    
    Slave Interface: enp8s0
    MII Status: up
    Speed: Unknown
    Duplex: Unknown
    Link Failure Count: 0
    Permanent HW addr: 52:54:00:b2:e2:63
    Slave queue ID: 0

    在这个示例中,两个端口都是上线的。

14.7. 使用 nmstatectl 配置网络绑定

本节论述了如何使用 nmstatectl 工具配置带有以下设置的网络绑定 bond0:

  • 绑定中的网络接口: enp1s0enp7s0
  • 模式: active-backup
  • 静态 IPv4 地址: 192.0.2.1,子网掩码为 /24
  • 静态 IPv6 地址: 2001:db8:1::1,子网掩码为 /64
  • IPv4 默认网关: 192.0.2.254
  • IPv6 默认网关: 2001:db8:1::fffe
  • IPv4 DNS 服务器: 192.0.2.200
  • IPv6 DNS 服务器: 2001:db8:1::ffbb
  • DNS 搜索域: example.com

先决条件

  • 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
  • 要将以太网设备用作绑定中的端口,必须在服务器中安装物理或者虚拟以太网设备。
  • 要使用 team、bridge 或 VLAN 设备作为绑定中的端口,在 port 列表中设置接口名称,并定义对应的接口。
  • 已安装 nmstate 软件包。

流程

  1. 创建包含以下内容的 YAML 文件,如 ~/create-bond.yml:

    ---
    interfaces:
    - name: bond0
      type: bond
      state: up
      ipv4:
        enabled: true
        address:
        - ip: 192.0.2.1
          prefix-length: 24
        dhcp: false
      ipv6:
        enabled: true
        address:
        - ip: 2001:db8:1::1
          prefix-length: 64
        autoconf: false
        dhcp: false
      link-aggregation:
        mode: active-backup
        port:
        - enp1s0
        - enp7s0
    - name: enp1s0
      type: ethernet
      state: up
    - name: enp7s0
      type: ethernet
      state: up
    
    routes:
      config:
      - destination: 0.0.0.0/0
        next-hop-address: 192.0.2.254
        next-hop-interface: bond0
      - destination: ::/0
        next-hop-address: 2001:db8:1::fffe
        next-hop-interface: bond0
    
    dns-resolver:
      config:
        search:
        - example.com
        server:
        - 192.0.2.200
        - 2001:db8:1::ffbb
  2. 将设置应用到系统:

    # nmstatectl set ~/create-bond.yml

验证步骤

  1. 显示设备和连接的状态:

    # nmcli device status
    DEVICE      TYPE      STATE      CONNECTION
    bond0       bond      connected  bond0
  2. 显示连接配置集的所有设置:

    # nmcli connection show bond0
    connection.id:              bond0
    connection.uuid:            79cbc3bd-302e-4b1f-ad89-f12533b818ee
    connection.stable-id:       --
    connection.type:            bond
    connection.interface-name:  bond0
    ...

其它资源

  • 有关详情请参考 nmstatectl nmstatectl(8) man page。
  • 如需更多配置示例,请参阅 /usr/share/doc/nmstate/examples/ 目录。

14.8. 使用 RHEL 系统角色配置网络绑定

您可以使用 network RHEL 系统角色配置网络绑定。这个步骤描述了如何在使用两个以太网设备的主动备份模式中配置绑定,并设置 IPv4 和 IPv6 地址、默认网关和 DNS 配置。

注意

在网桥上设置 IP 配置,而不是在 Linux 网桥的端口上设置。

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。
  • 在服务器中安装两个或者两个以上物理或者虚拟网络设备。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/bond-ethernet.yml playbook:

    ---
    - name: Configure a network bond that uses two Ethernet ports
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            # Define the bond profile
            - name: bond0
              type: bond
              interface_name: bond0
              ip:
                address:
                  - "192.0.2.1/24"
                  - "2001:db8:1::1/64"
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              bond:
                mode: active-backup
              state: up
    
            # Add an Ethernet profile to the bond
            - name: bond0-port1
              interface_name: enp7s0
              type: ethernet
              controller: bond0
              state: up
    
            # Add a second Ethernet profile to the bond
            - name: bond0-port2
              interface_name: enp8s0
              type: ethernet
              controller: bond0
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/bond-ethernet.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/bond-ethernet.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

14.9. 创建网络绑定以便在不中断 VPN 的情况下在以太网和无线连接间进行切换

将工作站连接到公司网络的 RHEL 用户通常会使用 VPN 访问远程资源。然而,如果工作站在以太网和 Wi-Fi 连接间切换,例如:如果您是从带以太网连接的 docking 站中释放的笔记本电脑,VPN 连接就中断。要避免这个问题,您可以在 active-backup 模式中使用以太网和 Wi-Fi 连接创建一个网络绑定。

先决条件

  • 主机包含以太网和 Wi-Fi 设备。
  • 已创建以太网和 Wi-Fi 网络管理器连接配置集,且两个连接都可以独立工作。

    此流程使用以下连接配置集来创建名为 bond0 的网络绑定:

    • Docking_stationenp11s0u1 以太网设备相关联
    • Wi-Fiwlp61s0 Wi-Fi 设备相关联

流程

  1. active-backup 模式中创建绑定接口:

    # nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"

    这个命令为接口和连接配置集 bond0 命名。

  2. 配置绑定的 IPv4 设置:

    • 如果您的网络中的 DHCP 服务器为主机分配 IPv4 地址,则不需要任何操作。
    • 如果您的本地网络需要静态 IPv4 地址,请将地址、网络掩码、默认网关、DNS 服务器和 DNS 搜索域设置为 bond0 连接:

      # nmcli connection modify bond0 ipv4.addresses '192.0.2.1/24'
      # nmcli connection modify bond0 ipv4.gateway '192.0.2.254'
      # nmcli connection modify bond0 ipv4.dns '192.0.2.253'
      # nmcli connection modify bond0 ipv4.dns-search 'example.com'
      # nmcli connection modify bond0 ipv4.method manual
  3. 配置绑定的 IPv6 设置:

    • 如果您的网络中的路由器或者 DHCP 服务器为主机分配 IPv6 地址,则不需要任何操作。
    • 如果您的本地网络需要静态 IPv6 地址,请将地址、网络掩码、默认网关、DNS 服务器和 DNS 搜索域设置为 bond0 连接:

      # nmcli connection modify bond0 ipv6.addresses '2001:db8:1::1/64'
      # nmcli connection modify bond0 ipv6.gateway '2001:db8:1::fffe'
      # nmcli connection modify bond0 ipv6.dns '2001:db8:1::fffd'
      # nmcli connection modify bond0 ipv6.dns-search 'example.com'
      # nmcli connection modify bond0 ipv6.method manual
  4. 显示连接配置集:

    # nmcli connection show
    NAME             UUID                                  TYPE      DEVICE
    Docking_station  256dd073-fecc-339d-91ae-9834a00407f9  ethernet  enp11s0u1
    Wi-Fi            1f1531c7-8737-4c60-91af-2d21164417e8  wifi      wlp61s0
    ...

    下一步需要连接配置集的名称和以太网设备名称。

  5. 为绑定分配以太网连接的配置:

    # nmcli connection modify Docking_station master bond0
  6. 为绑定分配 Wi-Fi 连接的连接配置集:

    # nmcli connection modify Wi-Fi master bond0
  7. 如果您的 Wi-Fi 网络使用 MAC 过滤来只允许允许列表上的 MAC 地址访问网络,请配置 NetworkManager 会动态地将活跃端口的 MAC 地址分配给绑定:

    # nmcli connection modify bond0 +bond.options fail_over_mac=1

    使用这个设置时,您必须将 Wi-Fi 设备的 MAC 地址设置为 allow 列表,而不是以太网和 Wi-Fi 设备的 MAC 地址。

  8. 将与以太连接关联的设备设置为绑定的主设备:

    # nmcli con modify bond0 +bond.options "primary=enp11s0u1"

    使用这个设置时,如果可用,绑定总是使用以太网连接。

  9. 配置在激活 bond0 设备时,网络管理器(NetworkManager)会自动激活端口:

    # nmcli connection modify bond0 connection.autoconnect-slaves 1
  10. 激活 bond0 连接:

    # nmcli connection up bond0

验证步骤

  • 显示当前活跃设备、绑定及其端口的状态:

    # cat /proc/net/bonding/bond0
    Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
    
    Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
    Primary Slave: enp11s0u1 (primary_reselect always)
    Currently Active Slave: enp11s0u1
    MII Status: up
    MII Polling Interval (ms): 1
    Up Delay (ms): 0
    Down Delay (ms): 0
    Peer Notification Delay (ms): 0
    
    Slave Interface: enp11s0u1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 00:53:00:59:da:b7
    Slave queue ID: 0
    
    Slave Interface: wlp61s0
    MII Status: up
    Speed: Unknown
    Duplex: Unknown
    Link Failure Count: 2
    Permanent HW addr: 00:53:00:b3:22:ba
    Slave queue ID: 0