Red Hat Training

A Red Hat training course is available for RHEL 8

第 12 章 配置网络桥接

网络桥接是一个链路层设备,它可根据 MAC 地址列表转发网络间的流量。网桥通过侦听网络流量并了解连接到每个网络的主机来构建 MAC 地址表。例如,您可以使用 Red Hat Enterprise Linux 8 主机中的软件桥接模拟硬件桥接或在虚拟化环境中,将虚拟机(VM)集成到与主机相同的网络中。

桥接需要在桥接应该连接的每个网络中有一个网络设备。当您配置桥接时,桥接名为 controller,其使用的设备为 ports

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

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

由于 IEEE 802.11 标准指定在 Wi-Fi 中使用 3 个地址帧以便有效地使用随机时间,您无法通过 Ad-Hoc 或者 Infrastructure 模式中的 Wi-Fi 网络配置网桥。

12.1. 使用 nmcli 命令配置网络桥接

本小节论述了如何使用 nmcli 程序配置网络桥接。

先决条件

流程

  1. 创建网桥接口:

    # nmcli connection add type bridge con-name bridge0 ifname bridge0

    这个命令会创建一个名为 bridge0 的桥接,输入:

  2. 显示网络接口,并记录您要添加到网桥中的接口名称:

    # nmcli device status
    DEVICE  TYPE      STATE         CONNECTION
    enp7s0  ethernet  disconnected  --
    enp8s0  ethernet  disconnected  --
    bond0   bond      connected     bond0
    bond1   bond      connected     bond1
    ...

    在本例中:

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

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

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

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

    2. 要为网桥分配现有连接配置集,将这些连接的 master 参数设置为 bridge0:

      # nmcli connection modify bond0 master bridge0
      # nmcli connection modify bond1 master bridge0

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

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

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

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

      # nmcli connection modify bridge0 ipv6.addresses '2001:db8:1::1/64'
      # nmcli connection modify bridge0 ipv6.gateway '2001:db8:1::fffe'
      # nmcli connection modify bridge0 ipv6.dns '2001:db8:1::fffd'
      # nmcli connection modify bridge0 ipv6.dns-search 'example.com'
      # nmcli connection modify bridge0 ipv6.method manual
  5. 可选:配置网桥的其他属性。例如,要将 bridge0 的生成树协议(STP)优先级设置为 16384,请输入:

    # nmcli connection modify bridge0 bridge.priority '16384'

    默认情况下启用 STP。

  6. 激活连接:

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

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

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

    1. 启用网桥连接的 connection.autoconnect-slaves 参数:

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

      # nmcli connection up bridge0

验证步骤

  • 显示作为特定网桥端口的以太网设备的链接状态:

    # ip link show master bridge0
    3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff
    4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
  • 显示作为任意网桥设备的端口的以太网设备状态:

    # bridge link show
    3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100
    4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100
    5: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state forwarding priority 32 cost 100
    6: enp11s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state blocking priority 32 cost 100
    ...

    要显示具体以太网设备的状态,请使用 bridge link show dev ethernet_device_name 命令。

其它资源

12.2. 使用 nm-connection-editor 配置网络桥接

本节介绍如何使用 nm-connection-editor 应用程序配置网络桥接。

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

先决条件

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

流程

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

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

    1. 可选:在 Interface name 字段中设置桥接接口的名称。
    2. 点击 添加 按钮为网络接口创建新连接配置集,并将配置集作为端口添加到桥接中。

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

      add nic to bridge in nm connection editor

  5. 可选:配置其他网桥设置,如生成树协议(STP)选项。
  6. 配置网桥的 IP 设置。如果要使用这个桥接作为其它设备的端口,请跳过这一步。

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

      bridge IPv4 settings nm connection editor

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

      bridge IPv6 settings nm connection editor

  7. 保存网桥连接。
  8. 关闭 nm-connection-editor

验证步骤

  • 显示作为特定网桥端口的以太网设备的链接状态。

    # ip link show master bridge0
    3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff
    4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
  • 显示任意网桥设备中端口的以太网设备状态:

    # bridge link show
    3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100
    4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100
    5: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state forwarding priority 32 cost 100
    6: enp11s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state blocking priority 32 cost 100
    ...

    要显示具体以太网设备的状态,请使用 bridge link show dev ethernet_device_name 命令。

12.3. 使用 nmstatectl 配置网络桥接

这部分论述了如何使用 nmstatectl 工具使用以下设置配置 Linux 网络桥接 bridge0:

  • 网桥中的网络接口: enp1s0enp7s0
  • span Tree Protocol(STP): Enabled
  • 静态 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、bond 或 VLAN 设备作为网桥中的端口,在 port 列表中设置接口名称,并定义对应的接口。
  • 已安装 nmstate 软件包。

流程

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

    ---
    interfaces:
    - name: bridge0
      type: linux-bridge
      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
      bridge:
        options:
          stp:
            enabled: true
        port:
          - name: enp1s0
          - name: 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: bridge0
      - destination: ::/0
        next-hop-address: 2001:db8:1::fffe
        next-hop-interface: bridge0
    dns-resolver:
      config:
        search:
        - example.com
        server:
        - 192.0.2.200
        - 2001:db8:1::ffbb
  2. 将设置应用到系统:

    # nmstatectl set ~/create-bridge.yml

验证步骤

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

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

    # nmcli connection show bridge0
    connection.id:              bridge0
    connection.uuid:            e2cc9206-75a2-4622-89cf-1252926060a9
    connection.stable-id:       --
    connection.type:            bridge
    connection.interface-name:  bridge0
    ...

其它资源

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