All-in-one必备技能!手把手教你在PVE下安装OpenWRT
All-in-one其中最重要的服务就是路由服务啦,一般推荐在虚拟化平台上安装虚拟机的形式实现路由功能,如果没有多条互联网接入服务,没有负载分担或链路备份的需求,只需安装一个路由系统即可,一般推荐openwrt即可,可玩性较高。对于一般家庭,爱快+op的组合其实除了增加一跳路由外,没什么实际作用。
一、准备工作
1.安装好PVE的双网口以上的X86电脑/小主机(我使用四网口的J4125);
2.下载openwrt的镜像:https://downloads.openwrt.org/releases/
选择最新的X86-64镜像即可:

解压下较的镜像文件,得到以.img格式的文件,为后面操作方案,建议重命名为openwrt.img。
3.上传镜像文件
登录pve管理后台,打下如下图的页面,上传openwrt.img文件。

上传完成后,弹出如下界面,记录target file后的文件路径(等下安装系统要用到)。

二、创建虚拟机
点击PVE管理页面右上方的“创建虚拟机”,按下图逐步设置:



磁盘大小一般1-2GB已足够,过大没有什么意义(后续这里创建的硬盘其实可以删除)。

CPU类别选host以获得更好的性能,CPI核心数建议选2个以上。

内存1024M已足够,虚拟机内存大的,可以选2048(但个人觉得必要性不强)。

三、添加所有网卡
pve安装完成后,默认只有一个网桥,但我的小主机有4个网卡,需要为每个网卡创建一个网桥,才能让虚拟机调用每个网卡。
如下图在节点的网络页面,点击创建、选择Linux bridge:

名称vmbr1,桥接端口根据页面显示的类别为“网络设备”的名称中的一个填入即可(我的分别为eno1、enp1s0、enp2s0、enp4s0),

每个网络设备创建对应的一个Linux bridge,具体见下图:

为虚拟机增加所有网卡,在虚拟机管理页面上点击添加网络设备,逐一添加上一步创建的网桥,模型选“virtIO”以获得更好的性能。


添加完成后如下图所示:

四、写入OpenWRT映像文件
1.把映像文件导入虚拟机。打开虚拟机的控制台,输入命令:
| |
接着会显示虚拟磁盘创建的进度,最后显示‘Successfully imported disk as ‘unused0:local-lvm:vm-101-disk-1’就是添加成功了。
qm importdisk是PVE导入磁盘到虚拟机的工具,后面的参数‘100’是Openwrt虚拟机的编号,‘/var/lib/vz/template/iso/openwrt.img’是刚才上传Openwrt镜像的完整目录,‘local-lvm’是PVE储存虚拟磁盘的存储空间。
2.导入成功后在‘Openwrt’虚拟机的“硬件”选项卡就能看到一个“未使用的磁盘”,选中它点击编辑,弹出配置窗口,设备类型选“sata”,最后点击添加。这个硬盘只有140多M,后续如需安装插件,可能不够空间。可以点击-上面的“磁盘操作”-“调整大小”,调整到你需要的大小(建议1-2GB即可),删除原来创建的1无用的硬盘。完成后如下图:

3.调整引导顺序
点击“选项”-“引导顺序”,把已写入OpenWRT系统的硬盘拖动到最上方,作为第一个启动设备。

至此,安装工作全部完成。启动虚拟机,即可进入设置界面。
****五、Openwrt****设置
最后启动openwrt软路由虚拟机,把电脑接到PVE实体机的网口(vmbr1网桥对应的网口),如果设置都正确的话电脑将自动获取ip地址(不行就换一个网口),输入192.168.1.1进入入设置界面。
识别待直通硬盘
输入如下命令,读取硬盘信息: SHELL ls -l /dev/disk/by-id/ 在输出结果中排除以下项目: 排除 PVE 系统盘; 名称包含 part1 的分区标识; 非 ata- 前缀的设备。
配置硬盘直通
命令解释: SHELL
qm set 100 -sata1 /dev/disk/by-id/ata-WDC_WD5000AAKS-60Z1A0_WD-WCAWF6679588
<100> 为目标虚拟机的编号; -sataN 对应虚拟机中的第 N 块 SATA 控制器; <DISK_ID> 为上一节筛选出的磁盘标识。
执行完毕后,Proxmox 会提示 update VM 103: -sataX…,表示挂载成功。此时在 硬件 → 磁盘 页面可见新加入的硬盘条目:
该虚拟机的硬件信息已经显示我们添加的硬盘。
启动飞牛,查看是否正常。
解除直通(可选)
若需移除直通磁盘,保持虚拟机关闭,执行:
qm set
qm set 100 -sata1 none
下述命令未经尝试,请谨慎运行
PVC开启IPV6
获取IPV6 https://tech.dukeyin.com/
PVE安装后默认是不会自动获取IPV6地址的,当我们需要配置DDNS或者某些场景需要PVE主机的IPV6时,需要这么操作,整个过程不需要重启:
1 设置自动配置SLAAC IPV6
enet.ipv6.conf.all.accept_ra=2 net.ipv6.conf.default.accept_ra=2 net.ipv6.conf.vmbr0.accept_ra=2 net.ipv6.conf.all.autoconf=1 net.ipv6.conf.default.autoconf=1 net.ipv6.conf.vmbr0.autoconf=1
然后使用如下命令使刚刚的配置生效:
sysctl -p
2 配置网卡获取IPV6
先复制一个当前网卡配置文件到new
cp /etc/network/interfaces /etc/network/interfaces.new
编辑复制的 /etc/network/interfaces.new 文件,在文件末尾添加以下配置(根据你的网桥名称进行修改)
nano /etc/network/interfaces.new
iface vmbr0 inet6 dhcp request_prefix 1
在PVE Web界面,找到当前节点,系统,网络处,刷新,并点击应用配置。
3 然后再等待个3分钟
这个很重要,实测需要一小段时间,才能获取到IPV6
当然你重启系统也行,但实测重启后依然还是需要等待几分钟,大部分情况有虚拟机在跑,PVE最好不要或者很不方便重启,只需要等待就行。
4 验证
使用如下任意命令验证是否成功获取到IPV6
ip -6 a show vmbr0
或者
ip a|grep inet6
如果看到 240开头的IPV6,说明获取成功。在PVE8和PVE9验证成功。
当然前提使你的路由器、光猫配置要正确。
添加SSL证书
Web界面找到当前节点,菜单 系统-凭证
在ACME栏
1 添加账户
首先添加ACME账户
填写你的Email地址,ACME目录选择Let's Encrypt V2,勾选接受服务条款,注册。这一步也可以用命令行完成:
pvenode acme account register default em***@********in.com
email地址用自己的。
出现账户信息时,证明成功。
2 添加DNS验证插件
目前PVE9在Web界面直接添加会比较麻烦,以下用命令行添加:
添加CloudFlare密钥
新建一个文件并写入cf的密钥
echo ‘CF_Token=“uBqPsFzA7fm7UNUassZkjLrSaGrHdONjo6tget90W”’ > /root/cf-token-token.txt
chmod 600 /root/cf-token-token.txt
Tocken 改为你自己的,这个token是示例,无效。
然后添加CloudFlare插件
pvenode acme plugin add dns cftoken –api cf –data /root/cf-token-token.txt
下一步可以用web界面,也可以用命令行
web界面,ACME下点击添加,质询类型选择DNS,插件选择刚刚我们添加的cf-token,域名添加你想部署SSL的域名,然后点创建即可。
用命令行如下:
pvenode config set -acmedomain0 pve.yourdomain.com,plugin=cftoken
多个域名就分多次,-acmedomain0参数递增即可。
最后Web界面点立即预定即可申请SSL证书
用命令行的话如下:
pvenode acme cert order –force
完成后会重载Web界面,如果还显示不安全,重启浏览器即可解决。
PVE内置了pve-daily-update.service,不需要手动再次运行即可保证证书不过期。
通过命令行获取ipv6地址
IP+网络前缀:
ip -6 addr show | grep -i global | grep -oP ‘2409:[^ ]+?/64’
仅ip地址
ip -6 addr show | grep -i global | grep -oP ‘[0-9a-f:]+/[0-9]+’ | cut -d/ -f1
当有多个公网IP时,仅获取第一个:
ip -6 addr show scope global | awk ‘/inet6/{print $2; exit}’ | cut -d’/’ -f1
总结
# 1. 创建密钥文件
echo ‘CF_Token=“YOURTOKEN”’ > /root/cf-token-token.txt
chmod 600 /root/cf-token-token.txt
# 2. 添加 Cloudflare ACME插件
pvenode acme plugin add dns cftoken –api cf –data /root/cf-token-token.txt
# 3. (可选) 检查插件配置
pvenode acme plugin config cftoken
# 4. 将域名添加到节点
pvenode config set -acmedomain0 pve.domain.com,plugin=cftoken
# 5. 注册ACME账户
pvenode acme account register default em***@********in.com
# 6. 订阅证书
pvenode acme cert order –force
一、背景
小主机用 pve 做底层,pve上搭飞牛os、win10,所以,有远程手机访问pve的需求。
二、步骤
(一)配置PVE的IPV6
后台或者ssh登陆pve,编辑/etc/sysctl.conf文件。
| |
在最文件末尾加这段,然后ctrl+x保存。
使用sysctl -p命令使配置生效。
| |
复制原始的网络 配置文件
| |
编辑 复制的 /etc/network/interfaces.new文件,在文件末尾添加以下配置(根据你的网桥名称进行修改):
也可以加下面的这段代码(相交于上面的更灵活)

在PVE的WEBUI “系统 -> 网络”处,刷新后点击“应用配置”即可生效
应用配置后,等待片刻以获取IPv6地址。可以通过以下命令查看IPv6地址:
| |
如果路由器或者光猫ipv6配置没问题,pve的ipv6获取应该就成功了。
(二)PVE安装DDNS-GO配置动态域名解析
首先,你需要创建一个目录来存放ddns-go,并进入该目录
可以先单独下载下来通过winscp直接拖进去,也可以通过命令行下载到指定位置:
我捣鼓的时候最新版本是6.11.2,因为我的是畅网5825U,下载的是x86_64版本的。
①通过命令行
下载最新版本的ddns-go。你可以访问ddns-go的GitHub Release页面,下载适合你系统架构的版本。例如,对于x86_64架构,可以使用以下命令下载(注意:下面命令的ddns-go版本不是6.11.2的,需要自行去github获取最新链接,然后更改wget后面的链接):
| |
②通过winscp
先连接上pve
然后,下载ddns-go文件(github:
ddns-go
[https://github.com/jeessy2/ddns-go/releases](
https://objects.githubusercontent.com/github-production-release-asset-2e65be/290437899/7c78ae4f-5dee-4f06-8b8f-edce13ebfcd8?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction/20250705/us-east-1/s3/aws4_request&X-Amz-Date=20250705T153433Z&X-Amz-Expires=1800&X-Amz-Signature=e72c0f6aa9f43431927062363083e5c724f92d2c4a14f16ba7e365ab22fd1bec&X-Amz-SignedHeaders=host&response-content-disposition=attachment;
filename=ddns-go_6.11.2_linux_x86_64.tar.gz&response-content-type=application/octet-stream)
接下来的操作就跟win一样哈,在opt下新建文件夹ddns-go,然后把tar.gz文件拖进去

以上,采取命令行,或者界面操作都行,接下来是解压和安装了哈。我们之前已经进入到/opt/ddns-go/目录了,先解压
再安装(如果想卸载,请运行以下命令./ddns-go -s uninstall)
| |
再配置。安装完成后,可以通过浏览器访问 http://[pve的ip]:9876 来配置ddns-go,具体的ddns-go配置我就不讲了,网上很多。提几点重要的
保存后,就会自动解析了
然后,使用解析的pve域名:8006,就可以外网访问pve了。手机端的话,安装下proxmox virtual environment(谷歌商店有)