PVE+iKuai+OpenWrt+fnOS虚拟机折腾记录

1   背景

早期因联通赠送的光猫性能不支持双lan口长时间同时上网,故从海鲜市场(小黄鱼)上淘了一块n3530小工控机(准系统,无内存条),计划用来安装pve虚拟机用以作软路由处理宽带拨号和网关ip分配,光猫仅作为一个光电信号转换器。

后面不断购新硬件摸索各类方案,目前本文已总结了笔者探索使用PVE的各种经验所得。

2   机器配置

2.1   N3530工控机配置

  • CPU:Intel(R) Pentium(R) CPU N3530
  • 内存:海力士DDR3L-8GB单根(从老笔记本电脑上拆一根DDR3条子给它用)
  • 硬盘:海力士SH920 msata 256GB
  • 网卡:千兆网卡Intel I211 *2+千兆网卡Realtek mini-pcie RTL8211E/F(螃蟹卡,后期自己购买加装至mini pcie无线网卡口位置)

2.2   N3530工控机BIOS的优化设置

快速启动菜单按键:F11键

该N3530工控机BIOS是采用经典的AMI(American Megatrends)方案。

  • 设置来电自启:Chipset->North Bridge->Restore AC Power Loss->Power on
  • 启用CPU内置温度传感器:Advanced->CPU Configuration->CPU Thermal Configuration->DTS->Enabled
  • 启用VT-x:Advanced->CPU Configuration->Intel Virtualization Technology->Enabled
  • 设置自定义功率模式:Advanced->CPU Configuration->Power Technology->Custom。(默认是Efficient节能模式)

2.3   i5-12400+云星Matx-Z690 NAS主板配置

2.4   云星Matx-Z690 NAS主板BIOS的优化设置

快速启动菜单按键:F11键

3   安装PVE

3.1   PVE安装步骤

  1. 下载PVE系统镜像:点击跳转(我的情况就是需要下载pve 7.4的iso镜像文件,因为安装pve 8.x会引起bootloader setup errors报错而导致安装PVE系统失败)
  2. 制作U盘启动项:ventoy。拷贝镜像iso文件到U盘,启动选择pve镜像进入,选择图形安装界面。
  3. 同意协议。
  4. 点击option按钮,选择硬盘和ext4格式:
    1. swapsize=8GB(交换分区请根据自己的硬盘容量和使用情况设置)
    2. maxroot=50GB(该分区对应PVE系统的local存储空间,主要用于存放ISO镜像和LXC模板(CT Templates),请根据自己的硬盘和使用情况设置)
    3. minfree=0GB(该分区是定义划分LVM卷组“pve”后剩余的可用空间量。当可用存储空间超过128GB时,其默认值为16GB。)
      • 一般是留出这闲置空间用于手动lvcreate逻辑分卷snapshot快照这种操作。但PVE是使用lvmthin,无需闲置空间作为lvmthin的快照存储,因此设置为0即可。
      • 如果自己的需求有自行创建逻辑卷快照的需求,请留空使用默认值16GB即可。
      • LVM需要VG中的可用空间来创建快照,而lvmthin快照则不需要。
    4. maxvz=留空(该分区是定义数据卷(data)的最大大小。计算公式:datasize = hdsize - rootsize - swapsize - minfree)
  5. 国家选择china,时区会自动修改为上海,键盘布局不改。
  6. 设置密码,邮箱随意。
  7. 管理网口,默认第一个做管理(enp1s0,pve系统里面识别的第一个网口,N3530工控机中靠近hdmi接口的rj45),第二个做wan口(方便后续维护)。域名hostname设置为pve.lan(这项随便填写都行,有能用的域名可填写上去,可解析到机器用域名管理pve虚拟机);ip:192.168.1.2;掩码:255.255.255.0;网关:192.168.1.1(留给iKuai的地址),DNS:223.5.5.5。
  8. 查看确认已设置的内容(弹窗),确认安装。
  9. 访问WEB管理地址并登录:https://192.168.1.2:8006。账户:root。密码:[前面步骤设置的密码]。
  10. 设置网卡并确保pve能联网。

3.2   PVE升级步骤(7.4->8.x)

3.2.1   替换PVE 7.4的Debian系统软件源和PVE软件源

注:推荐中科大源,清华源可能会遇到大型NAT局域网宽带频繁访问而导致被禁用IP,从而导致出现403 Forbidden。

修改/etc/apt/sources.list文件内容

1
2
mv /etc/apt/sources.list /etc/apt/sources.list.bak
nano /etc/apt/sources.list
1
2
3
4
5
6
7
8
9
10
#deb http://ftp.debian.org/debian bullseye main contrib
deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free

#deb http://ftp.debian.org/debian bullseye-updates main contrib
deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free

deb https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
# security updates
#deb http://security.debian.org bullseye-security main contrib
deb https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free
1
2
3
4
5
6
7
8
9
10
#deb http://ftp.debian.org/debian bullseye main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free

#deb http://ftp.debian.org/debian bullseye-updates main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# security updates
#deb http://security.debian.org bullseye-security main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

删除pve-enterprise.list,新建pve-no-subscription.list。

1
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
1
echo deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription > /etc/apt/sources.list.d/pve-no-subscription.list
1
echo deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bullseye pve-no-subscription > /etc/apt/sources.list.d/pve-no-subscription.list

修改/etc/apt/sources.list.d/ceph.list/usr/share/perl5/PVE/CLI/pveceph.pm文件内容

1
2
3
mv /etc/apt/sources.list.d/ceph.list /etc/apt/sources.list.d/ceph.list.bak
cp /usr/share/perl5/PVE/CLI/pveceph.pm /usr/share/perl5/PVE/CLI/pveceph.pm.bak
sed -i "s#http://download.proxmox.com#https://mirrors.ustc.edu.cn/proxmox#g" /usr/share/perl5/PVE/CLI/pveceph.pm
1
echo deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bullseye no-subscription > /etc/apt/sources.list.d/ceph.list
1
echo deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/ceph-quincy bullseye no-subscription > /etc/apt/sources.list.d/ceph.list

3.2.2   升级到PVE 7.4最新的版本

1
2
apt update -y && apt dist-upgrade -y
pveversion

3.2.3   检查版本升级的兼容性

1
pve7to8

3.2.4   替换PVE 8.x的Debian系统软件源和PVE软件源(国内镜像)

注:推荐中科大源,清华源可能会遇到大型NAT局域网宽带频繁访问而导致被禁用IP,从而导致出现403 Forbidden。

修改/etc/apt/sources.list文件内容

1
2
mv /etc/apt/sources.list /etc/apt/sources.list.bak
nano /etc/apt/sources.list
1
2
3
4
5
6
7
8
9
10
# deb http://ftp.debian.org/debian bookworm main contrib
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

# deb http://ftp.debian.org/debian bookworm-updates main contrib
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# security updates
# deb http://security.debian.org bookworm-security main contrib
deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
1
2
3
4
5
6
7
8
9
10
# deb http://ftp.debian.org/debian bookworm main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

# deb http://ftp.debian.org/debian bookworm-updates main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# security updates
# deb http://security.debian.org bookworm-security main contrib
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

删除pve-enterprise.list,新建pve-no-subscription.list。

1
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
1
echo deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription > /etc/apt/sources.list.d/pve-no-subscription.list
1
echo deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription > /etc/apt/sources.list.d/pve-no-subscription.list

修改/etc/apt/sources.list.d/ceph.list/usr/share/perl5/PVE/CLI/pveceph.pm文件内容

1
2
3
mv /etc/apt/sources.list.d/ceph.list /etc/apt/sources.list.d/ceph.list.bak
cp /usr/share/perl5/PVE/CLI/pveceph.pm /usr/share/perl5/PVE/CLI/pveceph.pm.bak
sed -i "s#http://download.proxmox.com#https://mirrors.ustc.edu.cn/proxmox#g" /usr/share/perl5/PVE/CLI/pveceph.pm
1
echo deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription > /etc/apt/sources.list.d/ceph.list
1
echo deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription > /etc/apt/sources.list.d/ceph.list

3.2.5   替换LXC模板(CT Templates)镜像源

修改/usr/share/perl5/PVE/APLInfo.pm文件内容,针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,重启后生效。

1
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm.bak
1
sed -i "s#http://download.proxmox.com/images#https://mirrors.ustc.edu.cn/proxmox/images#g" /usr/share/perl5/PVE/APLInfo.pm
1
sed -i "s#http://download.proxmox.com/images#https://mirrors.tuna.tsinghua.edu.cn/proxmox/images#g" /usr/share/perl5/PVE/APLInfo.pm

3.2.6   开始正式升级

1
apt update -y && apt dist-upgrade -y

升级若遇到提示Upgrade wants to remove package 'proxmox-ve'的话,在升级前尝试执行apt remove linux-image-amd64

升级中会出现一些交互界面,下面是官网的建议(不清楚的选项,可以选择推荐参数)

1
2
3
4
5
6
7
8
9
10
11
12
/etc/issue -> Proxmox VE will auto-generate this file on boot, and it has only cosmetic effects on the login console.
Using the default "No" (keep your currently-installed version) is safe here.

/etc/lvm/lvm.conf -> Changes relevant for Proxmox VE will be updated, and a newer config version might be useful.
If you did not make extra changes yourself and are unsure it's suggested to choose "Yes" (install the package maintainer's version) here.

/etc/ssh/sshd_config -> If you have not changed this file manually, the only differences should be a replacement of ChallengeResponseAuthentication no with KbdInteractiveAuthentication no and some irrelevant changes in comments (lines starting with #).
If this is the case, both options are safe, though we would recommend installing the package maintainer's version in order to move away from the deprecated ChallengeResponseAuthentication option. If there are other changes, we suggest to inspect them closely and decide accordingly.

/etc/default/grub -> Here you may want to take special care, as this is normally only asked for if you changed it manually, e.g., for adding some kernel command line option.
It's recommended to check the difference for any relevant change, note that changes in comments (lines starting with #) are not relevant.
If unsure, we suggested to selected "No" (keep your currently-installed version)

3.2.7   去除未订阅提示

完成如下文件内容修改后,注销浏览器当前的PVE登录信息,并重新登录就没有提示弹窗了。

  • /usr/share/pve-manager/js/pvemanagerlib.js
  • /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
1
2
3
4
5
6
cp /usr/share/pve-manager/js/pvemanagerlib.js /usr/share/pve-manager/js/pvemanagerlib.js.bak
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak
sed -i "s/data.status === 'Active'/true/g" /usr/share/pve-manager/js/pvemanagerlib.js
sed -i "s/if (res === null || res === undefined || \!res || res/if(/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
sed -i "s/.data.status.toLowerCase() !== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
「无有效订阅」的提示弹窗

3.2.8   后续PVE系统日常更新:

1
apt update -y && apt dist-upgrade -y

3.3   PVE安装和使用遇到的坑

3.3.1   PVE安装到99%时出现unable to install the EFI boot loader on '/dev/sda'

报错信息:

1
2
bootloader setup errors:
- failed to prepare EFI boot using Grub on '/dev/sda2': unable to install the EFI boot loader on '/dev/sda'

原因:PVE 8.0版本镜像īso不兼容N3530工控机,估计是bug。参考其他帖子说的只保留usb的uefi设备,依旧也会报错。并且因为机器的bios设置也比较繁琐,我反复尝试将其设置为csm模式,机器始终无法以csm模式启动,估计该主板的bios也是魔改过有bug的。因此导致也无法以csm模式安装pve。

解决方法:安装pve 7.4版本,再升级到pve 8.x。

3.3.2   USB键盘一直插着时会无法响应的,无法进入并操控BIOS,只有CTRL+ALT+DELETE可以响应

原因:推测为N3530工控机BIOS的驱动BUG。

解决方法:先不插键盘启动机器,看屏幕右下角等待主板自检代码走到99阶段,快速插上键盘,摁DEL键。如果一次不成功,就使用CTRL+ALT+DELETE强制重启,继续尝试该操作。

3.3.3   hdmi屏幕不显bios

N3530工控机主板BIOS内置驱动对普通HDMI小屏幕兼容性不好,只有成功启动PVE系统后才会正常显示画面,而在自检阶段和BIOS界面只会显示白屏或者花屏,接大屏驱动板兼容性好点。

3.3.4   后面加装的RTL8211网卡不识别

原因:因为安装pve系统之前未加装好螃蟹卡RTL8211,因此后续加装之后,pve系统并未识别到。

解决方法:重装pve系统。(驱动源码编译方案,也有编译报错,不好解决,推荐是重装pve,让pve自动打驱动)

3.3.5   工控机重启bug,看门狗导致重启很长时间

原因:未查明,只要一重启,就会长时间卡在看门狗的错误提示。

错误提示:

1
2
3
watchgod: watchdog0: watchdog did't did not stop!

systemd-shutdown: Failed to finalzie DM services, ignorening.

解决方法:无法解决,只能长时间等待完成重启或者强制关机重开。

P.S. 尝试在主板BIOS中主动启用看门狗计时器设置Advanced->SIO MISC Configuration->Watchdog Dog Timer->Enabled仍无法解决,该问题暂未查明原因。

3.3.6   Repository 'Debian bookworm' changed its 'non-free component' value from 'non-free' to 'non-free non-free-firmware'

问题现象:运行apt update出现报错:Repository 'Debian bookworm' changed its 'non-free component' value from 'non-free' to 'non-free non-free-firmware'

问题原因:Debian 12版本(bookworm)的非自有固件包(如硬件驱动程序)不再放在non-free目录中,而是non-free-firmware目录。

解决方法1(修正/etc/apt/sources.list软件源):

1
2
# 确保软件源中添加了non-free-firmware目录,而不仅仅只有non-free目录
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

解决方法2(直接屏蔽该错误):
创建一个文件/etc/apt/apt.conf.d/no-bookworm-firmware.conf,写入内容如下:

1
APT::Get::Update::SourceListWarnings::NonFreeFirmware "false";

3.3.7   安装独立显卡的机器中PVE系统里面识别不到核显设备

问题现象:华硕Z690-A Gaming WiFi D4主板在安装独立显卡后,运行ls pci | grep VGA找不到核显的VGA设备。

问题原因:主板BIOS未有开启核显。

解决方法:

  • 开启iGPU设置:Advanced->System Agent (SA) Configuration->Graphics Configuration->iGPU Multi-Monitor->Enabled
    • Intel 11代及以后的CPU核显不支持传统Legacy显示方式,如果看不到在主板BIOS中找不到iGPU设置选项的话,请设置关闭CSM:BOOT->CSM (Compatibility Support Module)->Launch CSM->Disabled
  • 设置首选显示设备为核显:Advanced->System Agent (SA) Configuration->Graphics Configuration->Primary Display->CPU Graphics
    • 一般其他主板型号可能有的选项值:
      • Auto
      • CPU Graphics:核显
      • PEG Slot (PCI-e Graphics Device):独立显卡
      • PCIE (PCI-e Graphics Device)
      • IGD (Internal Graphics Device):一般多指核显,除非主板自带有北桥显示芯片
      • PCI (PCI Graphics Device)

3.3.8   PVE概要页面利用率图标信息无法显示

问题原因:rrdcached服务异常,某些情况下也可能会导致所有虚拟机显示「状态: unknown」。

解决方法:

1
2
3
4
systemctl stop rrdcached
rm -rf /var/lib/rrdcached/*
# 或者mv /var/lib/rrdcached /var/lib/rrdcached.bck
systemctl start rrdcached

3.3.9   PVE面板节点和所有虚拟机显示「状态: unknown」,虚拟机正常运行

问题原因:pve的节点状态守护程序pvestatd异常。

解决方法:

1
2
3
#查看状态和重启服务
systemctl status pvestatd
systemctl restart pvestatd

3.3.10   使用ventoy引导安装PVE后,无法正常启动PVE

问题:使用ventoy引导安装PVE后,安装完成重启,初次开机就卡在loading initial ramdisk或者黑屏

原因:因为ventoy偷偷给PVE添加启动内核参数rdinit=/vtoy/vtoy。据反复实验,在ventoy使用grub模式加载PVE镜像引导的话,这个参数百分百会被偷偷加入,使用正常UEFI模式加载偶尔会出现这种情况。测试使用的ventoy版本为v1.1.05。

解决方法:

  1. 强制重启主机,在出现PVE引导菜单时,按E键,进入grub编辑模式
  2. 方向键定位到linux开头一行,删除rdinit=/vtoy/vtoy参数,Ctrl+X启动配置,进入系统引导加载启动。
  3. 登录PVE终端后台
  4. 查看并修改所有涉及内核参数的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
nano /etc/default/grub
# 若有修改,执行更新
update-grub

nano /etc/kernel/cmdline
# 若有修改,执行更新
proxmox-boot-tool refresh

# 如果上述两个文件都不存在该参数,尝试检查以下文件
/boot/grub/grub.cfg
/etc/default/grub.d/init-select.cfg
/etc/default/grub.d/installer.cfg
/etc/default/proxmox-ve.cfg
/etc/default/grub.ucf-dist
  1. 移除参数后,重启机器,PVE启动应该就能恢复正常

3.3.11   KVM和LXC被锁定lock无法启动

原因:回滚快照或者备份被异常中断都可能导致出现这种情况,对应的虚拟机状态可以看见一个被锁的图标。

解决方法:

  • KVM虚拟机解锁命名:qm unlock vmid,例如qm unlock 100
  • LXC虚拟机解锁命名:pct unlock vmid,例如pct unlock 101

3.3.12   Intel 13/14代CPU搭建的PVE机器频繁宕机

问题现象:Intel 13/14代CPU搭建的PVE机器经常会出现宕机现象,基本每隔两天就会出现失联,ssh也无法正常连接到PVE。此外还有一个很严重的现象,即未设置任何硬件直通的内核启动参数情况下,仍然会导致十分随机的PVE系统启动卡住现象或者出现随机启动报错,包括并不仅限于:

问题原因:CPU缩缸(辣鸡Intel(ಥ﹏ಥ))。相信我,修改grub引导参数设置nomodeset什么的都不管用的,仍然是随机崩溃宕机或者开机随机卡住。

解决方法:为CPU设置BIOS锁频和稳压,确保CPU可以稳定运行工作。

如果是1265u的机器,可能是C状态的问题。编辑/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT追加intel_idle.max_cstate=2参数,然后update-grub,最后在BIOS中设置关闭C状态。

3.3.13   PVE宕机故障的排查手段

  • PVE管理后台->PVE节点->系统->系统日志
  • 排障思路:
1
2
3
4
5
6
7
8
9
# 查看系统版本
uname -a

# 查看PVE版本
pveversion -v

# 查看PVE启动日志
cd /var/log
last

4   PVE硬件直通

如果机器本身就支持VT-X和VT-d等CPU虚拟化和直通硬件功能,则PVE启用IOMMU方面不需要额外设置。只需要设置好主板BIOS对应的CPU虚拟化和直通硬件功能即可,因为安装PVE系统阶段就会自动设置好启动IOMMU。

IOMMU允许系统设备在虚拟内存中进行寻址,也就是将虚拟内存地址映射为物理内存地址,让实体设备可以在虚拟的内存环境中工作,这样可以帮助系统扩充内存容量,提升性能。

换而言之,IOMMU可以使VM虚拟机能够接入一些物理设备,比如PCIe中的网卡、声卡、显卡,VM虚拟机可以直接或间接使用这些设备。

在创建虚拟机时,芯片组一定要q35。因为Q35,才能PCIE直通,否则就是PCI直通。

4.1   检查硬件是否支持直通(BIOS内查看Advanced高级选项)

  1. 开启CPU虚拟化:Intel: VT-X(Intel Virtual Technology)。AMD: AMD-V(SVM, Secure Virtual Machine)。
  2. 开启硬件直通功能:Intel: Intel VT-d。AMD: IOMMU。
  3. 部分主板会有和Intel VT-d/IOMMU相关联的Memory Remap Feature设置。

如果主板BIOS中没有VT-d或者IOMMU功能选项,则很可能不支持直通硬件功能。一般确认CPU是否支持该特性即可,例如确认Intel CPU是否支持VT-d,请查询Intel 官方CPU SKU规格页面资料即可。

若机器CPU明确支持VT-d特性,但在主板BIOS中却找不到该选项的话,则很可能是机器主板BIOS默认设置关闭,并隐藏了该设置选项(这种情况常见于笔记本主板或者工控机主板)。

解决方法:使用UniversalAMDFormBrowser工具查看隐藏设定并开启。

  1. 下载UniversalAMDFormBrowser工具
    • 方案1(推荐)UniversalAMDFormBrowser-VentoyUniversalAMDFormBrowser.img文件:该方案只需要将img文件拷贝到ventoy引导盘即可。
    • 方案2:Smokeless_UMAFUniversalAMDFormBrowser.zip文件:该方案需要制作FAT32分区格式的U盘制作引导盘。
  2. 重启机器,选择U盘启动项,引导加载UniversalAMDFormBrowser镜像。
  3. UniversalAMDFormBrowser中查看隐藏设定,例如隐藏的VT-d选项或者解除功耗限制选项等。

4.2   PVE提示No IOMMU detected

当pve未启用IOMMU或者硬件不支持直通(即使手动设置PVE开启IOMMU)时,在ProxmoxVE(PVE)的VM/VPS中添加PCI设备时候提示:No IOMMU detected, please activate it.See Documentation for further information.

解决方法:请确认自己的机器是否支持VT-X和VT-d等CPU虚拟化和直通硬件功能,并是否已开启IOMMU。若硬件不支持,建议更换支持这些功能特性的硬件设备。

4.3   PVE启用IOMMU

内核版本为5.15或之前的,在ProxmoxVE(PVE)系统内核中,需要手动启用IOMMU。5.15版本以后的ProxmoxVE(PVE)系统内核自带默认开启了IOMMU支持。

但我的硬件(N3530工控机)本身不支持VT-d功能(N3530 SKU规格页面明确写到不支持VT-d),因此安装PVE时并未自动启用IOMMU。

  1. 编辑grub文件:nano /etc/default/grub
  2. 找到GRUB_CMDLINE_LINUX_DEFAULT这一行:
1
2
3
4
5
6
7
...
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s <strong>2</strong>> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
...
  1. 根据CPU类型修改
1
2
3
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
...
1
2
3
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
...
4. 更新grub:`update-grub` 5. 重启PVE
  1. 编辑cmdline:nano /etc/kernel/cmdline。(若不存在,则新建该文件)
  2. 根据CPU类型在第一行末尾添加:
1
quiet intel_iommu=on
1
quiet amd_iommu=on

4.4   验证PVE的IOMMU是否启用

  1. 查询命令:dmesg | grep -e DMAR -e IOMMU。输出显示DMAR: IOMMU enabled或者DMAR: Intel(R) Virtualization Technology for Directed I/O证明已启用。
  2. 实操验证:虚拟机分配PCI设备时可见。

4.5   PVE启用PT模式

PT模式:会在IOMMU需要使用时候启动,适配器不需要使用 DMA 转换到内存,因此可以提高其他没有分配过设备的性能。

  1. 编辑grub文件:nano /etc/default/grub
  2. 找到GRUB_CMDLINE_LINUX_DEFAULT这一行:
1
2
3
4
5
6
7
...
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s <strong>2</strong>> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
...
  1. 附加参数iommu=pt,Intel和AMD芯片均可使用这个参数。
  2. 添加模块设置(5.4内核需自行添加,现行版本自带有添加):nano /etc/modules。没有如下内容需添加。
1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
  1. 刷新 initramfs:update-initramfs -u -k all
  2. 更新 grub:update-grub

4.6   直通i9-13900K核显UHD770给虚拟机Windows11

4.6.1   Intel 核显直通 optionROM方案

QEMU 9.2.0后的版本无法使用igd的ROM直通核显。例如PVE8.3.1版本的QEMU就不支持。回退到9.1.3版本再操作直通核显:apt install pve-qemu-kvm=9.1.2-3

注意BIOS设定:DVMT pre allocated,不要大过64M,64M对应x-igd-gms=0x2,如果超过64M,x-igd-gms要加大!

  1. 访问igd仓库,在仓库代码根路径下,下载gen12_gop.romgen12_igd.rom两个文件。
  2. 将这两个文件复制到/usr/share/kvm/目录下。
  3. 编辑Windows虚拟机配置文件(示例Windows虚拟机ID为103):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
nano /etc/pve/qemu-server/103.conf

# 添加下面三行
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on -debugcon fil>bios: ovmf
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=gen12_igd.rom
hostpci1: 0000:00:1f.3,romfile=gen12_gop.rom

# 以下是测试工作正常的完整配置
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on
bios: ovmf
boot: order=sata0
cores: 16
cpu: host
efidisk0: local-lvm:vm-103-disk-0,efitype=4m,size=4M
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=gen12_igd.rom
hostpci1: 0000:00:1f.3,romfile=gen12_gop.rom
machine: pc-i440fx-8.0
memory: 20480
meta: creation-qemu=9.2.0,ctime=1744108457
name: windows
net0: virtio=BC:24:11:C9:53:72,bridge=vmbr1,firewall=1
numa: 0
onboot: 1
ostype: win11
sata0: local-lvm:vm-103-disk-1,size=200G,ssd=1
sata1: win-hdd:103/vm-103-disk-0.raw,backup=0,size=1007G
scsihw: virtio-scsi-single
smbios1: uuid=eddc911c-c81f-4d48-9ae2-f8c7f6cee2c5
sockets: 1
startup: order=4,up=1
tpmstate0: local-lvm:vm-103-disk-2,size=4M,version=v2.0
vga: none
vmgenid: dc473f54-0098-45f9-92b8-d99320460696
  1. 注意在启动前,将虚拟机->硬件->显示->设置为「无 (none)」,即对应虚拟机配置文件的参数:vga: none
  2. 通过远程桌面连接RDP接入虚拟机系统,下载并安装最新的Intel的核显驱动(已测试正常的驱动版本32.0.101.6732,驱动程序日期:2025/4/1)。

5   创建PVE虚拟机

若机器硬件性能不太足够的话,不建议安装win系统,win系统极度消耗硬件性能(即便是空载待机状态也消耗很大),而这影响openwrt的性能。比如我的情况:安装了tiny10系统,千兆网线,宽带500M实测不到300Mbp/s(这里是指用广东联通宽带测速平台测试的结果,实际iKuai主路由测试速率却又正常),局域网速率最高只能到700Mbp/s的速率。关闭后tiny10后,实测宽带速率恢复正常,局域网速率跑到900Mbp/s出头)

5.1   PVE基础设置

  1. 访问WEB管理地址并登录:https://192.168.1.2:8006,账户:root。密码:[前面安装步骤设置的密码]。
  2. 根据硬件网卡情况,添加并设置好虚拟网桥Linux Bridge:创建>Linux Bridge>桥接接口填写物理网口地址名称。以我的机器为例,机器三个物理网口,PVE新建5个网桥,前三个网桥和物理网口绑定,第四个网桥用作iKuai和OpenWrt之间的传输,第五个网桥用作其他虚拟机系统的传输。

5.2   安装爱快iKuai

  1. 下载iKuai镜像:点击跳转
  2. local-内容-上传:iKuai的安装镜像文件。
  3. 创建虚拟机,命名虚拟机名称iKuai,VM编号100。
  4. CD/DVD光盘镜像文件选择刚上传的ISO镜像。
  5. 主硬盘分配2G,额外添加EFI磁盘(不勾选添加密钥),CPU给4核(host),内存分配4G(64位iKuai要求4G内存),网卡模型选择VirtIO(半虚拟化)。
  6. 完成新建后,在硬件标签页中继续完成添加所有网桥,网桥的防火墙全部关掉(使用iKuai的),模型都选择半虚拟化。
  7. 在选项标签页中把「开机自启动」开启,启动顺序设置为1,引导顺序只开disk‘xxxx’磁盘,把网络启动关掉,CD启动上移到第一位。
  8. 点击启动虚拟机,完成安装即可。
  9. iKuai内识别的第一个网卡设置为lan1。
  10. 输入字母o回车进入其「其他选项」,开启外网访问web。
  11. 访问WEB管理地址并登录:http://192.168.1.1:80。默认账户:admin。默认密码:admin。

5.3   安装OpenWrt(KVM虚拟机)

5.3.1   OpenWrt镜像的选择

  • Bleach OpenWrt:推荐(本教程使用该固件)。内置SmartDNS,软件包空间设置为1G,剩余五百多兆。
  • eSir GDQ 高大全:eSir的高大全固件。不推荐。没有内置SmartDNS拓展(我测试时安装SmartDNS并未出现有服务项,无效)。并且相较于Blench版本,较为繁琐。软件包空间只剩余几兆,需自己手动扩盘。

5.3.2   安装步骤

  1. 创建虚拟机,命名虚拟机名称openwrt,VM编号101。
  2. CD/DVD光盘镜像文件设置为无介质。
  3. 主硬盘随便分配(后续会删除),额外添加EFI磁盘(不勾选添加密钥),CPU给4核(KVM64),内存分配4G,网卡模型选择VirtIO(半虚拟化)。
  4. 网桥只选择第四个网桥(用作iKuai和OpenWrt之间的传输),网卡的防火墙全部关掉(使用iKuai的),模型选择半虚拟化。
  5. 下载OpenWrt镜像:见上一小节
  6. local-内容-上传:OpenWrt的镜像文件。
  7. 向虚拟机导入OpenWrt镜像:qm importdisk 101 /var/lib/vz/template/iso/bleach-plus-20230826-openwrt-x86-64-generic-squashfs-combined-efi.img local-lvm。(直接写盘即可,无需安装)。
  8. 在pve管理页面中,加载刚才导入镜像生成的磁盘。
  9. 在选项标签页中把「开机自启动」开启,启动顺序设置为2,引导顺序只开disk‘xxxx’磁盘,把网络启动关掉。
  10. 点击启动虚拟机。
  11. pve中用shell:vi /etc/config/network,将lan口ip改为192.168.1.3reboot重启。vim编辑:按i进入修改模式,按esc退出编辑模式,输入 :wq回车保存修改。
  12. 访问WEB管理地址并登录:http://192.168.1.3。默认账户:root。默认密码:password。

5.4   安装OpenWrt(LXC容器)

5.4.1   OpenWrt根文件镜像的选择

  • ImmortalWrt:推荐(本教程使用该固件)。选择ROOTFS (SQUASHFS)类型下载,编写教程时最新版本为immortalwrt-24.10.1-x86-64-generic-squashfs-rootfs.img.gz
  • OpenWrt官方固件

5.4.2   安装步骤

  1. 在PVE宿主机上安装squashfs-tools软件包:apt install squashfs-tools
  2. 下载OpenWrt根文件镜像:见上一小节
  3. 解压gz包:gunzip immortalwrt-24.10.1-x86-64-generic-squashfs-rootfs.img.gz(gunzip解压gz包之后会自动删除gz包的)。
  4. 解压img镜像文件:unsquashfs openwrt-x86-64-generic-squashfs-rootfs.img,解压路径为当前路径下的squashfs-root文件夹。
  5. 打包tar.gz格式,作为LXC模版:
1
2
3
cd squashfs-root
tar zcf /var/lib/vz/template/cache/immortalwrt-24.10.1-x86-64-generic-rootfs.tar.gz ./*
# 完成之后PVE的local的CT模板路径中就可以看到immortalwrt-24.10.1-x86-64-generic-rootfs.tar.gz文件了
  1. 手动创建LXC容器(这里不能用网页端选择LXC模板来创建,会报错),若需要后期编辑LXC虚拟机的配置项,使用命令编辑nano /etc/pve/lxc/101.conf
1
pct create 101 /var/lib/vz/template/cache/immortalwrt-24.10.1-x86-64-generic-rootfs.tar.gz --rootfs local-lvm:2 --ostype unmanaged --hostname openwrt --arch amd64 --cores 4 --memory 2048 --swap 0 -net0 bridge=vmbr4,name=eth0 -net1 bridge=vmbr4,name=eth1 --features nesting=1 --unprivileged 0

参数说明:

  • pct create 100: 创建一个 ID 为 100 的容器。
  • /var/lib/vz/template/cache/openwrt-x86-64-generic-rootfs.tar.gz: 指定要使用的根文件系统模板的路径。这里是 OpenWRT 的根文件系统。
  • --rootfs local-lvm:2: 设置容器的根文件系统存储位置。local-lvm表示使用local-lvm的空间,2表示分配2GB的存储空间。
  • --ostype unmanaged: 指定操作系统类型为"unmanaged",表示 Proxmox 不会对已知操作系统进行特定优化。
  • --hostname openwrt: 将容器的主机名设置为 openwrt。
  • --arch amd64: 指定容器的架构为 64 位(amd64)。
  • --cores 4: 分配 4 个 CPU 核心给容器。
  • --memory 2048: 分配 2048 MB 的内存给容器。
  • --swap 0: 分配 0 MB 的交换空间给容器。
  • --net0 bridge=vmbr0,name=eth0: 配置第一个网络接口,连接到 vmbr0 桥接,并将接口命名为 eth0。
  • --features nesting=1: 启用特定功能。nesting=1 允许嵌套虚拟化。
  • --unprivileged 0:表示使用特权模式(该选项一定要开启,否则OpenWrt的DNSMasq服务无法正常启动)
  1. 为容器追加额外的参数设置nano /etc/pve/lxc/101.conf
1
2
3
4
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.mount.auto: proc:mixed sys:ro cgroup:mixed
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

参数说明:这些配置项主要用于确保容器能够正常访问网络设备,并设置适当的权限和挂载点,以便 OpenWRT 能够正常工作。

  • lxc.cgroup2.devices.allow: a:允许容器访问所有设备。a 表示所有设备权限。
  • lxc.cap.drop::该参数用于指定要从容器中删除的 Linux 功能(capabilities)。如果没有指定任何功能,表示不删除任何功能。此项通常用于限制容器的特权。
  • lxc.mount.auto: proc:mixed sys:ro cgroup:mixed
    • lxc.mount.auto 用于自动挂载文件系统。
    • proc:mixed 表示以混合模式挂载 /proc 文件系统,允许容器访问进程信息。
    • sys:ro 表示以只读模式挂载 /sys 文件系统,容器可以读取系统信息但不能修改。
    • cgroup:mixed 表示以混合模式挂载 cgroup 文件系统,用于管理资源限制。
  • lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file:该参数用于手动挂载设备。
    • /dev/net/tun 是 TUN/TAP 虚拟网络设备的路径。
    • dev/net/tun 是容器内的挂载点。
    • none 表示不指定文件系统类型。
    • bind 表示将主机的设备绑定到容器中。
    • create=file 表示如果挂载点不存在则创建它。
  1. 在PVE管理网页打开进入LXC的shell,修改固件的LAN口IP,让OpenWrt可以访问外网:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vim /etc/config/network
service network restart

# 配置文件内容(请按自己的网络拓扑需求进行修改)
config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config globals 'globals'
option ula_prefix 'fdbb:d148:dd0e::/48'
option packet_steering '1'

config device
option name 'br-lan'
option type 'bridge'
list ports 'eth0'

config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '10.10.11.1'
option netmask '255.255.255.0'
option ip6assign '60'

config interface 'wan'
option device 'eth1'
option proto 'static'
option ipaddr '10.10.10.3'
option netmask '255.255.255.0'
option gateway '10.10.10.1'
list dns '114.114.114.114'
  1. 安装软件包:
    1. 美化皮肤:luci-i18n-argon-config-zh-cn
    2. OpenClash:luci-app-openclash

5.5   安装飞牛私有云fnOS

  1. 下载飞牛私有云fnOS镜像:点击跳转
  2. local-内容-上传:fnOS的安装镜像文件。
  3. 创建虚拟机,命名虚拟机名称fnOS,VM编号102。
  4. CD/DVD光盘镜像文件选择刚上传的ISO镜像。
  5. 主硬盘分配64G,额外添加EFI磁盘(不勾选添加密钥),CPU给4核(host),内存分配6G(fnOS系统内存需求还是有点大的),网卡模型选择VirtIO(半虚拟化)。
    • 其他硬盘后续自行根据需求添加。
  6. 网桥只选择第五个网桥(用作iKuai和fnOS之间的传输),网卡的防火墙全部关掉(使用iKuai的),模型选择半虚拟化。
  7. 在选项标签页中把「开机自启动」开启,启动顺序设置为3,引导顺序只开disk‘xxxx’磁盘,把网络启动关掉,CD启动上移到第一位。
  8. 点击启动虚拟机。
  9. 选择Graphical Install进行图形化安装流程。
  10. 选择系统主硬盘进行安装。
  11. 系统分区大小:64GB;Swap大小:0GB。(有论坛帖子反馈开启Swap cache时,某些下载应用例如QBittorrent可能会引导硬盘持续读取和CPU的异常占用。永久禁用Swap还需要修改fstab文件。)
  12. 点击确认安装,选择网卡界面,直接默认选项确认即可。
  13. 安装完成后,点击确认开始重启。摁ESC键,进入虚拟机BIOS设置界面,重新选择硬盘分区作为启动项启动。(否则默认启动CD)
  14. 出现Debian GNU/Linux系统引导选项就是安装成功了
  15. 进入到传统Linux登录界面(无GUI),这里能看到WEB管理地址。若需要固定IP地址,在iKuai中找到对应MAC地址加入静态分配表即可。
  16. 访问WEB管理地址并登录:http://192.168.1.5:5666/。首次访问会提示创建NAS设备名称``超级管理员账号``密码``确认密码

5.5.1   飞牛私有云fnOS的硬件直通设置

新版PVE无需额外设置什么直通参数,系统内核自带默认开启了IOMMU支持。

需要额外注意的一点是:安装飞牛系统时先不要加PCI设备,照常安装飞牛fnOS系统,正常设置完成之后,再关闭虚拟机添加PCI设备,例如核显和sata控制器(添加PCI设备->原始设备时,按默认参数即可,也无需勾选「所有功能」)。

  • 核显设备:Alder Lake-S GT1 [UHD Graphics 730]
  • SATA控制器:Alder Lake-S PCH SATA Controller [AHCI Mode]

5.6   创建虚拟机遇到的坑

5.6.1   添加EFI磁盘后,启动无法引导磁盘,出现shell界面。

原因:创建EFI磁盘时,勾选了添加密钥。

解决方法:创建EFI磁盘时,取消勾选添加密钥。

5.6.2   安装windows镜像,无法识别找到磁盘

原因:scsi不适合windows镜像,windows安装解决识别不到硬盘。

解决方法:创建硬盘时,总线/设备选择:SATA硬盘或者IDE。

5.6.3   安装windows镜像,网卡无驱动

现象:当网卡设置为virtio模型时,安装并进入到windows系统后,网卡无驱动。

原因:windows系统自带的驱动无此虚拟硬件的驱动。

解决方式:加载virtio镜像,并运行x64程序安装驱动即可。

VirtIO镜像下载地址:点击跳转

5.6.4   创建的Windows虚拟机运行一段时间自动挂起进入suspended状态

问题:创建的Windows虚拟机运行一段时间后,会自动挂起进入suspended状态,并且恢复resume系统状态会导致虚拟机内存占用瞬间吃满,然后无响应。

原因:虚拟机Windows系统自身有自动睡眠和关闭屏幕等设置,导致PVE的QEMU自动进入到挂起状态。

解决方法:关闭虚拟机Windows系统内电源设置的自动睡眠和自动关闭屏幕功能。

5.7   创建LXC容器遇到的坑

5.7.1   使用debian-12的CT模板创建LXC容器SSH终端中文乱码

1
2
3
4
5
6
7
8
apt install locales -y
# 需要重新设置语言的,也可以重新执行该命令
dpkg-reconfigure locales
# 使用Page Up和Page Down翻页查找这两种语言,使用空格确认复选框,tab键切换「确认」,然后回车执行
# en_US.UTF-8 UTF-8
# zh_CN.UTF-8 UTF-8
# 然后重启机器
init 6

5.7.2   非特权(unprivileged)LXC容器无法设置vm.max_map_count内核参数

报错提示:error: permission denied on key 'vm.max_map_count'

报错原因:因为非特权的LXC容器的/proc/sys是以只读方式挂载到容器里面,无法修改sysctl内核参数。

解决方法:在PVE宿主机上,使用sysctl -w vm.max_map_count=2000000命令设置vm.max_map_count内核参数。max_map_count默认值是262144。

  • 查看参数值:sysctl vm.max_map_count

5.7.2.1   补充知识点:namespace化的sysctl内核参数

vm.max_map_count属于内核参数,而vm.*参数并没有namespace化。只有namespace化的sysctl内核参数在容器内直接修改设置的时候,不会影响宿主机和其他容器。

已经namespace化的sysctl内核参数:

  • kernel.shm*
  • kernel.msg*
  • kernel.sem
  • fs.mqueue.*
  • net.*
    • net.netfilter.nf_conntrack_max(Linux 5.12.2之前并未namespace化)
    • net.netfilter.nf_conntrack_expect_max(Linux 5.12.2之前并未namespace化)

给LXC容器单独设置sysctl内核参数的方式:

  • 为LXC容器开启特权选项--privileged,对应/proc目录的挂载方式为rw,可以直接在容器内使用命令修改参数了。若修改的是namespaced参数,则不会影响宿主机和其他容器。
  • /proc/sysbind到容器里面,该方式和--privileged效果类似。

给docker容器单独设置sysctl内核参数的方式:

  • --privilegeddocker run --privileged -it ubuntu bash,该方式启动后,可以通过命令任意修改sysctl参数。
  • 把/proc/sys bind到容器里面,再具体写值,和上面的效果类似。
    1. docker run -v /proc/sys:/writable-sys -it ubuntu bash
    2. echo 62 > /writable-sys/net/ipv4/ip_default_ttl
  • --sysctldocker run -it --sysctl 'net.ipv4.ip_default_ttl=63' ubuntu sysctl net.ipv4.ip_default_ttl
    • 只有namespaced参数才可以。否则会报错"invalid argument..."
    • 这种方式只是在容器初始化过程中完成内核参数的修改,容器运行起来以后,/proc/sys仍然是以只读方式挂载的,在容器中不能再次修改sysctl内核参数。

5.7.3   创建的LXC容器debian-12系统时间与宿主机时间不一致

使用debian-12的CT模板默认使用的是世界时设置,比东八区时间慢八小时,因此需要手动设置时区。

  • 方法1:timedatectl set-timezone Asia/Shanghai
  • 方法2:dpkg-reconfigure tzdata

验证修改是否成功:timedatectl

5.7.4   在PVE管理页面工具选择OpenWrt的自建LXC模板来创建LXC会报错

报错提示:

1
2
3
4
5
6
7
8
9
10
  Logical volume "vm-101-disk-0" created.
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 0d6d0789-09cb-4564-95be-c04ba88481bb
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
extracting archive '/var/lib/vz/template/cache/immortalwrt-24.10.1-x86-64-generic-rootfs.tar.gz'
Total bytes read: 39229440 (38MiB, 176MiB/s)
unknown ID 'immortalwrt' in /etc/os-release file, trying fallback detection
Logical volume "vm-101-disk-0" successfully removed.
TASK ERROR: unable to create CT 101 - unable to detect OS distribution

报错原因:PVE管理页面工具无法识别该LXC模板的系统类型。

解决方法:使用pct create手动创建LXC容器。

5.7.5   非特权模式的OpenWrt的LXC容器网络访问问题

使用unprivileged 1非特权模式创建的LXC容器,OpenWrt的DNSMasq服务无法正常启动,这种模式下网络可以ping通IP,但无法解析域名,提示报错ping: bad address 'qq.com',因为DNSMasq服务异常。

临时解决方法:若需要在这种情况下临时访问外网,直接修改/etc/resolv.conf文件即可,追加可用的DNS服务器IP即可。

1
2
3
4
5
6
7
8
vim /etc/resolv.conf

# 配置文件内容
search lan
nameserver 127.0.0.1
nameserver ::1
# 追加可用的DNS服务器
nameserver 8.8.8.8

6   路由方案一:iKuai主路由+OpenWRT传统旁路由的网络拓扑

iKuai作为主路由,负责拨号及DHCP,OpenWRT做旁路由。SmartDNS+AdGuardHome设置分流与去广告。SmartDNS作为DNS管理并提供DNS缓存,实现国内国外DNS分流,彻底解决DNS污染问题、实现秒开网页。同时搭配AdGuardHome实现整个局域网去广告。

DNS转发流程:设置最核心的部分就是DNS转发端口的衔接,就是把DNSMASQ、Adguardhome、SmartDNS三个插件里的DNS服务器功能分成三个层级,实现层层转发。依次是第一级DNSMASQ,第二级Adguardhome,第三级SmartDNS,第四级OpenClash。

6.1   iKuai的设置

  • 系统设置>重启关机>添加一个重启计划:每天05:00时重启。
  • 网络设置>内外网设置
    • 外网接口(选择iKuai识别到的第二个网口):填入宽带拨号信息。
    • 内网接口(iKuai识别到的第一个网口,IP地址192.168.1.1):链路桥接(选择剩余的其他全部接口)
  • DHCP设置>DHCP服务端
    • 单iKuai版:
      • 客户端地址:192.168.1.10-192.168.1.254(1-9留给专用设备的管理地址)
      • 子网掩码:255.255.255.0
      • 网关:192.168.1.1
      • 首选DNS:223.5.5.5
      • 备选DNS:114.114.114.114
    • iKuai+OpenWrt版本:
      • 客户端地址:192.168.1.10-192.168.1.254(1-9留给专用设备的管理地址)
      • 子网掩码:255.255.255.0
      • 网关:192.168.1.3
      • 首选DNS:192.168.1.3
      • 备选DNS:192.168.1.3
  • DNS设置>DNS设置
    • 单iKuai版:
      • 首选DNS:223.5.5.5
      • 备选DNS:114.114.114.114
    • iKuai+OpenWrt版本:
      • 首选DNS:192.168.1.3
      • 备选DNS:192.168.1.3
  • UPnP设置>UPnP设置
    • UPnP即插即用服务:开启
    • 允许内网IP映射:0.0.0.0-255.255.255.255
    • 默认线路设置:任意
    • 掉线检测:开启
    • 检测周期:2
    • 定时重启:开启
    • 重启周期:全选
    • 重启时间:05:00。

6.2   OpenWrt设置

6.2.1   定时重启

系统>定时重启:启用,设置每天05:00。

6.2.2   网络

6.2.2.1   接口>LAN

  • IPv4地址:192.168.1.3。管理OpenWrt的地址。
  • 和iKuai一致保证同一个网段。
  • IPv4网关:指向iKuai的网关。保证OpenWrt的上网数据传输到iKuai再传输到外网。
  • 使用自定义的DNS服务器:223.5.5.5(初始先设置阿里云DNS保证设置过程的上网)。后面等设置好SmartDNS之后改由OpenWrt代理,即输入192.168.1.3。
  • 关闭DHCP服务,统一由iKuai分配。
  • 禁用掉IPv6服务。
  • 物理设置:桥接接口。(因为选用的也是)
  • lan高级设置:不勾选IPv6,勾选【开启开机自动运行】和【强制链路】。

6.2.2.2   Turbo ACC 加速

只开启前三个即可,DNS缓存后面由SmartDNS来管理。

6.2.2.3   防火墙设置

  • SYN-flood 防御:关闭(此项开启关闭都行)
  • 丢弃无效数据包:启用(此项开启关闭都行)
  • 启用FullCone-NAT:高性能模式
  • 入站数据、出站数据、转发都设置为接受。
  • lan口开启:IP 动态伪装(只保留lan口的规格,其他接口全部删除)
  • 防火墙自定义规则(一般默认就有前四条规则,没有需加上)
1
2
3
4
5
iptables -t nat -A PREROUTING -p udp —dport 53 -j REDIRECT —to-ports 53
iptables -t nat -A PREROUTING -p tcp —dport 53 -j REDIRECT —to-ports 53
[ -n “$(command -v ip6tables)” ] && ip6tables -t nat -A PREROUTING -p udp —dport 53 -j REDIRECT —to-ports 53
[ -n “$(command -v ip6tables)” ] && ip6tables -t nat -A PREROUTING -p tcp —dport 53 -j REDIRECT —to-ports 53
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

6.2.3   SmartDNS

Bleach OpenWrt固件自带SmartDNS,eSir GDQ高大全固件需自行手动安装。

  • 基本设置
    • 启用
    • 本地端口6053
  • 高级设置
    • 开启TCP服务器
    • 勾选域名预加载
    • 勾选缓存过期服务
    • 缓存大小设为:1000000
    • 域名TTL最大值设为:3600
  • 第二DNS服务器
    • 启用
    • 本地端口5335
    • TCP服务器
    • 服务器组:oversea
    • 跳过测速
    • 跳过address规则
    • 跳过address SOA(#)规则
    • 跳过双栈优选
    • 跳过cache
    • 停用IPV6地址解析
  • 上游服务器(添加DNS的设置里面可以设置服务器组)
    • 服务器组名称:china(10条左右,包含iKuai路由宽带拨号返回的两个宽带供应商提供的DNS)
      1. iKuai路由宽带拨号返回的宽带供应商提供的DNS1,udp协议
      2. iKuai路由宽带拨号返回的宽带供应商提供的DNS2,udp协议
      3. 114dns,114.114.114.114,udp协议
      4. 114dns,114.114.115.115,udp协议
      5. opener dns,42.120.21.30,udp协议
      6. 阿里dns,223.5.5.5,udp协议
      7. 阿里dns,223.6.6.6,udp协议
      8. 腾讯dns,119.29.29.29,udp协议
      9. 百度dns,180.76.76.76,udp协议
      10. 华为dns,122.112.208.1,udp协议
    • 服务器组名称:oversea(10条左右)
      1. google dns,8.8.8.8,udp协议
      2. google dns,8.8.4.4,tls协议
      3. CloudFlare,1.1.1.1,udp协议
      4. IBM Quad9,9.9.9.9,udp协议
      5. Norton ConnectSafe,199.85.126.10,udp协议
      6. Norton ConnectSafe,199.85.127.10,udp协议
      7. OpenDNS,208.67.222.222,tls协议
      8. OpenDNS,208.67.220.220,udp协议
      9. V2EX DNS,199.91.73.222,tls协议
      10. V2EX DNS,178.79.131.110,tls协议
  • 域名规则
    • 服务器组:china
    • 域名分流设置:跳过测试
  • 自定义设置(只设置两条,其他全部注释掉)
1
2
bind:6053 -group china
bind:5335 -group oversea
  • 保存&应用

6.2.4   AdGuard Home

6.2.4.1   手动更新内核

  1. 下载最新的AdGuardHome内核(AdGuardHome_linux_amd64.tar.gz):点击跳转
  2. 解压获取「AdGuardHome」文件。
  3. 使用WinSCP登录openwrt虚拟机,进入到路径/usr/bin/AdGuardHome/,上传「AdGuardHome」文件。右击属性,分配权限0755(rwxr-xr-x)。

能科学上网时,点击检查更新,直接更新核心即可。

6.2.4.2   设置AdGuard Home

  • 启用
  • AdGuardHome重定向模式:作为dnsmasq的上游服务器
  • 详细日志
  • 开机后网络准备好时重启
  • 在关机时备份工作目录文件(所有的选项)
  • 打开192.168.1.3:3000地址并配置
  • 网页管理界面>监听接口>所有接口,端口号设置为默认的3000
  • DNS 服务器>监听接口>所有接口,端口号设置为5351
  • 网页管理界面登录密码
  • 设置>常规设置>使用过滤器和Hosts文件以拦截指定域名(其他选项全部关闭)
  • 设置>DNS设置
    • 上游 DNS 服务器
      1
      2
      127.0.0.1:6053
      127.0.0.1:5335
      • 并行请求
      • Bootstrap DNS:127.0.0.1:6053
      • 应用
    • DNS服务配置
      • 速度限制:0
      • DNS 缓存配置:都空着(采用上游DNS服务器,让SmartDNS来管理)
  • 设置>过滤器>DNS黑名单设置(将阻止匹配 DNS 拦截清单的域名):综合性的规则列表启用几个即可。

6.2.5   DNSMASQ设置

打开网络>DHCP/DNS。主要是解除DNSMASQ的DNS功能,只保留转发功能,让DNSMASQ作为AdGuard Home的下级服务生效。

  • DNS转发:127.0.0.1#5351。如果未自动设置成这个,手动强制改成这个。
  • HOSTS 和解析文件:忽略掉解析文件,不用DNSMASQ的解析。
  • 高级设置
    • DNS服务器端口:53
    • DNS查询缓存的大小:0
    • 最大并发查询数:1500
  • 保存&应用

6.2.6   OpenClash

实测,Meta内核因DNS转发问题,导致无法正常上网。例如GOOGLE可能会出现证书异常的问题,YOUTUBE点击视频后会存在一直转圈圈的情况,无法加载视频。现阶段稳定工作的模式为:Fake-IP的普通TUN模式,模型模式可调TUN或者混合(TUN模式需要有TUN内核支持)。代理模式使用规则上网即可。

v0.46.014-beta是最后一版支持TUN内核的版本,往后一版的v0.46.031-beta版本就开始移除Dev和TUN内核的支持,如果手动操作更新OpenClash版本,会自动移除Dev和TUN内核文件。即使手动通过WinSCP上传Dev和TUN内核文件,软件内也是无法识别到的。

6.2.6.1   更新客户端

  1. 下载客户端安装包:点击跳转
  2. 使用WinSCP登录openwrt虚拟机,进入到路径家目录home,上传安装包,运行安装opkg install ./luci-app-openclash_0.46.014-beta_all.ipk。如果报错,尝试opkg update

6.2.6.2   手动更新内核

内核下载地址:

新的内核只支持fake-ip,需要上传Meta内核。

能科学上网时,点击检查并更新,直接更新核心即可。

更新步骤:

  1. 下载内核。
  2. 使用WinSCP登录openwrt虚拟机,进入到路径/etc/openclash/core,上传内核文件。右击属性,分配权限0755(rwxr-xr-x)。

内核对应的名称(压缩包解压出来的名称不一定对应,需手动修改):

  • Dev 内核: clash
  • Tun 内核: clash_tun
  • Meta 内核: clash_meta

6.2.6.3   OpenClash设置

  • 运行状态:启动OPENCLASH
  • 插件设置
    • 模式设置>运行模式:Fake-IP(TUN-混合)模式【UDP-TUN,TCP-转发】
    • DNS设置>本地DNS劫持:停用
    • GEO数据库订阅:设置自动更新
    • 大陆白名单订阅:设置自动更新
  • 配置订阅:设置自动更新,更新间隔60分钟

6.2.7   扩容Overlay软件安装空间

  1. 关闭openwrt虚拟机。
  2. 硬件>硬盘>更多,调整磁盘大小(只能增加大小,按需增加所需硬盘的空间大小)。
  3. 打开openwrt虚拟机。
  4. 系统>磁盘管理L:将新增磁盘大小新建一个分区并格式化为ext4,保存并应用
  5. 挂载刚才新增的分区,举例sda3:mount /dev/sda3 /mnt/sda3,保存并应用。
  6. 拷贝源overlay目录的文件到新分区内:cp -r /overlay/* /mnt/sda3
  7. 系统>挂载点:添加sda3挂载点为「作为外部overlay使用(/overlay)」,保存并应用。
  8. 重启openwrt虚拟机,检查扩容情况。
  9. 根据情况可能需手动移除之前挂载的/mnt/sda3状态。

7   路由方案二:iKuai主路由+OpenWrt旁路由分流的网络拓扑

7.1   iKuai主路由设置

大陆地区IP列表

7.2   OpenWrt旁路有设置

TODO

7.3   构建本地机场订阅转换服务

相关核心项目:

7.3.1   PVE新建一个debian虚拟机

使用LXC模板(debian-12-standard),完成创建之后,并登录该debian虚拟机(可设置SSH连接)

  • 容器名称:sub-converter
  • 内存:2GB(别分配1.5GB以下的内存,否则不够内存完成构建docker镜像)(构建完成docker镜像后,内存可以调整为512MB)
  • Swap:0B
  • 核心:4核心(构建完成docker镜像后,核心可以调整为1)
  • 根磁盘:5GB(别分配2GB以下的磁盘,否则不够空间完成构建docker镜像)
  • 网络:选择已分配给主路由LAN口的网桥(我的情况是:vmbr4,IP静态地址:10.10.10.6/24,网关:10.10.10.1)

7.3.2   设置优化debian虚拟机

  1. 为debian修改apt镜像源:替换PVE-8-x的Debian系统软件源和PVE软件源(国内镜像)
  2. 为debian安装docker:使用apt仓库为Debian安装docker
  3. 为debian系统设置时区:创建的LXC容器debian-12系统时间与宿主机时间不一致
  4. 为debian系统设置UTF-8语言环境:使用debian-12的CT模板创建LXC容器SSH终端中文乱码

7.3.3   手动重新构建前端docker镜像

  1. 克隆前端项目
1
git clone https://github.com/CareyWang/sub-web.git
  1. 进入对应仓库路径cd sub-web
  2. 修改.env文件内容:nano .env
1
2
3
4
5
6
7
# 找到以下三行内容,并修改自己的域名或者IP
# VUE_APP_SUBCONVERTER_DEFAULT_BACKEND = "https://api.wcc.best"
# VUE_APP_MYURLS_API = "https://suo.yt/short"
# VUE_APP_CONFIG_UPLOAD_API = "https://oss.wcc.best/upload"

# 这是笔者修改的配置
VUE_APP_SUBCONVERTER_DEFAULT_BACKEND = "http://10.10.10.6:25500"
  1. 修改Subconverter.vue文件内容:nano src/views/Subconverter.vue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 搜索127.0.0.1内容,并修改为10.10.10.6(该IP是LXC容器debian使用的IP)
# placeholder="动动小手,(建议)自行搭建后端服务。例:http://127.0.0.1:25500/sub?">
# backendOptions: [{ value: "http://127.0.0.1:25500/sub?" }],

# 这是笔者修改的配置
placeholder="动动小手,(建议)自行搭建后端服务。例:http://10.10.10.6:25500/sub?">
backendOptions: [{ value: "http://10.10.10.6:25500/sub?" }],

# 搜索remoteConfig: [
# 在下一行添加ACL4SSR的规则配置。
# 效果如下:
remoteConfig: [
{
label: "ACL4SSR",

ACL4SSR规则配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
{
label: "ACL4SSR",
options: [
{
label: "ACL4SSR_Online 默认版 分组比较全 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online.ini"
},
{
label: "ACL4SSR_Online_AdblockPlus 更多去广告 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_AdblockPlus.ini"
},
{
label: "ACL4SSR_Online_NoAuto 无自动测速 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoAuto.ini"
},
{
label: "ACL4SSR_Online_NoReject 无广告拦截规则 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoReject.ini"
},
{
label: "ACL4SSR_Online_Mini 精简版 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini.ini"
},
{
label: "ACL4SSR_Online_Mini_AdblockPlus.ini 精简版 更多去广告 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_AdblockPlus.ini"
},
{
label: "ACL4SSR_Online_Mini_NoAuto.ini 精简版 不带自动测速 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_NoAuto.ini"
},
{
label: "ACL4SSR_Online_Mini_Fallback.ini 精简版 带故障转移 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_Fallback.ini"
},
{
label: "ACL4SSR_Online_Mini_MultiMode.ini 精简版 自动测速、故障转移、负载均衡 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_MultiMode.ini"
},
{
label: "ACL4SSR_Online_Full 全分组 重度用户使用 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full.ini"
},
{
label: "ACL4SSR_Online_Full_NoAuto.ini 全分组 无自动测速 重度用户使用 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_NoAuto.ini"
},
{
label: "ACL4SSR_Online_Full_AdblockPlus 全分组 重度用户使用 更多去广告 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_AdblockPlus.ini"
},
{
label: "ACL4SSR_Online_Full_Netflix 全分组 重度用户使用 奈飞全量 (与Github同步)",
value:
"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_Netflix.ini"
},
{
label: "ACL4SSR 本地 默认版 分组比较全",
value: "config/ACL4SSR.ini"
},
{
label: "ACL4SSR_Mini 本地 精简版",
value: "config/ACL4SSR_Mini.ini"
},
{
label: "ACL4SSR_Mini_NoAuto.ini 本地 精简版+无自动测速",
value: "config/ACL4SSR_Mini_NoAuto.ini"
},
{
label: "ACL4SSR_Mini_Fallback.ini 本地 精简版+fallback",
value: "config/ACL4SSR_Mini_Fallback.ini"
},
{
label: "ACL4SSR_BackCN 本地 回国",
value: "config/ACL4SSR_BackCN.ini"
},
{
label: "ACL4SSR_NoApple 本地 无苹果分流",
value: "config/ACL4SSR_NoApple.ini"
},
{
label: "ACL4SSR_NoAuto 本地 无自动测速 ",
value: "config/ACL4SSR_NoAuto.ini"
},
{
label: "ACL4SSR_NoAuto_NoApple 本地 无自动测速&无苹果分流",
value: "config/ACL4SSR_NoAuto_NoApple.ini"
},
{
label: "ACL4SSR_NoMicrosoft 本地 无微软分流",
value: "config/ACL4SSR_NoMicrosoft.ini"
},
{
label: "ACL4SSR_WithGFW 本地 GFW列表",
value: "config/ACL4SSR_WithGFW.ini"
}
]
},
  1. 重新构建docker本地镜像
1
docker build -t subweb-local:latest .

7.3.4   在root账户用户路径下新建docker-compose.ymlnano docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
services:
subc:
hostname: subc
restart: always
container_name: subc
image: tindy2013/subconverter:latest
environment:
- TZ=Asia/Shanghai
ports:
- "25500:25500"
subweb:
hostname: subweb
restart: always
container_name: subweb
image: subweb-local:latest
environment:
- TZ=Asia/Shanghai
ports:
- "80:80"

7.3.5   运行docker compose

1
docker compose -f docker-compose.yml up -d

7.3.6   验证服务是否运行成功

访问前端页面:http://10.10.10.6

通过tcping验证各个端口是否都正常:

  • tcping 10.10.10.6 80
  • tcping 10.10.10.6 25500

8   PVE总结

8.1   PVE(Proxmox VE)虚拟机各硬件模型总结

TODO

8.2   PVE虚拟机磁盘容量调整

  • LXC容器的磁盘,在网页控制台设置增加大小,容器会自动增加对应的磁盘分区大小,无需手动在虚拟机系统格式化和挂载。

8.3   PVETOOLS脚本程序推荐

新硬件主机不太推荐安装该脚本,CPU省电相关设置不一定能正常设置成功,恢复时也容易出问题。

  • PVETOOLS仓库地址:点击跳转
  • 安装步骤(PVE SHELL执行命令):
1
2
3
4
export LC_ALL=en_US.UTF-8
apt update && apt -y install git && git clone https://github.com/ivanhao/pvetools.git
cd pvetools
./pvetools.sh
  • 执行脚本程序后,可以一键执行「安装配置CPU省电」「配置PVE的web界面显示传感器温度」「去除订阅提示」等功能。

9   PBS(Proxmox Backup Server)总结

9.1   PBS备份计划

重要服务器虚拟机,可以将备份时间设置为半小时。

9.2   PBS服务器备份精简计划

PBS备份精简计划设置效果模拟器:https://pbs.proxmox.com/docs/prune-simulator/index.html

保留设置:

  • keep-last: 3 - 保留最近 3 次的备份。
  • keep-hourly: not set - 若设置了每日备份,这个选项一般无需设置
  • keep-daily: 13 - 与 keep-last 一起使用,确保至少有两周的每日备份
  • keep-weekly: 8 - 确保至少有两个月的每周备份
  • keep-monthly: 11 - 与之前的保留设置一起,这确保至少有一年的每月备份
  • keep-yearly: 9 - 确保至少 10 年的覆盖

9.3   PBS使用遇到的坑

9.3.1   ERROR: Backup of VM 102 failed - lvcreate snapshot 'pve/snap_vm-102-disk-0_vzdump' error

问题现象:PBS备份服务器或者PVE备份LXC虚拟机容器时出现失败,具体报错信息为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
INFO: Starting Backup of VM 102 (lxc)
INFO: Backup started at 2025-04-25 00:30:36
INFO: status = running
INFO: CT Name: test
INFO: including mount point rootfs ('/') in backup
INFO: backup mode: snapshot
INFO: ionice priority: 7
INFO: create storage snapshot 'vzdump'
snapshot create failed: starting cleanup
no lock found trying to remove 'backup' lock
ERROR: Backup of VM 102 failed - lvcreate snapshot 'pve/snap_vm-102-disk-0_vzdump' error: Logical Volume "snap_vm-102-disk-0_vzdump" already exists in volume group "pve"
INFO: Failed at 2025-04-25 00:30:36
INFO: Backup job finished with errors
INFO: notified via target `mail-to-root`
TASK ERROR: job errors

问题原因:有残留的同名逻辑卷/dev/pve/snap_vm-102-disk-0_vzdump,一般是上次备份成功之后的清理操作失败导致残留下来的逻辑卷,例如卸载操作失败command 'umount -l -d /mnt/vzsnapo/ failed: got signal 11

解决方法:

  1. 查看当前PVE系统中存在的逻辑卷:lvdisplay,可以查看到/dev/pve/snap_vm-102-disk-0_vzdump逻辑卷属性LV Write Access read only是只读。其他查看命令lvslvscan
  2. 清理残留的逻辑卷:
    • 方法一:lvremove /dev/pve/snap_vm-102-disk-0_vzdump
    • 方法二:PVE后台网页控制面板中,对应的虚拟机选项->快照,可以选中对应的vzdump快照删除。

若遇上报错:lvremove /dev/pve/snap_vm-102-disk-0_vzdump' error: Logical volume pve/snap_vm-102-disk-0_vzdump contains a filesystem in use.,请尝试

  • 方案1:重启PVE宿主机
  • 方案2:添加-f参数强制删除,lvremove -f /dev/pve/snap_vm-102-disk-0_vzdump

10   iKuai总结

10.1   iKuai爱快内网测试

iKuai爱快内置支持iperf3内网测试工具,但服务端默认并未开启。

开启服务端设置和测试的步骤

  1. 在iKuai爱快中设置:应用工具->吞吐测试->服务端功能开关(勾选启用)
  2. 下载iperf3到客户端机器。
  3. 运行测试命令:iperf3 -c 192.168.1.1

客户端机器作为服务端的设置步骤:

  1. 下载iperf3到客户端机器。
  2. 运行测试命令:iperf3 -s -p 5201
  3. 在iKuai爱快的客户端工具连接客户端IP测试。

10.2   iKuai报错提示:写入数据失败,请检查你的配置!

问题:调整iKuai设置,无法保存设置,并报错提示:写入数据失败,请检查你的配置!具体变现为修改配置后,刷新页面后发现设置跟以前一样,并且无法记录流量数据等日志。

原因:磁盘所有分区变成只读模式,没有读写权限,数据无法正常保存。

排查确认方法:iKuai管理后台->应用工具->健康检测。

解决方法:强制断电重启机器。若仍然无法识别到硬盘或者反复出现这种只读权限问题,很可能硬盘出故障,请尽快备份设备文件并更换新硬盘。

10.3   局域网内双iKuai主路由的DHCP的设置

局域网内若有两个iKuai主路由同时提供DCHP服务,并且两个主路由物理上联通的话(两接口分别归属于各自的LAN口),可以在网络设置->DHCP设置->DHCP服务端->关联接口->取消勾选两个路由互联的接口。避免两主路由互相跨网段提供DHCP服务,否则会有潜在的广播风暴问题。(该问题在iKuai路由体检功能也能发现)

10.4   局域网内双iKuai主路由跨网段互相访问(静态路由)

背景假设:一个iKuai地址为192.168.1.1,另一个iKuai地址为192.168.2.1

  1. 为网段1的iKuai新增扩展IP:网络设置->内外网设置->LAN1->高级设置->扩展IP->新增一个不归属于两个主路由网段的IP,例如192.168.5.1
    • 同理,另外一个iKuai新增IP为192.168.5.2
  2. 为网段1的iKuai设置静态路由表:网络设置->静态路由->添加->目的地址:192.168.2.0,子网掩码255.255.255.0 (24),网关:192.168.5.1
    • 同理,另外一个iKuai置静态路由表:目的地址:192.168.1.0,子网掩码255.255.255.0 (24),网关:192.168.5.2
    • iKuai静态路由的网关就是指下一跳。

11   OpenWrt总结

11.1   OpenClash报错all DNS requests failed或者dns resolve failed

问题:通过机场订阅配置后,发现部份被分流到海外的IP和域名无法正常访问。查看OpenClash后台的内核日志,是因为有大量的all DNS requests failed或者dns resolve failed错误提示。并且该现象只会出现在个别机场订阅上,有些机场订阅是正常工作。

原因:部份机场比较挑剔OpenClash的DNS设置。

解决方法:OpenClash->覆写设置->DNS设置
FallBack和Default-NameServer的DNS设置比较重要,对于笔者而言,8.8.4.4, UDP是能有效解决上述问题。

  • 【勾选】自定义上游DNS服务器
  • 【勾选】追加上游DNS
  • 【勾选】追加默认DNS
  • 【勾选】Fallback-Filter
  • 设置自定义上游 DNS 服务器(在上方设置中启用本功能后生效)
    • NameServer
      • 223.5.5.5/dns-query, HTTPS
      • 223.6.6.6/dns-query, HTTPS
      • 8.8.8.8, UDP
    • FallBack
      • 8.8.4.4, UDP
    • Default-NameServer
      • 114.114.114.114, UDP
      • 223.5.5.5, UDP
      • 8.8.8.8, UDP
      • 8.8.4.4, UDP

12   飞牛私有云fnOS(NAS总结)

12.1   下载应用例如QBittorrent在后台上传时可能会引导硬盘持续读取和CPU的异常占用。

问题原因:系统Swap cache功能引起引起硬盘持续读取和CPU的异常占用。

解决方法:永久禁用Swap cache功能。

  1. 访问fnOS虚拟机控制台。
  2. 登录fnOS账户。
  3. sudo vim /etc/fstab
  4. I键进入vim编辑器编辑模式
  5. 找到/swapfile none swap sw 0 0一行内容并注释掉,即在行头加上#
  6. ESC键,摁:键然后输入wq!保存退出。
  7. cat /etc/fstab可以查看文件内容是否修改成功,输出内容如下:
1
2
3
UUID=ea545bcc-cd3f-479f-902a-ab2b02db25 / ext4 errors=remount-ro 0 1
# /swapfile none swap sw 0 0
UUID=676D-A1AF /boot/efi vfat umask=0077 0 1

13   宽带网络总结

13.1   会话数(连接数)

会话数(连接数)在线测试工具:https://qps.itzmx.com

连接数为应用产生的网络连接数,例如在爱快首页上看到连接数。并发连接数为 qps ,即每秒发起请求,等于在同一秒内,产生了 250 个请求。

会话数(连接数)的限制,一般普通线路带宽会有会话数限制,专线则没有该限制。触发限制的常见现象为:超过并发连接数上限后,此前已建立连接数的软件和网络请求可正常通信,并且期间ping一切正常,延迟没有任何抖动现象,但是新开软件则连不上网络。

14   后记

这光猫还是有断流情况,估计是过热导致掉线,后续考虑下加装小风扇。

断流降速故障已查明:虚拟网卡模型设置为Intel E1000导致的故障,重设为VirtIO (半虚拟化)即可解决。

在这台工控机上实际使用openwrt内网测速工具发现,虚拟机网卡模型设置为Intel E1000或者Realtek RTL8139都无法正常发挥网卡的性能,Intel E1000大约测试性能为100Mbps~300Mbps不等,Realtek RTL8139模型是最为拉跨的,直接为10Mbps。使用VirtIO (半虚拟化)模型内网测速才能恢复到900Mbps以上的正常速度。

15   All in One (All in Boom) 机器硬件选型总结

15.1   CPU选型对比

All in One用途大多是使用虚拟机方案实现各子系统,其中虚拟化直通硬件方案需要CPU中一个很重要的功能才能实现。对于Intel CPU来说,就是VT-d(该功能可以在Intel官方每个CPU SKU规格页面查看是否支持);对于AMD CPU来说,就是IOMMU,也称AMD-Vi(暂未找到AMD官方资料特性说明,根据维基百科资料所言,所有 Ryzen 处理器均支持该功能)。

CPU型号内核/线程功耗/W频率/GHz核显最大分辨率最大内存规格/GBVT-xVT-d
赛扬®J19004/4102~2.42未知2×8 DDR3L 1333MT/s支持不支持
奔腾®N35304/44.5~7.52.16~2.58未知2×8 DDR3L 1333MT/s支持不支持
奔腾®J42054/4101.5~2.6未知2×8 LPDDR4 2400 MT/s
DDR3L/LPDDR3 1866 MT/s;
支持支持
赛扬®J41254/4102~2.7DP:4096x2160@60Hz
HDMI:4096x2160@30Hz
eDP:4096x2160@60Hz
2×8 DDR4/LPDDR4 2400MT/s支持支持
赛扬®J64124/4102~2.6DP:4096 x 2160@60Hz
eDP:4096 x 2160@60Hz
4x32 LPDDR4/x 3733MT/s
2x64 DDR4 3200MT/s
支持支持
N1004/463.4DP:4096 x 2160@60Hz
HDMI:4096 x 2160@60Hz
16 DDR5 4800 MT/s
16 DDR4 3200 MT/s
16 LPDDR5 4800 MT/s
支持支持
酷睿™ i7-1255U10/1212~55E核3.5
P核4.7
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2304 @ 60Hz
eDP:4096 x 2304 @ 120Hz
64 LDDR5 4800 MT/s
64 DDR4 3200 MT/s
64 LPDDR5 5200 MT/s
64 LPDDR4x 4267 MT/s
支持支持
酷睿™ i3-121004/860~89无E核
P核3.3~4.3
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2160 @ 60Hz
eDP:5120 x 3200 @ 120Hz
128 DDR5 4800 MT/s
128 DDR4 3200 MT/s
支持支持
酷睿™ i3-123004/860~89无E核
P核3.5~4.4
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2160 @ 60Hz
eDP:5120 x 3200 @ 120Hz
128 DDR5 4800 MT/s
128 DDR4 3200 MT/s
支持支持
酷睿™ i5-124006/1265~117无E核
P核2.5~4.4
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2160 @ 60Hz
eDP:5120 x 3200 @ 120Hz
128 DDR5 4800 MT/s
128 DDR4 3200 MT/s
支持支持
酷睿™ i3-131004/860~110无E核
P核3.4~4.5
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2160 @ 60Hz
eDP:5120 x 3200 @ 120Hz
192 DDR5 4800 MT/s
192 DDR4 3200 MT/s
支持支持
酷睿™ i3-141004/860~110无E核
P核3.5~4.7
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2160 @ 60Hz
eDP:5120 x 3200 @ 120Hz
192 DDR5 4800 MT/s
192 DDR4 3200 MT/s
支持支持
酷睿™ i7-12700K12/20125-190E核2.7~3.8
P核3.6~4.9
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2160 @ 60Hz
eDP:5120 x 3200 @ 120Hz
128 DDR5 4800 MT/s
128 DDR4 3200 MT/s
支持支持
酷睿™ i7-1265U10/1212~55E核3.6
P核4.8
DP:7680 x 4320 @ 60Hz
HDMI:4096 x 2304 @ 60Hz
eDP:4096 x 2304 @ 120Hz
64 DDR5 4800 MT/s
64 DDR4 3200 MT/s
64 LPDDR5 5200 MT/s
64 LPDDR4x 4267 MT/s
支持支持

BUG处理器的折腾性思考:小黄鱼上面流通不少Intel 12代ES测试版处理器,不同步进版本存在不同问题,例如CPU没有内建直连独立显卡的PCI-E通道,会导致所有主板上第一根直连独立显卡的PCI-E X16插槽无效。这类BUG CPU虽然价格看着很诱惑,但可能实际运行不稳定,因此不纳入All in One硬件选型考虑范围。

15.2   主板选型对比

主板型号内存插槽供电网口情况SATA支持M.2支持PCIe通道显示接口PCB设计板层
云星Matx-Z690 NAS主板4 x DDR4内存槽
最大支持4 x 32G=128G
8+1+1相4 x Intel I226-V 2.5G8 x SATA 3.02 x PCIe4.0 x4正面
2 x PCIe3.0 x4反面
2 x PCIe4.0 x16插槽(x8带宽)
PCIe4.0 x4插槽(x4带宽)
HDMI2.0
DP1.4
6层

16   参考文献

[1] Installation Failing: "Failed to prepare EFI boot using Grub"[EB/OL]. https://forum.proxmox.com/threads/installation-failing-failed-to-prepare-efi-boot-using-grub.122002/.
[2] 软路由科普系列 篇二:PVE安装iKuai OpenWrt 旁路由 基础设置 保姆级全教程[EB/OL]. https://post.smzdm.com/p/awrx4lxm/.
[3] ProxmoxVE 7.4 升级到 8.0,详细步骤[EB/OL]. https://blog.margrop.net/post/pve-7-upgrade-to-8/.
[4] PVE 联网及更换国内源[EB/OL]. https://www.cnblogs.com/pdblogs/p/16218543.html.
[5] Force update from unsigned repository[EB/OL]. https://askubuntu.com/questions/732985/force-update-from-unsigned-repository.
[6] ProxmoxVE(PVE) 启用 IOMMU[EB/OL]. https://www.insilen.com/post/501.html.
[7] Enable IOMMU or VT-d in your motherboard BIOS[EB/OL]. https://us.informatiweb.net/tutorials/it/bios/enable-iommu-or-vt-d-in-your-bios.html.
[8] ProxmoxVE(PVE) 使用 IMG 镜像文件,img 转 qcow2[EB/OL]. https://www.lxtx.tech/index.php/archives/65/.
[9]『软路由踩坑指南』篇三:ESXi 8.0 虚拟机安装 iKuai 主路由及保姆级配置[EB/OL]. https://post.smzdm.com/p/a5op28x7/.
[10]『软路由踩坑指南』篇四:ESXi 8.0 虚拟机安装 openWrt 路由系统终极指南[EB/OL]. https://post.smzdm.com/p/a7ngxeel/.
[11]『软路由踩坑指南』篇五:OpenWrt 旁路由进阶篇 SmartDNS+AdGuardHome 设置 DNS 分流、秒开网页、去广告[EB/OL]. https://post.smzdm.com/p/axz6z7w9/.
[12] [openwrt(x86)] OPenWRT 旁路由 +MosDNS+OpenClash+AdGuard Home 傻瓜配置图文教程[EB/OL]. https://www.right.com.cn/forum/thread-8284982-1-1.html.
[13] OpenWrt 扩容 Overlay 和 Docker 软件安装空间教程(内置硬盘版)附:Samba 网络共享设置[EB/OL]. https://www.right.com.cn/forum/thread-7470757-1-1.html.
[14] [OpenWrt] 使用 OpenClash 科学上网[EB/OL]. http://suyu0925.github.io/blog/2022/07/25/openwrt-openclash/.
[15] 镜像站使用帮助-Proxmox 软件仓库[EB/OL]. https://mirrors.tuna.tsinghua.edu.cn/help/proxmox/.
[16] 开启直通[EB/OL]. https://skyao.io/learning-pve/docs/pass-through/enable/.
[17] [经验分享] 在线连接数测试网页,简单一键测试宽带并发连接数限制[EB/OL]. https://bbs.ikuai8.com/thread-87196-1-1.html.
[18] 禁用Swap cache[EB/OL]. https://club.fnnas.com/forum.php?mod=viewthread&tid=2492.
[19] 镜像站使用帮助-Debian 软件源[EB/OL]. https://mirrors.tuna.tsinghua.edu.cn/help/debian/.
[20] 第 5 章 bookworm 中需要注意的问题[EB/OL]. https://www.debian.org/releases/bookworm//amd64/release-notes/ch-information.zh-cn.html.
[21] 【装机帮扶站】第881期:BUG处理器能选否?聊聊12代ES处理器[EB/OL]. https://zhuanlan.zhihu.com/p/458166029.
[22] 爱快ikuai和windows电脑使用iperf3测试内网传输速度[EB/OL]. https://www.mulingyuer.com/archives/1073/.
[23] PVE8.3.0折腾记(一)——PVE初次安装后更换国内源[EB/OL]. https://blog.csdn.net/weixin_52626278/article/details/144147244.
[24] 解决PVE安装独显后,核显消失,无法直通的问题。[EB/OL]. http://157.0.230.2:8090/archives/owKXsHkN.
[25] PVE下LXC ubuntu 中文乱码解决[EB/OL]. https://blog.csdn.net/zyr920425/article/details/131126045.
[26] Proxmox VE常见问题以及解决办法(持续更新)[EB/OL]. https://blog.csdn.net/qq_40858216/article/details/106784329.
[27] Proxmox VE面板节点和虚拟机提示问号,节点状态 unknown,储存一直打不开,虚拟机正常的诊断思路[EB/OL]. https://www.wjxy.net.cn/?p=2629.
[28] 给容器设置内核参数[EB/OL]. https://cloud.tencent.com/developer/article/1583736.
[29] Using sysctls in a Kubernetes Cluster[EB/OL]. https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/#listing-all-sysctl-parameters.
[30] setting key "vm.max_map_count": Read-only file system[EB/OL]. https://forum.proxmox.com/threads/setting-key-vm-max_map_count-read-only-file-system.28720/.
[31] After installation with Ventoy rdinit=/vtoy/vtoy[EB/OL]. https://forum.proxmox.com/threads/after-installation-with-ventoy-rdinit-vtoy-vtoy.153979/.
[32] 升级至QEMU 9.2.0后直通失败[EB/OL]. https://github.com/gangqizai/igd/issues/27.
[33] 每过段时间修改编辑配置那些失效[EB/OL]. https://bbs.ikuai8.com/forum.php?mod=viewthread&tid=146800&extra=page%3D1%26filter%3Dtypeid%26typeid%3D20.
[34] proxmox安装定义磁盘分区大小[EB/OL]. https://www.cnblogs.com/weihua2020/p/13723466.html.
[35] minfree for lvm snapshots[EB/OL]. https://forum.proxmox.com/threads/minfree-for-lvm-snapshots.28977/.
[36] Backup fails with Logical Volume already exists in volume group[EB/OL]. https://forum.proxmox.com/threads/backup-fails-with-logical-volume-already-exists-in-volume-group.42377/.
[37] PVE8.3.1 LXC下安装 OpenWRT 记录[EB/OL]. https://www.cnblogs.com/airoot/p/18715211.
[38] LXC容器中安装openwrt作为主路由[EB/OL]. https://blog.jmal.top/s/lxc-openwrt-main-router.
[39] ping: bad address ‘openwrt.org’[EB/OL]. https://blog.axiaoke.cn/archives/1173.html.
[40] Proxmox VE 容器或虚拟机被锁定解决办法[EB/OL]. https://www.wort.cloud/post/notes/proxmox-ve-lxc%e5%ae%b9%e5%99%a8%e8%a2%ab%e9%94%81%e5%ae%9a%ef%bc%8c%e7%8a%b6%e6%80%81%e4%b8%barollback%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/.
[41] kyleflower/clash_rules[EB/OL]. https://github.com/kyleflower/clash_rules.
[42] docker搭建MyUrls短链服务,可配合sub-web食用[EB/OL]. http://213.35.110.223:8000/2024/08/1724228021116.
[43] 自建Clash订阅转换 - Subconverter+Subweb+MyUrls搭建教程 (Docker版本)[EB/OL]. https://crossbell.io/notes/59373-1.
[44] 自建Clash订阅转换 - Subconverter+Subweb+MyUrls搭建教程 - 全docker完成 - mihomo内核 避坑指南[EB/OL]. https://imgki.com/archives/718.html.
[45] 自建Clash订阅转换[EB/OL]. https://lwnlh.com/14_Self-built_Clash_Subscription_Conversion.html.
[46] .env 配置在 Docker 中不起作用[EB/OL]. https://github.com/CareyWang/sub-web/issues/68.
[47] [BUG] 使用 Clash Meta 内核开启tun模式出现 connect error: dns resolve failed: context deadline exceeded[EB/OL]. https://github.com/clash-verge-rev/clash-verge-rev/issues/104.
[48] openclash "all DNS requests failed, first error: dns: bad rdata"错误解决[EB/OL]. https://zhuanlan.zhihu.com/p/670131605.
[49] 我的家里pve虚拟机经常死机原来是原因这导致的[EB/OL]. https://blog.csdn.net/u010042660/article/details/139935170.
[50] pve节点频繁宕机问题排查[EB/OL]. https://www.cnblogs.com/nf01/p/16296724.html.
[51] pve8.0 cpu是1265u经常死机,进不去,需要断电重启[EB/OL]. https://tieba.baidu.com/p/8488486698.
[52] PBS 维护任务[EB/OL]. https://www.cnblogs.com/varden/p/15251582.html.

本文结束 感谢阅读
Adios!
许可注意: 若想对本作品进行转载、引用亦或是进行二次创作时,请详细阅读上述相关协议内容(若不理解,请点击链接跳转阅读)。为保障本人权利,对于违反者,本人将依法予以处理!同时会向搜索引擎提交DMCA的投诉申请。望周知!—— Mr. Kin
勘误声明: 虽本人写作时已尽力保证其内容的正确性,但因个人知识面和经验的局限性以及计算机技术等相关技术日新月异,本作品内容或存在一些错误之处。欢迎联系我以更正错误,不胜感激!—— Mr. Kin
侵权声明: 若本站采用的第三方内容侵犯了你的版权,请联系我进行处理,谢谢!—— Mr. Kin
免责声明: 根据中国《计算机软件保护条例》第十七条规定:“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”本站分享的任何逆向破解软件,版权所有者归原软件著作权人。仅供个人使用或学习研究,严禁商业或非法用途,严禁用于打包恶意软件推广,否则后果由用户承担责任,特此说明。—— Mr. Kin
靓仔/美女,不考虑支持一下我吗?谢谢鼓励!(๑•̀ㅂ•́)و✧
Mr. Kin 微信 微信
Mr. Kin 支付宝 支付宝
Mr. Kin 领取支付宝红包 领取支付宝红包
  • 本文作者: Mr. Kin
  • 本文链接: https://mister-kin.github.io/software/pve/
  • 版权声明: 本博客所有内容,除个人设计创作的图像(如 logo 等)和相关的视频创作及其他特别声明外,均采用 BY-NC-SA 许可协议进行发布。版权 © Mr. Kin,保留所有权利。