Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

创建桥接网卡

环境:

  • 系统:AlmaLinux 9.7
  • 网卡:enp0s31f6
  • KVM:qemu-kvm 9.1.0

目标:

在物理网卡 enp0s31f6 的前提下,创建 br0,并且“不破坏、不掉线”物理主机当前网络

下面是「不中断网络」的标准做法,生产环境可直接用的方案。

一、核心原则(先记住这 4 条)

不破坏网络 = 不动 IP、不动网关、不动 DNS、不强制 down 网卡

正确模型:

enp0s31f6  (无 IP,仅 slave)
     └── br0  (继承原 enp0s31f6 的 IP / 网关 / DNS)

关键点:

  • ❌ enp0s31f6 不再配置 IP
  • ✅ br0 接管原有网络配置
  • ✅ 使用 NetworkManager 热切换(不中断)

二、开始前:记录当前网络配置(非常重要)

这是“保险步骤”,防止误操作

nmcli device show enp0s31f6
GENERAL.DEVICE:                         enp0s31f6
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         4C:ED:FB:6B:D7:F7
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     enp0s31f6
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.101.200/24
IP4.GATEWAY:                            192.168.101.1
IP4.ROUTE[1]:                           dst = 192.168.101.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.101.1, mt = 100
IP4.DNS[1]:                             223.5.5.5
IP4.DNS[2]:                             223.6.6.6
IP6.GATEWAY:                            --

重点记住:

  • IP4.ADDRESS
  • IP4.GATEWAY
  • IP4.DNS

三、不中断网络创建桥接(推荐做法)

整个过程不会断网

1️⃣ 创建 br0(先创建,不启用)

nmcli con add type bridge ifname br0 con-name br0

2️⃣ 将 enp0s31f6 加入 br0(作为 slave)

nmcli con add type ethernet ifname enp0s31f6 master br0 con-name br0-slave-enp0s31f6

⚠️ 注意:此时 enp0s31f6 仍然在线,不会断网

3️⃣ 把原 enp0s31f6 的网络配置迁移给 br0

用刚才记录的信息替换

nmcli con modify br0 \
    ipv4.method manual \
    ipv4.addresses 192.168.101.200/24 \
    ipv4.gateway 192.168.101.1 \
    ipv4.dns "223.5.5.5 223.6.6.6"

nmcli con modify br0 ipv6.method disabled

4️⃣ 禁用 enp0s31f6 的独立 IP(关键但安全)

nmcli con modify br0-slave-enp0s31f6 ipv4.method disabled
nmcli con modify br0-slave-enp0s31f6 ipv6.method disabled

5️⃣ 平滑切换(关键步骤,不会掉线)

nmcli con up br0
nmcli con up br0-slave-enp0s31f6

NetworkManager 会:

  • 把 IP 从 enp0s31f6 转移到 br0
  • 内核 bridge 热生效
  • 连接不中断

6️⃣ 删除原来的 enp0s31f6 独立连接(清理)

查看 connection

nmcli con show

删除 connection(只删 connection,不删设备):

nmcli con delete enp0s31f6

四、设置开机自动启动(必须)

nmcli con modify br0 connection.autoconnect yes
nmcli con modify br0-slave-enp0s31f6 connection.autoconnect yes

提高优先级:

nmcli con modify br0 connection.autoconnect-priority 10
nmcli con modify br0-slave-enp0s31f6 connection.autoconnect-priority 5

五、验证(一定要检查)

查看状态

nmcli device status

正确结果:

DEVICE     TYPE      STATE                   CONNECTION
br0        bridge    connected               br0
enp0s31f6  ethernet  connected               br0-slave-enp0s31f6

查看IP

ip addr
  • ✅ IP 在 br0
  • ✅ enp0s31f6 没有 IP

六、KVM / libvirt 使用方式(现在可以了)

用命令创建虚拟机时:

--network bridge=br0

在 Cockpit 中:

  • 进入指定的虚拟机控制台
  • 网络接口 -> 编辑
  • 接口类型: Bridge to LAN
  • 源: br0

七、常见失败原因(一定要避)

  • ❌ 直接 down enp0s31f6
  • ❌ 先删原连接再建 bridge
  • ❌ IP 同时存在 enp0s31f6 和 br0
  • ❌ 忘记设置 autoconnect
  • ❌ SSH 远程操作却没留回滚方案

八、紧急回滚(如果你手滑了)

nmcli con down br0
nmcli con up enp0s31f6

或重启 NM:

systemctl restart NetworkManager