跳转到内容

PVE 单网口安装 OpenWrt:旁路网关与内部 LAN 实验

你能在只有一块物理网卡的 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 的交换机,双网口拓扑更简单;本页不覆盖那种情况。

OpenWrt 只用一个 vNIC 接 vmbr0,LAN 地址设为 192.168.50.3/24,关闭 DHCP。客户端把 DNS(或网关)手动指向它;它再经 192.168.50.1 出网。

物理口PVE bridge虚拟网卡OpenWrt 接口职责
nic0vmbr0net0lan 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 接口职责
nic0vmbr0net0wan DHCP上游 192.168.50.1
—vmbr1net1lan 192.168.1.1内部测试客户端

这条路径能验证路由、NAT、DHCP、DNS 和“关掉路由 VM 后宿主机仍可管理”,又不会影响家里的物理 LAN。

路由器 Shell记录宿主机网络和 VM 配置
终端窗口
ip -br link
ip -br addr
cat /etc/network/interfaces
bridge link
qm list
pvesm status

把 vmbr0 的地址、网关、物理口和当前 VM 列表记下来。单网口机器上,vmbr0 就是你唯一的管理入口,改错会直接失联。

预期出问题时你能凭记录恢复 vmbr0。

路由器 Shell准备控制台和镜像

优先用显示器/键盘、IPMI 或云厂商 VNC,不要只依赖 SSH。然后把 OpenWrt x86_64 镜像下载到 PVE:

终端窗口
cd /var/lib/vz/template/iso
wget https://downloads.openwrt.org/releases/25.12.6/targets/x86/64/openwrt-25.12.6-x86-64-generic-ext4-combined.img.gz
wget https://downloads.openwrt.org/releases/25.12.6/targets/x86/64/sha256sums
sha256sum -c sha256sums --ignore-missing
gzip -d openwrt-25.12.6-x86-64-generic-ext4-combined.img.gz

校验失败就不要继续。镜像名/版本以 downloads.openwrt.org 当前页面为准。

预期即使 SSH 断了,你还能进 PVE 控制台。

路由器 Shell创建内部 bridge vmbr1(仅实验 B)

先做临时 bridge,验证可行后再写入 /etc/network/interfaces:

终端窗口
ip link add name vmbr1 type bridge
ip link set vmbr1 up
ip -br link show vmbr1
ip -br addr show vmbr0

vmbr1 不接物理口,所以不会把 DHCP 泄漏到家里 LAN。不要在 vmbr0 上开 DHCP。

预期vmbr1 存在且 UP,vmbr0 的地址没有变化。

路由器 Shell创建 OpenWrt VM 200
终端窗口
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 socket
qm importdisk 200 /var/lib/vz/template/iso/openwrt-25.12.6-x86-64-generic-ext4-combined.img local-lvm
qm set 200 --scsi0 local-lvm:vm-200-disk-0
qm set 200 --boot order=scsi0
qm start 200

local-lvm 以 pvesm status 为准;如果存储名不同,替换成你的存储。qm importdisk 后磁盘名可能是 vm-200-disk-0,以命令输出为准。

预期VM 200 有 scsi0 启动盘、net0/net1 两个网卡。

路由器 Shell进 OpenWrt 控制台确认网卡顺序
终端窗口
qm terminal 200

如果串口没有输出,用 PVE 的 VNC 控制台。进去后:

终端窗口
ip link show
ip addr show
uci show network

OpenWrt x86 镜像的 eth0/eth1 顺序不一定等于 net0/net1;以 MAC/链路和 uci show network 为准。不要直接把 eth0 当 WAN。本实验环境中 net0=eth0=WAN、net1=eth1=LAN,但换环境仍需核对。

预期你能分清哪个是 WAN、哪个是 LAN,不靠猜。

路由器 Shell配置 WAN/LAN,关闭 WAN 上的 DHCP

在 OpenWrt 控制台里按实际接口名配置。示例(把 eth0/eth1 换成你确认过的名字):

终端窗口
uci set network.wan=interface
uci set network.wan.proto='dhcp'
uci set network.wan.device='eth0'
uci set network.lan=interface
uci 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=dhcp
uci set dhcp.wan.interface='wan'
uci set dhcp.wan.ignore='1'
uci commit network
uci 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 route
ping 192.168.1.1
ping 192.168.50.1
nslookup openwrt.org

如果客户端拿不到地址,先查 OpenWrt 的 dhcp.lan 和 dnsmasq,不要先去改 PVE 的 vmbr0。

预期客户端能到 192.168.1.1、能出网、能解析域名。

Proxmox VE 虚拟机控制台里 OpenWrt 25.12.6 的 root shell 和 apk 提示
OpenWrt 25.12.6 在 PVE 虚拟机控制台启动后的 root shell。截图来自临时截图 VM;网卡名、网段和磁盘参数以你的 PVE 拓扑为准。
  • 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 恢复。

不要继续改网络。用显示器/键盘、IPMI 或云控制台进 PVE,检查:

终端窗口
ip -br addr show vmbr0
cat /etc/network/interfaces
bridge link

如果刚改过 /etc/network/interfaces,恢复备份并重载:

终端窗口
cp /etc/network/interfaces.bak.YYYY-MM-DD /etc/network/interfaces
ifreload -a

如果只是临时 vmbr1 导致问题,先确认没有别的 VM 在用它:

终端窗口
grep -R "vmbr1" /etc/pve/qemu-server

没有输出时再删除:

终端窗口
ip link set vmbr1 down
ip link del vmbr1
终端窗口
qm config 200
qm terminal 200

在 OpenWrt 里查 ip link show、uci show network、logread。确认 net0 在 vmbr0,且 vmbr0 的物理口 nic0 是 UP;不要在 vmbr0 上再建一个 DHCP 服务器。

先看 OpenWrt 的 dhcp.lan 是否启用、dnsmasq 是否运行;再看测试 VM 是否真的接在 vmbr1。不要为了“让客户端上网”去改 vmbr0 的地址或网关。

这是本页的恢复验收项:在 qm stop 200 后,从另一台机器访问 https://192.168.50.2:8006 和 SSH。若不能,说明你把宿主机管理路径建在了依赖 OpenWrt 的链路上,先修管理路径,再继续。

  • 环境: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;LAN eth1 为 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 交换机时另写一篇。

来源

Router.Homes

独立的 OpenWrt 实操笔记。每页写明固件、设备、包管理器与恢复路径。

图标:Solar by 480 Design, CC BY 4.0