Skip to content

仅结合自己理解作简要概括,不保证全对。详细步骤在 软路由安装PVE虚拟机安装OpenWrt iKuai

主机 畅网 J4125 i226网卡 四网口 准系统 内存 联想 DDR4 8G 2666 硬盘 铠侠 SATA TC10 480GB

安装 PVE ​

首先在 PVE官网 下载 ISO 镜像。

然后下载写盘工具 Rufus ,插入U盘将镜像写入。

准备显示屏,键盘和鼠标,插入U盘到主机上,开机自动进入配置页面,具体配置按自己喜好。

然后找一根网线连接主机 ETH0 ,另一端连电脑,打开电脑 网络和共享中心 选择对应 以太网 ->属性->IPv4 修改 IP 地址为 PVE 同一网段。

在电脑打开 https:// PVE地址:8006/ ,进入配置界面。

设置网卡直通 ​

打开PVE节点的shell,输入命令:

shell
nano /etc/default/grub

将

GRUB CMDLINE_LINUX_DEFAULT=quiet"

改为:

GRUB CMDLINE_LINUX_DEFAULT=quiet intel_iommu=on"

编辑完文件后按“Ctl+X”>"Y">“回车”,继续输入以下命令:

shell
nano /etc/modules

在文件下面添加新内容

vfio
vfio iommu type1
vfio pci
vfio virgfd

编辑完文件后按"Ct+X”>“Y”>“回车”,继续输入以下命令。

最后更新配置信息并重启PVE主机

update-grub
update-initramfs -u -k all
reboot

默认情况下会创建一个名为root的lv作为系统的根分区,大小为整个磁盘空间的25%,还用来保存系统镜像和虚拟机的快照;一个名为data的lvm-thin分区,作为虚拟机的磁盘。

相关知识

安装 ikuai ​

在 ikuai官网 下载ISO镜像,上传在local(pve)。

点击新建虚拟机,设置名称,选择 ikuai 镜像 ,分配磁盘大小 5G 足够,双核,类别 host ,分配内存 2048 。 新建完成后开启开机自启,修改引导顺序,分配网口,设置WAN和LIN口。

安装OpenWrt ​

我使用的固件是 OpenWrt-Rpi 下载地址

选择 x86_64 设备跳转下载页面

下载 immortalwrt-x86-64-generic-ext4-combined.img.gz 到本地并解压为 .img 文件

同样上传在local(pve),记住 target file 后面的 上传的文件路径。

然后新建虚拟机,设置名称,这里的镜像选择 不使用任何介质 ,磁盘大小随便后期会删除,双核,类别 host ,分配内存 1024 。

因为不是ISO镜像,所以无法直接选择,想要稍做处理。

新建完成后进入OpenWrt 节点的 硬件 选项,将硬盘先 分离 ,然后 删除 。

进入 PVE 的shell界面,输入

shell
qm importdisk [ikuai虚拟机的数字编号] [上传的文件路径] local-lvm

例如 qm importdisk 101 /var/lib/vz/template/iso/immortalwrt-x86-64-generic-ext4-combined.img local-lvm

再次回到OpenWrt 节点的 硬件 选项,这时多出一个 未使用的磁盘 ,选择,编辑,总线改为 SATA,点击添加,然后打开开机自启,修改引导顺序为

进入 OpenWrt 的控制台后输入

shell
vi etc/config/network

将 option ipaddr 修改成想要的地址,重启然后访问即可进入管理页面。

设置主&旁路由 ​

全部都走OpenWrt ​

如果将ikuai设置为主路由那么就将LAN口分配给ikuai,同理,设置OpenWrt为主路由就分配给OpenWrt。然后修改相关WAN口配置,设置这两个的网关为对方 IP 地址。

假如设置ikuai为主路由,OpenWrt为旁路由,那么将LAN口分配给ikuai虚拟机,并设置好WAN口,使用PPPoE拨号,输入宽带账号,并设置 DHCP 里的网关为 OpenWrt 的 IP 地址。 OpenWrt 的LAN网关设置为ikuai的ip地址

部分走OpenWrt ​

和上一个的区别是在ikuai里的网关设置为他自己(貌似这样会使在ikuai网关下的设备无法访问ikuai的管理页面),然后在想要走 OpenWrt 的设备里网关设置为 OpenWrt 的地址。

PVE联网 ​

第一次安装PVE,正常情况下PVE的IP是在我们上网的网段的。没有网络有可能是没有配置DNS服务器地址或DNS地址是软路由网关地址。解决方法有3种:

1:设置DHCP自动获取网络地址和DNS服务器地址。但是这个会导致自己的PVEIP地址不固定。 2:在PVE网页页面上设置DNS服务器地址: 3:如果有使用iKuai、openwrt等软路由或者硬路由,可在其DNS设置中开启DNS代理

PVE的local和local-lvm ​

local 主要是存储 虚拟机备份文件、上传的ISO镜像、容器模板,在缺省安装时默认分配为磁盘的1/4大小,其中 PVE 系统就安装在这上面。

local-lvm 主要是存储 磁盘映像 和 容器 创建的虚拟机文件和快照就保存在这里面。

当查看 lvm 的VM磁盘大小时会发现比使用率大得多,这是因为lvm是写时分配。

PVE 自动释放空间 ​

要实现自动释放空间,要满足一些条件:

1、虚拟机硬盘使用scsi接口 2、虚拟机硬盘开启“丢弃”选项 3、虚拟机里删除文件后,进行碎片整理或者优化 4、虚拟硬盘所在的PVE存储类型是“lvm-thin”,如果不是“lvm-thin”,虚拟硬盘类型必须是qcow2 5、虚拟机选项里面开启“QEMU Guest Agent”,虚拟机的windows系统安装QEMU Guest软件。

其中,“PVE存储类型使用“lvm-thin”” 是最有效的方法。满足以上一大堆条件后,就可以自动释放空间了。

处理方法: 1、关闭需要释放的磁盘的虚拟机 2、修改硬盘信息(在Discard的复选框打勾)

3、启动虚拟机,登录虚拟机执行如下命令

shell
fstrim -av

等命令执行完毕,磁盘空间就释放了。

修复旁路由导致的终端MAC地址重复的问题 ​

在 OpenWrt 软件包里搜索 snmpd 安装 进入iKuai的管理后台,依次点击“高级应用”→“跨三层应用”→“添加” 在“SNMP服务器IP”后输入你的LEDE路由管理IP,其他保证默认不变,点击保存即可。

微信某些功能加载慢 ​

来源 在 OpenWrt 网络-接口 中 lan 口的 IPV6 关闭就可以了(接口--LAN--一般设置,里面IPV6分配长度直接禁用)

原因是wan口只有ipv4,但是lan有IPV4和IPV6,怀疑是DNS解析微信的IPV6发生了错误。

Zerotier 异地组网 ​

参考

配置Zerotier ​

在 控制台 注册并登陆。创建网络后得到一个 Network ID,填入。

在网络管理页面中,Access Control 控制客户端认证方式,如果选择PRIVATE则每个客户端的加入都需要在此页面经由你允许。

在 IPv4 Auto-Assign 中,可以对客户端的 IP 段进行配置,不和你原来的网络地址冲突即可。

在 Members 中你可以管理该网络下的所有客户端,勾选客户端对应的 Auth? 选框即可让客户端加入此网络。每个客户端在加入的时候会自动分配一个 IP 地址,你还可以手动分配客户端的 IP 地址。

如果多个机器互相访问就需要每个机器都安装 Zerotier 客户端并加入同一个网络。

借助 OpenWrt 和 Zerotier 可以暴露整个局域网到 Zerotier 网络中,只需要 OpenWrt 中的 Zerotier 加入网络即可。

勾选「自动允许客户端 NAT」即可。

OpenWrt 不需要作为你的主路由,它可以通过 LAN 口接入你现有的局域网,关闭 LAN 口的 DHCP 服务,作为旁路由使用。

你还需要在 Zerotier 控制台中配置静态路由。

在添加静态路由的时候Destination填局域网的网络地址,(Via)为下一跳地址,即 OpenWrt 路由器的 Zerotier 地址。

上面的静态路由配置将192.168.10.0/24局域网和192.168.11.0/24局域网暴露在 Zerotier 网络中。172.22.39.15和172.22.105.60分别是两个 OpenWrt 路由器在 Zerotier 网络中的地址,这两个路由器均配置了自动允许客户端 NAT。

这样做的优点是管理方便,不需要在每个机器上安装客户端并且加入网络。并且即使你在使用移动网络的时候可以直接访问到家里局域网的 IP,并且还是通过局域网 IP 访问,并不需要修改软件配置。

在外使用移动网络的情况下,你可以使用192.168.10.0/24或192.168.11.0/24网段的内网地址访问局域网 A 或局域网 B 内的资源。

如果局域网 A 中的某台设备需要访问局域网 B 中的资源,还是需要在该设备上安装 Zerotier 客户端,并且加入统一 Zerotier 网络,然后就可以通过192.168.11.0/24的内网 IP 地址来访问局域网 B 中的资源了。

配置Openwrt ​

(可选,如果按照上面设置完成后没有效果可以尝试。)

  1. 添加新接口 web界面,网络 -> 接口,添加新接口 名称 ZeroTier 协议 选不配置协议 接口 选z开头的适配器 高级设置 开机自动运行 点击 创建接口 按钮,在之后出现的 防火墙设置 页面中, 创建/分配防火墙区域 选择 lan,保存并应用。

  2. 修改防火墙 web界面,网络 -> 防火墙->流量规则-> 通信规则,添加: 名称 Allow-ZeroTier-Inbound 协议 UDP 源区域 任意区域 目标区域 设备 目标端口 1-65535 保存&应用。

显卡直通 通过 HDMI 输出 Windows 图像 ​

网上有部分内容已经过时,所以自己实践重写一遍。写于 2025/2/12,仅在以下环境测试 CPU J4125 显卡 Intel(R)UHD Graphics 600 PVE 版本 7.3-3 已安装 Windows Server 2019

PVE 配置 ​

修改grub启动文件 ​

shell
nano /etc/default/grub

将

shell
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

改为

shell
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"

注意:其他教程说的是 要改为 video=efifb:off,vesafb:off 但是我设置后PVE log会疯狂报错

bash
kvm:vfio_region_write(0000:00:02.0:region2+0xfeb26b4,0x0,4)failed:Device or resource busy
pve kernel: vfio-pci 0000:00:02.0: BAR 2: can't reserve

搜索后找到帖子 pve kernel: vfio-pci 0000:00:02.0: BAR 2: can't reserve 里面提到 video=vesafb:off video=efifb:off video=simplefb:off have not worked on Proxmox for some time.

这也是一些人提到的 装的win10那么卡 windows开机特别慢 的原因。

加载直通所需要的Linux模组 ​

shell
nano /etc/modules
shell
#加入
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

屏蔽PVE自带核显相关驱动 ​

shell
nano /etc/modprobe.d/pve-blacklist.conf
shell
#加入
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

注意:在我的 PVE 版本里面是 pve-blacklist.conf 文件,其他教程中的 blacklist.conf 对我无效。

配置显卡声卡相关直通模组 ​

shell
lspci -n | grep -E "0300|0403"     

#shell输出以下信息    #J4125  应该和我一样
00:02.0 0300: 8086:3185 (rev 03)      #00:02 对应显卡,记下 8086:3185
00:0e.0 0403: 8086:3198 (rev 03)      #00:0e 对应声卡,记下 8086:3198
shell
nano /etc/modprobe.d/vfio.conf
shell
#加入
options vfio-pci ids=8086:3185,8086:3198
shell
# 更新配置并重启
update-initramfs -u
reboot

#重启后查一下
lsmod | grep vfio

#看是否有类似信息,有基本就配置成功了

vfio_pci                  16384   0
vfio_pci_core          73728   1     vfio_pci
vfio_virqfd              16384   1     vfio_pci_core
irqbypass                16384   2     vfio_pci_core,kvm
vfio_iommu_type1   40960   0
vfio                        45056   2      vfio_pci_core,vfio_iommu_type1

Windows 配置 ​

安装驱动 ​

回到PVE控制面板,找到Windows的虚拟机,先将其关机,然后在硬件中,添加PCI设置, 找到你显卡的型号并添加即可,其它选项默认。

完成添加PCI 的显卡后,启动虚拟机安装驱动

进入到windows界面,打开【设备管理器】,最下面的显示适配器中,可以看到有两个显卡

驱动下载地址 Intel VGA Driver 英特尔集成显卡驱动,必须下载下面历史版本中的 26.20.100.7262 版本,其他版本会报错。下载后双击安装即可。

win10 放置一段时间后会自动安装驱动,不过自动安装的驱动版本并不是 26.20.100.7262 版本,无法正常使用。同理 Windows 自己更新的也一样。

检验是否正常: ​

设备管理器,能看到显卡的正确型号,并且没有感叹号

任务管理器,在性能左侧,能看到GPU 的栏目

最后 ​

将虚拟机 Windows 关机,然后修改虚拟机的硬件配置,删除刚才添加的核显,添加 PCI 设备声卡,将“显示”选项改为“无”。

注意:显示修改为 无 后就无法在 PVE 对应的 控制台处登录了。之后再使用 RDP 登录吧。

虚拟机添加USB设备直通的顺序是

  1. 将USB设备插入到all in one主机中(主机不用关机,虚拟机也不用关机);
  2. 到虚拟机的硬件中,添加USB设备,选择【使用USB端口】;
  3. 这个时候应该能读取到你的USB设备,并选择,确定;

注意:添加的USB设备,是支持热插拔的,但是不能换USB口,下次开机启动,也能正常识别,不用重新设置。

通过修改对应虚拟机配置文件直通 ​

将 igpu.bin 上传到PVE系统 (网上搜索能找到下载地址,不过我并没有用到)

进入PVE shell

shell
nano /etc/pve/qemu-server/<Windows 系统的虚拟机ID>.conf
shell
#顶部添加一段代码让直通输出使用指定的配置文件
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=<你的igpu.bin 路径>

注意:网上大部分教程都有 romfile 参数,但是我在使用的时候会出现了 鼠标指针不见 音频无输出 的问题,在删掉 romfile=<你的igpu.bin 路径> 参数后这些问题都解决了。如果你还存在 鼠标指针不见 的情况可以开启 显示指针轨迹。或者使用其他版本的 igpu.bin。

开机后,就能直接通过显示器,看到虚拟机中的内容了。不过我在第一次弄的时候输出的画面存在大量噪点和条纹,还以为我哪里弄错了,最后排查出来是热插拔 HDMI 线的原因,不是说这玩意能热插拔的吗?

Released under the MIT License.