仅结合自己理解作简要概括,不保证全对。详细步骤在 软路由安装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,输入命令:
nano /etc/default/grub
将
GRUB CMDLINE_LINUX_DEFAULT=quiet"
改为:
GRUB CMDLINE_LINUX_DEFAULT=quiet intel_iommu=on"
编辑完文件后按“Ctl+X”>"Y">“回车”,继续输入以下命令:
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界面,输入
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 的控制台后输入
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、启动虚拟机,登录虚拟机执行如下命令
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
(可选,如果按照上面设置完成后没有效果可以尝试。)
添加新接口 web界面,网络 -> 接口,添加新接口
名称
ZeroTier协议
选不配置协议接口
选z开头的适配器高级设置
开机自动运行 点击创建接口
按钮,在之后出现的防火墙设置
页面中,创建/分配防火墙区域
选择lan
,保存并应用。修改防火墙 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启动文件
nano /etc/default/grub
将
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"
注意:其他教程说的是 要改为 video=efifb:off,vesafb:off 但是我设置后PVE log会疯狂报错
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模组
nano /etc/modules
#加入
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
屏蔽PVE自带核显相关驱动
nano /etc/modprobe.d/pve-blacklist.conf
#加入
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
注意:在我的 PVE 版本里面是 pve-blacklist.conf 文件,其他教程中的 blacklist.conf 对我无效。
配置显卡声卡相关直通模组
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
nano /etc/modprobe.d/vfio.conf
#加入
options vfio-pci ids=8086:3185,8086:3198
# 更新配置并重启
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设备直通的顺序是
- 将USB设备插入到all in one主机中(主机不用关机,虚拟机也不用关机);
- 到虚拟机的硬件中,添加USB设备,选择【使用USB端口】;
- 这个时候应该能读取到你的USB设备,并选择,确定;
注意:添加的USB设备,是支持热插拔的,但是不能换USB口,下次开机启动,也能正常识别,不用重新设置。
通过修改对应虚拟机配置文件直通
将 igpu.bin 上传到PVE系统 (网上搜索能找到下载地址,不过我并没有用到)
进入PVE shell
nano /etc/pve/qemu-server/<Windows 系统的虚拟机ID>.conf
#顶部添加一段代码让直通输出使用指定的配置文件
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=<你的igpu.bin 路径>
注意:网上大部分教程都有 romfile 参数,但是我在使用的时候会出现了 鼠标指针不见 音频无输出
的问题,在删掉 romfile=<你的igpu.bin 路径> 参数后这些问题都解决了。如果你还存在 鼠标指针不见
的情况可以开启 显示指针轨迹
。或者使用其他版本的 igpu.bin。
开机后,就能直接通过显示器,看到虚拟机中的内容了。不过我在第一次弄的时候输出的画面存在大量噪点和条纹,还以为我哪里弄错了,最后排查出来是热插拔 HDMI 线的原因,不是说这玩意能热插拔的吗?