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.把映像文件导入虚拟机。打开虚拟机的控制台,输入命令:

1
qm importdisk 100 var/lib/template/iso/openwrt.img local-lvm

接着会显示虚拟磁盘创建的进度,最后显示‘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 -sataN none

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文件。

1
nano /etc/sysctl.conf

在这里插入图片描述 在最文件末尾加这段,然后ctrl+x保存。

1
2
3
4
5
6
net.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命令使配置生效。

1
sysctl -p

复制原始的网络 配置文件

1
cp /etc/network/interfaces /etc/network/interfaces.new

编辑 复制的 /etc/network/interfaces.new文件,在文件末尾添加以下配置(根据你的网桥名称进行修改):

1
2
3
4
nano /etc/network/interfaces.new

iface vmbr0 inet6 dhcp
    request_prefix 1

在这里插入图片描述 也可以加下面的这段代码(相交于上面的更灵活)

1
2
3
4
iface vmbr0 inet6 auto
        dhcp 1
        accept_ra 2
        request_prefix 1

在这里插入图片描述

在PVE的WEBUI “系统 -> 网络”处,刷新后点击“应用配置”即可生效在这里插入图片描述 应用配置后,等待片刻以获取IPv6地址。可以通过以下命令查看IPv6地址:

1
ip -6 a show vmbr0

如果路由器或者光猫ipv6配置没问题,pve的ipv6获取应该就成功了。

(二)PVE安装DDNS-GO配置动态域名解析

  首先,你需要创建一个目录来存放ddns-go,并进入该目录

1
2
mkdir -p /opt/ddns-go 
cd /opt/ddns-go/

可以先单独下载下来通过winscp直接拖进去,也可以通过命令行下载到指定位置:

我捣鼓的时候最新版本是6.11.2,因为我的是畅网5825U,下载的是x86_64版本的。在这里插入图片描述

①通过命令行

下载最新版本的ddns-go。你可以访问ddns-go的GitHub Release页面,下载适合你系统架构的版本。例如,对于x86_64架构,可以使用以下命令下载(注意:下面命令的ddns-go版本不是6.11.2的,需要自行去github获取最新链接,然后更改wget后面的链接):

1
wget -c https://github.com/jeessy2/ddns-go/releases/download/v6.7.5/ddns-go_6.7.5_linux_x86_64.tar.gz
②通过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/目录了,先解压

1
2
tar -zxvf ddns-go_6.11.2_linux_x86_64.tar.gz
一键获取完整项目代码bash1

再安装(如果想卸载,请运行以下命令./ddns-go -s uninstall

1
./ddns-go -s install

再配置。安装完成后,可以通过浏览器访问 http://[pve的ip]:9876 来配置ddns-go,具体的ddns-go配置我就不讲了,网上很多。提几点重要的 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 保存后,就会自动解析了在这里插入图片描述 然后,使用解析的pve域名:8006,就可以外网访问pve了。手机端的话,安装下proxmox virtual environment(谷歌商店有)