跳转到内容

Linux Bridge 是什么,vmbr0 为什么长这样 ​

装完 PVE,节点 → System → Network 里有两个东西:一块物理网卡(名字像 enp3s0),和一个叫 vmbr0 的网桥。物理网卡上没有 IP,IP 在 vmbr0 上。这篇解释为什么。

网桥就是一台虚拟交换机 ​

把 vmbr0 想象成机箱里的一台交换机:

text
        物理网络(你家的路由器)
                 │
            enp3s0(物理网卡 = 交换机的上联口)
                 │
        ┌────────┴────────┐
        │      vmbr0      │   ← 虚拟交换机
        └─┬─────┬─────┬───┘
          │     │     │
       宿主机  VM100  CT101
       的 IP   的网卡  的网卡

物理网卡是这台虚拟交换机的上联口,所有客户机的虚拟网卡插在它的其他口上,宿主机自己也在上面占一个口(这就是 IP 在 vmbr0 上的原因)。

这样做的结果是:客户机和宿主机、和你家路由器下的其他设备在同一个二层网络里。客户机可以从路由器拿 DHCP 地址,你可以从手机直接访问客户机的服务。这种模式叫桥接,是 PVE 的默认,也是绝大多数场景想要的。

读懂配置文件 ​

网络配置的唯一真相在 /etc/network/interfaces:

sh
cat /etc/network/interfaces

典型内容:

text
auto lo
iface lo inet loopback

iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.1.10/24
        gateway 192.168.1.1
        bridge-ports enp3s0
        bridge-stp off
        bridge-fd 0

逐行看:

行含义
iface enp3s0 inet manual物理网卡启用,但不配 IP——它只负责把包送进网桥
auto vmbr0开机自动启用这个接口
address 192.168.1.10/24宿主机的管理 IP
bridge-ports enp3s0这个网桥的上联口是哪块物理网卡
bridge-stp off关闭生成树协议,家庭环境不需要
bridge-fd 0转发延迟为 0,接口起来后立即转发

网卡名字为什么这么怪

enp3s0 是 systemd 的「可预测网卡命名」:en = ethernet,p3 = PCI 总线 3,s0 = 插槽 0。它的好处是不会因为插拔顺序变化而改变,不像老式的 eth0。换了主板或网卡,这个名字会变,届时需要同步改配置文件。

客户机怎么接上来 ​

创建虚拟机或容器时,网络那一步要选 Bridge,默认就是 vmbr0。

虚拟机的网卡配置里还有几项值得知道:

选项说明
Model建议 VirtIO (paravirtualized),性能最好,但客户机要有驱动。Windows 需要装 VirtIO 驱动
Bridge接到哪个网桥
VLAN Tag留空即可,除非你在做 VLAN
FirewallPVE 防火墙开关,见下文
MAC address自动生成。不要手动设成和别的设备相同的值

Model 选 VirtIO 还是 E1000

装系统时如果客户机认不到 VirtIO 网卡(老系统、某些安装器),可以临时用 E1000 或 Realtek 把系统装好,装完驱动再换回 VirtIO。E1000 是模拟真实硬件,兼容性好但 CPU 开销明显更高。

防火墙的三层开关 ​

PVE 的防火墙有点绕:它有三个层级的开关,而且是与的关系——任何一层关着,规则就不生效。

层级位置作用
数据中心数据中心 → 防火墙 → 选项总开关
节点节点 → 防火墙 → 选项保护宿主机自己
客户机虚拟机/容器 → 防火墙 → 选项,以及网卡上的 Firewall 勾选框保护单个客户机

开总开关之前先想清楚

数据中心级防火墙的默认入站策略是 DROP。如果你没有先放行 8006(Web UI)和 22(SSH)就打开它,会把自己关在门外。

PVE 默认会为管理接口保留必要的放行规则,但不同版本行为可能不同。稳妥做法:先在节点级别配好放行规则,确认规则列表无误,并且确保你有物理控制台可用,再打开总开关。

家庭内网环境里,多数人不开 PVE 防火墙,靠路由器隔离。这是可以接受的取舍,前提是你的内网确实可信。

其他网络模式 ​

桥接不是唯一选择,但另外两种用得少:

  • NAT:客户机在一个内部网段,通过宿主机做地址转换出去。外面主动访问不到客户机。适合不想让客户机占用内网 IP 的场景,需要手动配置。
  • Routed:宿主机做路由。ISP 只给一个 MAC 地址的托管环境会用到,家庭环境基本不用。

PVE 还有 SDN(软件定义网络)功能,能做更复杂的拓扑,属于网络进阶的内容。

检查结果 ​

sh
# 1. 网桥存在且有 IP
ip -4 addr show vmbr0

# 2. 网桥上挂了哪些接口(包括客户机的 tap/veth)
bridge link show

# 3. 网关通
ping -c 3 192.168.1.1

# 4. DNS 能解析
ping -c 3 download.proxmox.com

开一台客户机,在里面确认能拿到和宿主机同网段的 IP、能 ping 通网关,桥接就工作正常。

常见问题 ​

客户机拿不到 IP。 依次查:网卡是否接在 vmbr0 上 → 客户机里网卡是否 up → bridge link show 里有没有这个客户机的接口 → 客户机网卡 Model 是否为客户机系统所支持。

客户机之间能通,但出不去。 检查 bridge-ports 里的物理网卡名是否正确,以及网线是否插在那块网卡上(多网口机器容易插错)。

改了网卡 Model 之后客户机网络没了。 Linux 客户机可能把新网卡认成 eth1 而配置还在 eth0 上。进客户机用 ip a 看实际网卡名。

延伸阅读 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。