在 Linux 下实现网络桥接(Network Bridging)可以将多个网络接口连接在一起,使它们像一个单一的广播域那样工作。这在虚拟化(如 KVM、QEMU)、容器网络或物理网络扩展中非常常见。以下是使用传统工具 brctl 和现代工具 ip 实现网络桥接的详细步骤和例子。
方法 1:使用 brctl 实现网络桥接brctl 是 bridge-utils 包中的工具,虽然逐渐被取代,但在许多系统中仍然可用。
步骤
安装 bridge-utils(如果未安装)
12sudo apt install bridge-utils # Debian/Ubuntusudo yum install bridge-utils # CentOS/RHEL
创建网桥
1sudo brctl addbr br0
br0 是网桥的名称,可以自定义。
将接口添加到网桥
12sudo brctl addif br0 eth0sudo brctl addif br0 eth1
这里将 eth0 和 eth1 添加到 br0,它们会共享同一个网络。
eth0 和 eth1 现在都连接到 br0,它们之间的流量可以通过网桥通信。
接口冲突:一个接口只能属于一个网桥。如果接口已属于其他网桥,需先移除(用 brctl delif)
启用网桥
1sudo ip link set br0 up
(可选)为网桥配置 IP如果需要网桥本身有 IP 地址:
12sudo ip addr add 192.168.1.10/24 dev br0sudo ip route add default via 192.168.1.1 dev br0
接口状态:添加接口(eth0/eth1)到网桥后,接口的 IP 地址会失效,因为网桥接管了流量。如果需要 IP,建议为网桥本身配置 IP
检查桥接状态1brctl show
输出示例:bridge name bridge id STP enabled interfacesbr0 8000.00163e123456 no eth0 eth1
注意
添加到网桥的接口(如 eth0)会失去独立性,其原有 IP 配置会失效。
如果需要启用 STP(生成树协议)防止环路:1sudo brctl stp br0 on
方法 2:使用 ip 命令实现网络桥接ip 命令是现代 Linux 推荐的方式,功能更强大,集成在 iproute2 工具集中。
步骤
创建网桥
1sudo ip link add name br0 type bridge
将接口绑定到网桥
12sudo ip link set eth0 master br0sudo ip link set eth1 master br0
启用网桥和接口
123sudo ip link set eth0 upsudo ip link set eth1 upsudo ip link set br0 up
(可选)为网桥配置 IP
12sudo ip addr add 192.168.1.10/24 dev br0sudo ip route add default via 192.168.1.1 dev br0
检查桥接状态
12ip link show type bridgebridge link show
输出示例:3: br0:
应用场景示例:桥接物理接口和虚拟接口假设你想桥接物理接口 eth0 和虚拟接口 tap0(常用于虚拟机):
使用 ip 命令
创建 TAP 接口(需要 tunctl 或手动创建):
1sudo ip tuntap add mode tap name tap0
创建并配置网桥:
123456sudo ip link add name br0 type bridgesudo ip link set eth0 master br0sudo ip link set tap0 master br0sudo ip link set eth0 upsudo ip link set tap0 upsudo ip link set br0 up
配置 IP(可选):
1234567sudo ip addr add 192.168.1.10/24 dev br0sudo ip addr add 192.168.100.100/24 dev eth0sudo ip addr add 192.168.100.200/24 dev eth0ip link set eth0 up/down
结果
eth0(物理网络)和 tap0(虚拟机)通过 br0 桥接,虚拟机可以直接访问外部网络。
永久配置网络桥接临时配置在重启后会丢失,需写入配置文件。以下以 Ubuntu(Netplan)为例:
编辑 /etc/netplan/01-netcfg.yaml1234567891011121314network: version: 2 ethernets: eth0: dhcp4: no eth1: dhcp4: no bridges: br0: interfaces: [eth0, eth1] addresses: [192.168.1.10/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8]
应用配置1sudo netplan apply
常见问题
桥接后无法访问网络?
确保网桥和接口都启用(up 状态)。
检查是否存在默认路由(ip route)。
如果使用 DHCP,需为网桥启用 DHCP:1sudo dhclient br0
无线接口(如 wlan0)桥接失败?
无线接口桥接通常需要额外配置(例如主机模式或 4addr 模式),建议使用 hostapd。