9. 使用OpenWrt作为网关
在购入 T68M 做软路由后(莱因特T68M软路由),网络和存储从 PVE 分离出,这样就不用担心 PVE 关机或者故障导致家庭网络崩溃。
有了外部软路由后,就可以继续模仿云上 VPC 的结构,可以利用网桥创建多个子网,为虚拟机和容器配置双网卡,以及测试一些跨子网的应用场景。
这里使用 OpenWrt 接入网桥作为子网网关,同时它也是一个路由器,于是网络结构变更如下:
flowchart LR
M[光猫<br>192.168.1.1/24]
subgraph iStoreOS
IWAN[WAN<br>192.168.1.3/24]
ILAN[LAN<br>192.168.123.1/24]
end
subgraph Proxmox
eth0[eth0<br>192.168.1.2/24]
vmbr0[vmbr0<br>192.168.123.2/24]
vmbr1[vmbr1]
subgraph OpenWrt
OWAN[WAN<br>192.168.123.x/24]
OLAN[LAN<br>172.31.255.1/24]
end
subgraph 虚拟机
KWAN[eth0<br>192.168.123.x/24]
KLAN[eth1<br>172.31.255.x/24]
end
subgraph 容器
LWAN[eth0<br>172.31.255.x/24]
end
end
IWAN ---> M
eth0 ---> M
vmbr0 ---> ILAN
OWAN ---> vmbr0
vmbr1 ---> OLAN
KWAN ---> vmbr0
KLAN ---> vmbr1
LWAN ---> vmbr1
classDef myClass fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff
class openwrt,虚拟机,容器 myClass
下面使用两种方式在 PVE 上创建 OpenWrt:KVM 虚拟机和 LXC 容器。
首先下载虚拟机镜像,访问 https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/ 查看镜像列表,这里选择下载非 UEFI 启动的镜像压缩包,如下:
wget -c https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-23.05.5-x86-64-generic-ext4-combined.img.gz
gunzip openwrt-23.05.5-x86-64-generic-ext4-combined.img.gz
解压得到 img 文件 openwrt-23.05.5-x86-64-generic-ext4-combined.img。
然后创建一个不带硬盘的虚拟机,并添加 eth0 网卡接入 vmbr0,eth1 网卡接入 vmbr1,如下:

这里虚拟机的 ID 为 104,下面为它导入磁盘文件:
➜ ~ qm disk import 104 /root/openwrt-23.05.5-x86-64-generic-ext4-combined.img intel
importing disk '/root/openwrt-23.05.5-x86-64-generic-ext4-combined.img' to VM 104 ...
Formatting '/mnt/intel/images/104/vm-104-disk-0.raw', fmt=raw size=126353408 preallocation=off
transferred 0.0 B of 120.5 MiB (0.00%)
...
transferred 120.5 MiB of 120.5 MiB (100.00%)
transferred 120.5 MiB of 120.5 MiB (100.00%)
Successfully imported disk as 'unused0:intel:104/vm-104-disk-0.raw'
然后将该磁盘挂载到 SCSI 总线,并设置为可引导:


开机后即可通过终端登录到系统内,此时 eth0 会默认使用 DHCP 获取到 WAN 地址,我们稍后再做配置。
OpenWrt 的 LXC 容器镜像可以在 linuxcontainers 网站上下载,访问 https://images.linuxcontainers.org/images/openwrt/23.05/amd64/default/ 获取最新日期的根目录文件压缩包,我们下载 root.tar.xz 即可,如下:
wget -c https://images.linuxcontainers.org/images/openwrt/23.05/amd64/default/20241031_11%3A57/rootfs.tar.xz
然后使用 pct 命令手动创建一个 LXC 容器,如下:
pct create 1149 /root/root.tar.xz --arch amd64 --hostname vmbr1 --rootfs intel:1 --memory 1024 --swap 0 --cores 1 --ostype unmanaged --unprivileged 1
创建成功后在控制台上可以看到对应的 LXC 容器,我们再为它手动添加两个网卡,分别接入 vmbr0 与 vmbr1:


启动容器后即可登录控制台修改配置。
我们的预期如下:
- eth0 设备绑定静态 IPv4 地址,并通过 DHCPv6 获取 IPv6 地址,充当公网网卡,日常维护直接访问 eth0 的 IP 即可
- eth1 按需配置子网网段和网关 IP,接入子网的设备都可以分配到内网地址
- eth0 和 eth1 开启 IPv6 中继,直接从上级网关(iStoreOS)获取 IPv6 地址
首先通过 PVE 控制台登录 OpenWrt,配置网络与防火墙,如下:
root@vmbr1:~# cat /etc/config/network
config interface 'loopback'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
option device 'lo'
config interface 'wan'
option proto 'static'
option device 'eth0'
option ipaddr '192.168.123.149'
option netmask '255.255.255.0'
option gateway '192.168.123.1'
option broadcast '192.168.123.255'
config interface 'wan6'
option proto 'dhcpv6'
option device 'eth0'
option reqaddress 'try'
option reqprefix 'auto'
config device
option type 'bridge'
option name 'lan'
list ports 'eht1'
config interface 'lan'
option proto 'static'
option device 'lan'
option ipaddr '172.31.255.1'
option netmask '255.255.255.0'
上述配置文件做了以下修改:
- 设置两个接口 wan 和 wan6 使用 eth0 设备,wan 配置静态 IPv4 地址,wan6 配置通过 DHCPv6 获取 IPv6 地址
- 使用 eth1 网卡创建了一个网桥设备 lan,然后再创建一个 lan 接口使用 lan 网桥
执行 service network restart 可以应用修改。
接下来需要修改防火墙,这里使用 uci 命令配置防火墙,允许 wan 入向请求,这样我们就可以访问 wan 的 IPv4 地址在网页上配置 OpenWrt,如下:
uci set firewall.@zone[1].input="ACCEPT"
uci commit firewall
service firewall restart
可以访问 192.168.123.149 完成后续配置,比如安装汉化包、配置 DHCP 服务器、设置 IPv6 中继、配置防火墙等,具体操作不再赘述,截图如下:
检查 LAN 是否开启 DHCP

配置 LAN 开启 IPv6 中继

对应的 /etc/config/dhcp 配置如下:
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv4 'server'
option dhcpv6 'relay'
option ra 'relay'
option ndp 'relay'
配置 WAN6 开启 IPv6 中继

对应的 /etc/config/dhcp 配置如下:
config dhcp 'wan6'
option interface 'wan6'
option ignore '1'
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'
option master '1'
检查防火墙配置
