PVE 中安装 openwrt 虚拟机

我的网络拓扑图在布置完之后是这样的,非常简单:

光猫 → AC86U → openwrt in PVE → AP / Switch / PC / vm in PVE

介绍一下我的网络环境和这样布置的理由:

  1. AC86U: 由于我有公网,并且我的光猫不支持端口转发,就需要在路由器拨号,光猫设置桥接。
  2. 为了避免所有虚拟机都在 PVE 中造成 All in boom,我拿出了退休已久的 AC86U 用来拨号和端口转发,性能足够跑满千兆宽带了,重活都交给 PVE 上的 openwrt 来做(比如 openclash)。
  3. openwrt 的 lan (出网口) 桥接到物理网口,这样可以下级设备和 PVE 上的其他虚拟机都可以用此物理网口

我的 PVE 主机是双网口的,我先将其中一个网口和 AC86U (192.168.2.1) 连接,另外一个网口先不连网线。

下载 PVE 镜像 安装,安装完后 PVE 宿主机的管理界面为 https://192.168.2.8:8006

PVE 中新建网卡桥接

在 PVE 的网络管理界面可以看到第一个插入的网络接口名为 enp6s0, 并且已经帮我建好了桥接 vmbr0, 我新建了一个 Linux bridge 桥接到刚才没插网线的 enp5s0, 名字叫 vmbr1, 点击 Apply Configuration 即可生效。

配置 openwrt 虚拟机

配置磁盘

我们新建 openwrt 虚拟机时先不选择系统镜像, 建完后在 Hardware 界面并删掉磁盘,在宿主机上用 qm importdisk 100 /var/lib/vz/template/iso/openwrt-x86-64-generic-ext4-combined-efi.img local-lvm 命令来导入 openwrt 镜像,然后在 Hardware 界面编辑一下磁盘选为 SATA, 然后
在 Options 界面 Boot order 里只勾选 SATA。

配置网络

然后在 Hardware 界面添加 Network device vmbr1, 此时我们的 openwrt 有两个网口, 因为vmbr0 桥接的物理网卡连了上级路由 AC86U, 所以用 vmbr0 来做 wan, vmbr1 用来做 lan.

点击启动后, 通过 /etc/config/networkip a 查看 mac 地址, 发现 lan 和 wan 和我们预想的是相反的,我们需要将他们对调一下


此时无法访问 opewnrt 的 luci 界面, 通过 PVE 在 openwrt 的 busybox shell 里手动设置一下 IP 就可以在 AC86U 的网络中访问了

1
ifconfig br-lan 192.168.2.122

打开 http://192.168.2.122

  1. 在 Network → Interfaces → Interfaces: WAN 点击 Edit 将 eth1 改为 eth0 并保存
  2. 在 Network → Interfaces → Devices: br-lan 点击 Configure 将 eth0 改为 eth1 并保存
  3. 保存并应用

在 openwrt shell 里用 reboot 重启后即可正常使用

使用
  1. 通过网线连接 lan 口即可从 openwrt 获取网络.
  2. 想要在 PVE 虚拟机中使用 openwrt 的 lan 口, 只需在对应虚拟机的设置里将网卡改为 lan 口对应的桥接网卡 vmbr1

转发 openwrt luci

openwrt 默认不允许 wan 口访问, 如果想从 wan 口访问 openwrt, 转发 80 或者 22 到 wan 即可

20220903 edit:

我已经不使用 AC86U 了,现在将 PVE 的管理口改为了 lan 口。如果要修改 PVE 管理口的 IP 或者绑定的网口,修改 vmbr0 即可。