PVE 单网口安装 OpenWrt:旁路网关与内部 LAN 实验
完成后你能确认什么
Section titled “完成后你能确认什么”你能在只有一块物理网卡的 PVE 上选对拓扑:
- 不把 PVE 宿主机管理地址改掉;
- 不把 DHCP 服务器误开到
vmbr0; - 用旁路 DNS/网关或 PVE 内部 LAN 实验跑起 OpenWrt;
- 路由 VM 关掉后,仍能通过宿主机控制台恢复。
- Proxmox VE 8.x/9.x,单物理网口,
vmbr0承载宿主机管理地址和上游网关。 - 本页按 PVE 9.2.2、单 Realtek RTL8111、
vmbr0 192.168.50.2/24、网关192.168.50.1编写。 - 单网口不能同时物理分离 WAN/LAN。不要照搬双网口教程里的
enp1s0/enp2s0;要么做旁路,要么用 PVE 内部 bridge 做实验。 - 如果你有第二块网卡或可 VLAN 的交换机,双网口拓扑更简单;本页不覆盖那种情况。
A. 旁路 DNS/网关(改动最小)
Section titled “A. 旁路 DNS/网关(改动最小)”OpenWrt 只用一个 vNIC 接 vmbr0,LAN 地址设为 192.168.50.3/24,关闭 DHCP。客户端把 DNS(或网关)手动指向它;它再经 192.168.50.1 出网。
| 物理口 | PVE bridge | 虚拟网卡 | OpenWrt 接口 | 职责 |
|---|---|---|---|---|
| nic0 | vmbr0 | net0 | lan 192.168.50.3 | 旁路 DNS/网关 |
适合先验证 DNS、AdGuard Home、OpenClash 的 DNS/规则;不改变主路由 DHCP。
B. PVE 内部 LAN 实验(推荐做路由验证)
Section titled “B. PVE 内部 LAN 实验(推荐做路由验证)”OpenWrt 用两个 vNIC:net0 接 vmbr0 做 WAN(DHCP),net1 接 vmbr1 做 LAN(192.168.1.1/24)。vmbr1 不接任何物理口,只给测试客户端 VM 用。
| 物理口 | PVE bridge | 虚拟网卡 | OpenWrt 接口 | 职责 |
|---|---|---|---|---|
| nic0 | vmbr0 | net0 | wan DHCP | 上游 192.168.50.1 |
| — | vmbr1 | net1 | lan 192.168.1.1 | 内部测试客户端 |
这条路径能验证路由、NAT、DHCP、DNS 和“关掉路由 VM 后宿主机仍可管理”,又不会影响家里的物理 LAN。
ip -br linkip -br addrcat /etc/network/interfacesbridge linkqm listpvesm status把 vmbr0 的地址、网关、物理口和当前 VM 列表记下来。单网口机器上,vmbr0 就是你唯一的管理入口,改错会直接失联。
预期出问题时你能凭记录恢复 vmbr0。
优先用显示器/键盘、IPMI 或云厂商 VNC,不要只依赖 SSH。然后把 OpenWrt x86_64 镜像下载到 PVE:
cd /var/lib/vz/template/isowget https://downloads.openwrt.org/releases/25.12.6/targets/x86/64/openwrt-25.12.6-x86-64-generic-ext4-combined.img.gzwget https://downloads.openwrt.org/releases/25.12.6/targets/x86/64/sha256sumssha256sum -c sha256sums --ignore-missinggzip -d openwrt-25.12.6-x86-64-generic-ext4-combined.img.gz校验失败就不要继续。镜像名/版本以 downloads.openwrt.org 当前页面为准。
预期即使 SSH 断了,你还能进 PVE 控制台。
先做临时 bridge,验证可行后再写入 /etc/network/interfaces:
ip link add name vmbr1 type bridgeip link set vmbr1 upip -br link show vmbr1ip -br addr show vmbr0vmbr1 不接物理口,所以不会把 DHCP 泄漏到家里 LAN。不要在 vmbr0 上开 DHCP。
预期vmbr1 存在且 UP,vmbr0 的地址没有变化。
qm create 200 --name openwrt-lab --memory 512 --cores 2 --ostype l26 \ --scsihw virtio-scsi-pci \ --net0 virtio,bridge=vmbr0 \ --net1 virtio,bridge=vmbr1 \ --serial0 socketqm importdisk 200 /var/lib/vz/template/iso/openwrt-25.12.6-x86-64-generic-ext4-combined.img local-lvmqm set 200 --scsi0 local-lvm:vm-200-disk-0qm set 200 --boot order=scsi0qm start 200local-lvm 以 pvesm status 为准;如果存储名不同,替换成你的存储。qm importdisk 后磁盘名可能是 vm-200-disk-0,以命令输出为准。
预期VM 200 有 scsi0 启动盘、net0/net1 两个网卡。
qm terminal 200如果串口没有输出,用 PVE 的 VNC 控制台。进去后:
ip link showip addr showuci show networkOpenWrt x86 镜像的 eth0/eth1 顺序不一定等于 net0/net1;以 MAC/链路和 uci show network 为准。不要直接把 eth0 当 WAN。本实验环境中 net0=eth0=WAN、net1=eth1=LAN,但换环境仍需核对。
预期你能分清哪个是 WAN、哪个是 LAN,不靠猜。
在 OpenWrt 控制台里按实际接口名配置。示例(把 eth0/eth1 换成你确认过的名字):
uci set network.wan=interfaceuci set network.wan.proto='dhcp'uci set network.wan.device='eth0'uci set network.lan=interfaceuci set network.lan.proto='static'uci set network.lan.device='eth1'uci set network.lan.ipaddr='192.168.1.1'uci set network.lan.netmask='255.255.255.0'uci set dhcp.wan=dhcpuci set dhcp.wan.interface='wan'uci set dhcp.wan.ignore='1'uci commit networkuci commit dhcp/etc/init.d/network reload确认 dhcp.wan.ignore='1',否则 OpenWrt 可能在上游 vmbr0 上开 DHCP,影响家里网络。
预期WAN 从 192.168.50.1 拿到地址;LAN 是 192.168.1.1;vmbr0 上没有 DHCP。
在 vmbr1 上建一台测试 VM(或把测试 VM 的网卡接到 vmbr1),让它从 OpenWrt 的 LAN DHCP 拿地址。然后:
ip routeping 192.168.1.1ping 192.168.50.1nslookup openwrt.org如果客户端拿不到地址,先查 OpenWrt 的 dhcp.lan 和 dnsmasq,不要先去改 PVE 的 vmbr0。
预期客户端能到 192.168.1.1、能出网、能解析域名。

qm status 200为 running;qm config 200里net0在vmbr0、net1在vmbr1。- OpenWrt 里
ip addr show:WAN 有192.168.50.x,LAN 是192.168.1.1/24。 - 测试客户端:默认网关是
192.168.1.1,能ping 192.168.50.1,能解析openwrt.org。 - 宿主机:
ssh [email protected]仍然可用;PVE Web UI 仍然可开。 - 关掉路由 VM:
qm stop 200,宿主机管理入口仍在;再qm start 200恢复。
失败分支与恢复
Section titled “失败分支与恢复”宿主机 SSH 失联
Section titled “宿主机 SSH 失联”不要继续改网络。用显示器/键盘、IPMI 或云控制台进 PVE,检查:
ip -br addr show vmbr0cat /etc/network/interfacesbridge link如果刚改过 /etc/network/interfaces,恢复备份并重载:
cp /etc/network/interfaces.bak.YYYY-MM-DD /etc/network/interfacesifreload -a如果只是临时 vmbr1 导致问题,先确认没有别的 VM 在用它:
grep -R "vmbr1" /etc/pve/qemu-server没有输出时再删除:
ip link set vmbr1 downip link del vmbr1OpenWrt 没有 WAN 地址
Section titled “OpenWrt 没有 WAN 地址”qm config 200qm terminal 200在 OpenWrt 里查 ip link show、uci show network、logread。确认 net0 在 vmbr0,且 vmbr0 的物理口 nic0 是 UP;不要在 vmbr0 上再建一个 DHCP 服务器。
客户端拿不到 192.168.1.x
Section titled “客户端拿不到 192.168.1.x”先看 OpenWrt 的 dhcp.lan 是否启用、dnsmasq 是否运行;再看测试 VM 是否真的接在 vmbr1。不要为了“让客户端上网”去改 vmbr0 的地址或网关。
路由 VM 关掉后宿主机还能进吗
Section titled “路由 VM 关掉后宿主机还能进吗”这是本页的恢复验收项:在 qm stop 200 后,从另一台机器访问 https://192.168.50.2:8006 和 SSH。若不能,说明你把宿主机管理路径建在了依赖 OpenWrt 的链路上,先修管理路径,再继续。
E2 实测记录(2026-10-20)
Section titled “E2 实测记录(2026-10-20)”- 环境:PVE 9.2.2,单 Realtek RTL8111,
vmbr0 192.168.50.2/24;OpenWrt 25.12.6 x86_64 VM 200,512MB/2 vCPU。 - OpenWrt WAN
eth0从192.168.50.1通过 DHCP 获得192.168.50.77;LANeth1为192.168.1.1/24。 vmbr1内部 LAN 上的 netns 客户端通过 DHCP 获得192.168.1.191,默认路由192.168.1.1,DNS 解析openwrt.org,HTTP 返回 200。qm stop 200后,从另一条 SSH 连接仍能登录 PVE,vmbr0仍是192.168.50.2/24。- 未测:物理 LAN 客户端、双网口、长期稳定性、PPPoE/IPv6 上游;这些不属于本次 E2 结论。
- 本页已在 PVE 9.2.2 单网口环境完成 E2 实验,不是纯 E1 草稿;但未做独立复核,也未在真实物理 LAN 上验证。
- 复现配方:
tests/recipes/pve-single-nic-25.12.md。步骤、镜像 SHA-256、qm config 200和客户端结果已记录。 - 单网口不等于双网口:不要在本页基础上直接写“WAN/LAN 物理分离”;需要第二块网卡或 VLAN 交换机时另写一篇。