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