Red Hat Training

A Red Hat training course is available for RHEL 8

第 6 章 配置网络桥接

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

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

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

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

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

6.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. 如果要为网桥分配现有连接配置集:

      1. 将这些连接的 master 参数设置为 bridge0

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

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

      2. 重新激活连接:

        # nmcli connection up bond0
        # nmcli connection up bond1
  4. 配置 IPv4 设置:

    • 要将这个网桥设备用作其它设备的端口,请输入:

      # nmcli connection modify bridge0 ipv4.method disabled
    • 要使用 DHCP,不需要任何操作。
    • 要为 bridge0 连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:

      # nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
  5. 配置 IPv6 设置:

    • 要将这个网桥设备用作其它设备的端口,请输入:

      # nmcli connection modify bridge0 ipv6.method disabled
    • 要使用 DHCP,不需要任何操作。
    • 要为 bridge0 连接设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:

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

    # nmcli connection modify bridge0 bridge.priority '16384'

    默认情况下启用 STP。

  7. 激活连接:

    # nmcli connection up bridge0
  8. 验证端口是否已连接,并且 CONNECTION 列是否显示端口的连接名称:

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

    当您激活连接的任何端口时,NetworkManager 也会激活网桥,但不会激活它的其它端口。您可以配置 Red Hat Enterprise Linux 在启用桥接时自动启用所有端口:

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

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

      # nmcli connection up bridge0

验证

  • 使用 ip 工具来显示作为特定网桥端口的以太网设备的链接状态:

    # 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 工具来显示作为任意网桥设备端口的以太网设备状态:

    # 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 命令。