虚拟机桥接需创建宿主机网桥br0并绑定物理网卡,清空其IP后为br0配置同网段地址,虚拟机设为桥接br0并配同网段IP,确保STP、offload等细节正确方可实现高性能直连。

一、创建前必须确认的三项基础
避免后续网络中断或通信异常:
-
确认物理网卡名称与状态:运行
ip -br link show,找状态为UP的有线接口(如enp1s0、ens33),排除lo、wlan0或已禁用接口; -
关闭 NetworkManager 对该物理网卡的接管(尤其桌面环境):执行
sudo nmcli dev set enp1s0 managed no,否则它可能抢回 IP 或重置 master 关系; -
确保 bridge 内核模块已加载:运行
lsmod | grep ^bridge,无输出则执行sudo modprobe bridge;
二、用 ip link 创建高性能桥接(推荐,兼容性好、语义清晰)
这是当前主流做法,所有步骤均可脚本化,且能精确控制端口行为:
- 创建桥设备并启用:
sudo ip link add name br0 type bridge && sudo ip link set br0 up; - 将物理网卡设为桥从属,并立即启用:
sudo ip link set enp1s0 master br0 && sudo ip link set enp1s0 up; - 清空物理网卡原有 IP(防止地址冲突):
sudo ip addr flush dev enp1s0; - 给桥分配 IP(静态或 DHCP):
sudo ip addr add 192.168.1.100/24 dev br0或sudo dhclient br0; - 启用 STP 防环(生产环境建议开启):
sudo ip link set dev br0 address 02:00:00:xx:xx:xx(可选设 MAC),再执行sudo ip link set dev br0 type bridge stp_state 1;
注:ip link 方式默认不启用 STP,需显式设置;若确定单路径拓扑(如仅连一台交换机),可关 STP 减少 2–4 秒收敛延迟:sudo ip link set dev br0 type bridge stp_state 0。
三、用 brctl 创建(适合调试或旧系统兼容)
需先安装 bridge-utils(sudo apt install bridge-utils 或 yum install bridge-utils):
- 新建桥:
sudo brctl addbr br0; - 添加物理端口:
sudo brctl addif br0 enp1s0; - 启用桥接口:
sudo ip link set br0 up(brctl 本身不启 link,必须用 ip); - 清空物理网卡 IP:
sudo ip addr flush dev enp1s0; - 配桥地址并启用端口:
sudo ip addr add 192.168.1.100/24 dev br0 && sudo ip link set enp1s0 up; - 启用 STP:
sudo brctl stp br0 on;设老化时间(如 100 秒):sudo brctl setageing br0 100;
四、虚拟机侧对接要点(KVM/libvirt/virt-manager)
桥建好后,虚拟机才能真正“插”进去:
- 在 virt-manager 中新建虚拟机时,网络选择 “Bridge to LAN”,桥接设备填
br0; - 若修改已有虚拟机,编辑 XML,在
<interface type='bridge'>下确保:<source bridge='br0'/>,且<model type='virtio'/>(提升 I/O 性能); - 虚拟机内部需配置同网段 IP(如
192.168.1.101/24),网关指向宿主机桥 IP(192.168.1.100)或真实网关(若 br0 使用 DHCP 获取网关); - 验证通路:宿主机 ping 虚拟机、虚拟机 ping 宿主机、虚拟机 ping 同网段物理机、curl 外网——四项全通才算桥接成功。
五、性能增强与排错关键点
所谓“高性能”,不只是带宽,更是低延迟、高并发和稳定转发:
-
关闭物理网卡 offload 特性(常被忽略):
sudo ethtool -K enp1s0 gro off gso off tso off,避免与桥转发逻辑冲突导致丢包; -
检查桥端口状态:用
bridge link看state FORWARDING是否正常,非此状态说明 STP 阻塞或链路未通; -
避免多桥混用同一物理口:一个物理网卡只能属于一个桥,否则
master冲突导致接口失联; - 重启后失效?→ 临时桥需写入启动脚本或改用 netplan/nmcli 持久化;Ubuntu/Debian 推荐 netplan,RHEL/CentOS 推荐 ifcfg 或 nmcli。


















