菜鸟科技网

Linux网桥命令有哪些常用操作?

什么是 Linux 网桥?

理解网桥是什么至关重要。

Linux网桥命令有哪些常用操作?-图1
(图片来源网络,侵删)
  • 物理类比:你可以把网桥想象成一个多端口的以太网交换机,它工作在 OSI 模型的数据链路层(第二层)
  • 核心功能
    1. 学习 MAC 地址:它会学习连接到其各个端口(物理网卡或虚拟接口)的设备的 MAC 地址,并建立一个 MAC 地址表,记录了哪个 MAC 地址在哪个端口上。
    2. 数据帧转发:当数据帧到达网桥时,它会检查目标 MAC 地址,如果目标 MAC 地址在同一个端口上(或广播地址),它不会转发数据帧(过滤),如果目标 MAC 地址在其他端口,它会将数据帧精准地转发到那个端口(转发),如果目标 MAC 地址未知,它会将数据帧广播到所有其他端口(泛洪)。
  • 主要用途
    • 虚拟化:最经典的用法是在 KVM、Xen、LXD 等虚拟化平台中,创建一个虚拟交换机,让虚拟机通过这个交换机与外部网络通信,或者让虚拟机之间相互通信。
    • 网络隔离与连接:可以将多个物理网络接口(如 eth0, eth1)桥接在一起,使它们在二层网络看来就像一个接口。
    • 容器网络:Docker 和 Podman 在使用 bridge 驱动时,默认会创建一个名为 docker0podman 的网桥,用于管理容器网络。

管理网桥的核心命令

在 Linux 上,管理网桥主要有两种工具:

  1. brctl:传统的、功能强大的工具,但已被标记为过时。
  2. iproute2 套件中的 ip link:现代的、功能更全面的工具,是官方推荐的方式。

我们将重点介绍 iproute2 的用法,同时也会提及 brctl 以备兼容性需求。

1 安装工具

  • iproute2:通常预装在大多数现代 Linux 发行版中。

    • Debian/Ubuntu: sudo apt-get install iproute2
    • CentOS/RHEL/Fedora: sudo yum install iproute (或 dnf install iproute)
  • brctl:如果系统没有,需要手动安装。

    Linux网桥命令有哪些常用操作?-图2
    (图片来源网络,侵删)
    • Debian/Ubuntu: sudo apt-get install bridge-utils
    • CentOS/RHEL/Fedora: sudo yum install bridge-utils

使用 iproute2 (ip link) 管理网桥

1 查看网桥信息

要查看系统中所有的网桥及其详细信息(包括连接的端口),使用 showls 命令。

# 查看所有网桥的详细信息
$ ip link show
# 或者使用更简洁的命令
$ ip link show type bridge
# 查看特定网桥(br0)的详细信息
$ ip link show br0
# 查看网桥的 MAC 地址表(学习到的设备)
$ bridge link
# 或者更详细的
$ bridge fdb show

示例输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP mode DEFAULT group default qlen 1000
    link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP mode DEFAULT group default qlen 1000
    link/ether 00:1a:2b:3c:4d:5f brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff

从上面的输出可以看到,eth0eth1master 都是 br0,表示它们是网桥 br0 的端口。

2 创建和删除网桥

  • 创建一个名为 br0 的网桥

    Linux网桥命令有哪些常用操作?-图3
    (图片来源网络,侵删)
    # 创建网桥,并设置为 UP 状态
    sudo ip link add name br0 type bridge
    sudo ip link set dev br0 up
  • 删除一个名为 br0 的网桥

    # 删除前需要确保网桥是 DOWN 状态,并且没有端口连接到它
    sudo ip link set dev br0 down
    sudo ip link del dev br0

3 添加和删除端口

假设我们有两个物理网卡 eth0eth1

  • eth0 添加到 br0

    # 将 eth0 的 master 设置为 br0
    sudo ip link set dev eth0 master br0
    # (可选)将 eth0 设置为 UP 状态
    sudo ip link set dev eth0 up
  • br0 中移除 eth0

    # 将 eth0 的 master 清空
    sudo ip link set dev eth0 nomaster

4 配置网桥 IP 地址

网桥本身可以像一个普通网络接口一样配置 IP 地址,这个 IP 地址通常是整个桥接网络的网关或管理地址。

  • br0 分配 IP 地址 168.1.100/24

    sudo ip addr add 192.168.1.100/24 dev br0
  • 删除 br0 上的 IP 地址

    sudo ip addr del 192.168.1.100/24 dev br0

使用 brctl 管理网桥(旧版)

如果你在维护旧系统,可能会用到 brctl

1 查看

# 查看所有网桥
$ brctl show
# 查看特定网桥
$ brctl show br0

2 创建和删除

# 创建网桥 br0
$ sudo brctl addbr br0
# 删除网桥 br0
$ sudo brctl delbr br0

3 添加和删除端口

# 将 eth0 添加到 br0
$ sudo brctl addif br0 eth0
# 从 br0 中移除 eth0
$ sudo brctl delif br0 eth0

完整实战示例:创建一个网桥并连接物理网卡

这个场景模拟了将一台服务器的两个物理网卡桥接,形成一个虚拟交换机,可以连接虚拟机或用于网络实验。

目标:创建 br0 网桥,将 eth1eth2 加入其中,并为 br0 分配 IP 地址。

步骤:

  1. 查看当前网络状态

    ip link show
    # 确认 eth1 和 eth2 的状态
  2. 创建网桥 br0

    sudo ip link add name br0 type bridge
  3. 启用网桥 br0

    sudo ip link set dev br0 up
  4. 将物理网卡 eth1eth2 加入网桥

    # 将网卡设置为 UP 状态(推荐)
    sudo ip link set dev eth1 up
    sudo ip link set dev eth2 up
    # 将它们加入网桥
    sudo ip link set dev eth1 master br0
    sudo ip link set dev eth2 master br0
  5. 为网桥 br0 配置 IP 地址

    sudo ip addr add 192.168.100.1/24 dev br0
  6. 验证配置

    # 查看网桥信息,确认 eth1 和 eth2 已加入
    ip link show br0
    # 查看网桥的 IP 地址
    ip addr show br0
    # 查看网桥的 MAC 地址表
    bridge link
  7. (可选)设置 STP (Spanning Tree Protocol) 为了防止网络环路,网桥默认会启用 STP,你可以手动关闭它(在无环路的单一路径环境中)。

    # 查看STP状态
    bridge link show br0
    # 关闭STP
    sudo ip link set dev br0 type bridge stp_state 0
    # 开启STP
    sudo ip link set dev br0 type bridge stp_state 1
  8. (可选)设置网桥的网关 br0 的 IP 地址需要作为网关,你需要添加默认路由。

    # 假设网关是 192.168.100.254
    sudo ip route add default via 192.168.100.254 dev br0
  9. 清理(删除所有配置)

    # 删除路由
    sudo ip route del default via 192.168.100.254 dev br0
    # 删除IP地址
    sudo ip addr del 192.168.100.1/24 dev br0
    # 将网卡从网桥移除
    sudo ip link set dev eth1 nomaster
    sudo ip link set dev eth2 nomaster
    # 关闭并删除网桥
    sudo ip link set dev br0 down
    sudo ip link del dev br0

持久化配置

使用 ip 命令做的修改是临时的,重启系统后会丢失,要让配置永久生效,你需要修改网络配置文件。

  • 对于使用 systemd-networkd 的系统 (如 Ubuntu 18.04+, Debian 10+, CentOS 8+): 你需要创建网桥和端口的 .netdev.network 文件,这是一个更现代和推荐的方式。

    • /etc/systemd/network/br0.netdev:

      [NetDev]
      Name=br0
      Kind=bridge
    • /etc/systemd/network/br0.network:

      [Match]
      Name=br0
      [Network]
      Address=192.168.100.1/24
      Gateway=192.168.100.254
      DNS=8.8.8.8
    • /etc/systemd/network/eth1.network (将 eth1 加入网桥):

      [Match]
      Name=eth1
      [Network]
      Bridge=br0
  • 对于使用 NetworkManager 的系统 (如 Fedora, Ubuntu Desktop, CentOS 7): 可以使用 nmtuinm-connection-editor 图形化工具,或者使用 nmcli 命令行工具来创建和管理网桥。

  • 对于使用 ifcfg 的传统系统 (如 CentOS 7 以下): 你需要创建和修改 /etc/sysconfig/network-scripts/ 目录下的文件,如 ifcfg-br0, ifcfg-eth1 等。

功能 iproute2 (推荐) brctl (旧版)
创建网桥 ip link add name br0 type bridge brctl addbr br0
删除网桥 ip link del dev br0 brctl delbr br0
添加端口 ip link set dev eth0 master br0 brctl addif br0 eth0
删除端口 ip link set dev eth0 nomaster brctl delif br0 eth0
查看网桥 ip link show type bridge brctl show
启用/禁用 ip link set dev br0 up/down (无直接命令,通过 ifconfig)

对于新的项目和系统管理,请务必优先使用 iproute2 套件中的 ip 命令,它是当前的事实标准,功能更强大且持续维护。

分享:
扫描分享到社交APP
上一篇
下一篇