在PVE中安装OpenWrt并配置NAT虚拟机路由
前言
我的PVE环境自从配置好后,就一直没有好好用起来,现在想给自己的局域网络增加一层拓扑结构,于是计划在PVE中安装一个统一的路由管理系统,管理PVE下各个虚拟机。
配置NAT网络
PVE配置网络
首先需要配置NAT的网络,PVE安装好后会给我们创建一个默认的桥接网路,但这次我们需要的是NAT网络,所以需要在PVE中新建一个网络,如图:

点击创建Linux网桥,随后输入所在的网端,本地演示选为 10.10.0.1/24,注意名称选择需未占用,IPv4/CIDR 需要填写正确,其它选项不用填可跳过:

点击确定后,需要在系统应用配置,如图:

PVE终端配置网络
随后我们进入PVE终端,对刚创建的网络设备进行系统配置:
编辑 /etc/network/interfaces,并在后面添加以下设置:
nano /etc/network/interfaces
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.0.0/24' -o ens33 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.0.0/24' -o ens33 -j MASQUERADE需要注意ens33,要改为PVE主机用于上网的设备名,我选择的是桥接设备的网络设备名,可以通过ip addr命令查看。
设置NAT和IP转发规则,允许一个子网的设备通过另一个网络接口访问外部网络。解释说明如下:
post-up echo 1 > /proc/sys/net/ipv4/ip_forward 开启系统的 IP 转发功能。
post-up iptables -t nat -A POSTROUTING -s '10.10.0.0/24' -o ens33 -j MASQUERADE 它会自动将数据包的源 IP 地址修改为ens33接口当前的 IP 地址。对于外部网络来说,所有流量都像是从这台 Linux 主机发出的,它不知道内部 10.10.0.0/24 网络的存在。
post-down iptables -t nat -D POSTROUTING -s '10.10.0.0/24' -o wlp1s0 -j MASQUERADE 这条命令与第二行相反,使用 -D(删除)选项,将之前添加的 NAT 规则从 POSTROUTING 链中移除。
随后将网络规则写入系统参数,主要用于开启和优化路由转发功能:
需要注意其中ens33需要设置为上方设置的对应的网络设备。
#IPV4转发
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
#IPV6转发
net.ipv6.conf.ens33.autoconf=0
net.ipv6.conf.ens33.accept_ra=2
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.proxy_ndp=1
net.ipv6.conf.all.proxy_ndp=1最后重启主机
端口转发
如果你想外部访问虚拟机内部,需配置外网端口转发,在PVE终端中执行,代码示例如下:
post-up echo 1 > /proc/sys/net/ipv4/conf/ens33/proxy_arp #代理 ARP 允许一个主机在一个子网上代表另一个主机响应 ARP 请求,ARP 是一种用于将 IP 地址解析为 MAC(Media Access Control)地址的协议
#转发IPv4流量到虚拟机,使虚拟机与外网联通。
#SNAT 内网转外网,当内部虚拟器需要访问外网时走这条规则
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE # -A添加规则
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE # -D删除规则
#DNAT 外网转内网,当外部访问内部虚拟机的服务器时走这条规则
post-up iptables -t nat -A PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 8080 -j DNAT --to 10.10.10.100:80 # -A添加规则
post-down iptables -t nat -D PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 8080 -j DNAT --to 10.10.10.100:80 # -D删除规则
# win10远程桌面
post-up iptables -t nat -A PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 3389 -j DNAT --to 10.10.10.103:3389
post-down iptables -t nat -D PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 3389 -j DNAT --to 10.10.10.103:3389
# ubuntu22.04远程桌面
post-up iptables -t nat -A PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 3390 -j DNAT --to 10.10.10.104:3389
post-down iptables -t nat -D PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 3390 -j DNAT --to 10.10.10.104:3389
# Mac远程桌面
post-up iptables -t nat -A PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 5900 -j DNAT --to 10.10.10.105:5900
post-down iptables -t nat -D PREROUTING -i vmbr0 -d 192.168.32.250 -p tcp --dport 5900 -j DNAT --to 10.10.10.105:5900
至此PVE的NAT网络设置完毕。
安装OpenWrt
首先我们需要一个OpenWrt的镜像,下载地址如下:
根据设备选择对应的镜像文件,下载解包并上传到PVE:

如图上传:

创建虚拟机,设置如下图:








创建虚拟机后,需要向虚拟机安装映像,进入PVE终端输入以下代码:
root@pve:~# find / -type f -name "kwrt-*.img" -ls 2>/dev/null
400625 1045540 -rw-r--r-- 1 root root 1070628352 Aug 20 23:44 /var/lib/vz/template/iso/kwrt-07.06.2025-x86-64-generic-squashfs-combined-efi.img
root@pve:~# cd /var/lib/vz/template/iso/ # 这个目录可以看到上传的镜像
root@pve:/var/lib/vz/template/iso# ls -l
total 3162984
-rw-r--r-- 1 root root 2168258560 Aug 20 23:43 fnos-0.9.2-863.iso
-rw-r--r-- 1 root root 1070628352 Aug 20 23:44 kwrt-07.06.2025-x86-64-generic-squashfs-combined-efi.img
root@pve:/var/lib/vz/template/iso# qm importdisk 100 kwrt-07.06.2025-x86-64-generic-squashfs-combined-efi.img local-lvm
importing disk 'kwrt-07.06.2025-x86-64-generic-squashfs-combined-efi.img' to VM 100 ...
Rounding up size to full physical extent 1.00 GiB
Logical volume "vm-100-disk-0" created.
......
unused0: successfully imported disk 'local-lvm:vm-100-disk-0'
# 看到结尾这行代码即成功发现虚拟机这里多了个硬盘,点击更改为SATA盘,如下图:


更改为磁盘引导启动:

直接启动虚拟机
默认账号密码均为root
修改IP,IP应为之前设置的网桥的网段一致的,我设置的时10.10.0.10
vi /etc/config/network # 修改网络配置文件
/etc/init.d/network restart # 重启网络
reboot # 重启服务器
再添加一个网络设备,用于访问外网,我添加的是桥接的网络设备,如图:

至此OpenWrt安装完毕。
配置网络
我在PVE中有一个Windows主机,添加和OpenWrt相同的网络设备,访问10.10.0.10,输入账号密码进入后台,此时已经连接到NAT网段的OpenWrt的lan口上了:
配置网络,添加wan口,我之前已经添加过:

将连接外部的网络配置为wan口,此时OpenWrt已可以上网,同时也可以管理NAT下的网络设备。
验证测试
在Windows中,设置IP地址,以及网关地址,访问外网,能够访问,同时访问内网的OpenWrt也可以访问到,验证成功,后续还可以通过内网穿透实现外部远程控制NAT下的机器。


=以上,完成了NAT网络的配置,实现PVE环境下内部网络的网络地址转换,同时通过OpenWrt作为网管管理。