日志
- 2023-04-03:新增NPM中
Websockets
选项的提醒。 - 2023-04-01:新增Fail2ban防扫描和暴力破解的教程。
- 2023-03-31:新增PVE阶段安装NPM及DDNS-Go的说明。
- 2023-03-28:新增关于开机/重启虚拟机与qemu-quest-agent的说明。
前言
经过自己摸索或看司波图的教学视频,相信你已经成功安装PVE系统了。现在我们开始设置PVE吧 (ฅ´ω`ฅ)
我的NAS系列文章里,PVE设置大概的设置顺序如下:
- 对PVE进行一些基本设置
- 安装好OpenWrt,保证上网
- 安装好OMV,保证存储
- 安装LXC,完成核显直通,爽快解码看剧
本文主要完成的是第1条内容。
另外,为了避免混淆,我在这里对主机及其应用作一些简单的约定。如无特殊,Node的名字就叫PVE
;PVE Node中的OpenMediaVault虚拟机简称PVE.OMV
;PVE Node中的OpenWrt虚拟机简称PVE.OpenWrt
;PVE Node中的LXC简称PVE.LXC
;如此类推。我目前只用到这3个虚拟机。PVE Shell
指的是登陆PVE
的Shell,如此类推。应该不难分辨!这些约定将适用于整个NAS系列的教程。
下面,我们开始设置PVE系统吧!
连接PVE
安装好PVE后,显示器显示的是PVE Shell。我们平时主要是在网页里管理PVE,它是一个图形界面:
这里有两个方法将你的个人电脑连接PVE系统:
- 方法一:我们可以用网线将个人电脑和NAS上任一网口相连。这时,你需要在个人电脑后台暂时设置一个与NAS同网段的IP。以Win10系统为例,我们可以在左下角搜索“网络连接”,打开后找到正在连接的网口,右键“属性”进行设置:
- 方法二:你也可以连接
个人电脑-交换机-NAS
。该方案的好处就是,如果你之前的上网设备还在正常工作,你可以暂时使用旧设备进行联网,这样进行更新PVE、查看视频教程等操作时会比较方便。这也是为什么之前我推荐大家在安装PVE时将IP与原上网环境处于同一网段。
IP/SSH
这个IP地址是你安装PVE时自己设置好的,之前在《NAS系列 准备安装PVE系统》的“PVE安装”小节里我有提及。它的形式一般如下:
https://192.168.1.XXX:8006
如果你忘记了地址,也可以将NAS与显示器连接,直接在PVE Shell里输入以下命令查看:
cat /etc/issue
输出类似于:
------------------------------------------------------------------------------
Welcome to the Proxmox Virtual Environment. Please use your web browser to
configure this server - connect to:
https://192.168.1.XXX:8006/
------------------------------------------------------------------------------
即可获得地址。
另外,PVE默认是不支持ssh远程登陆的;但为了方便,我们也可以设置PVE支持远程root登陆。具体的方法是在~/.ssh/authorized_keys
文件里添加用户信任的主机公钥,详情可见《Linux基础 基于密钥对的SSH远程登陆》。通过这个方法,可以轻易地用MobaXterm等终端访问PVE:
我建议将ssh的默认连接时间延长,以防连接中的Shell频繁掉线。具体作法如下:
安装vim:
apt-update && apt install vim -y
在PVE Shell里输入:
vim /etc/ssh/sshd_config
找到下面2个参数:
#ClientAliveInterval 0
#ClientAliveCountMax 3
去掉前面的注释,并修改值为:
ClientAliveInterval 30
ClientAliveCountMax 3
重启sshd服务,使配置生效:
service sshd restart
换镜像源
换镜像源主要是为了加快资源访问速度,玩国内VPS的小伙伴应该不陌生的!我们要换PVE源和Debian 11的源(以清华镜像为例)。自己看链接的内容吧,说得挺清楚的,我就不演示了。
建议在修改镜像源文件时备份旧文件,比如Debian 11的镜像源可以这样备份:
# 备份镜像源的原始文件
cp /etc/apt/sources.list /etc/apt/sources.list.backup01
有什么风吹草动就回滚:
rm -r /etc/apt/sources.list
cp /etc/apt/sources.list.backup01 /etc/apt/sources.list
至于想用其它国内源的自己Google百度之。
移除弹窗提示
新安装的PVE会有一个订阅提示,每次登陆后台都会跳出来烦人。我们可以禁用这个订阅提示。
打开proxmoxlib.js
文件:
vim /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
定位至No valid subscription
第一次出现的地方(Vim可以使用:?No valid subscription
,用大写N定位),找到res===null||res===undefined|..
那一堆东西:
改为false
:
:wq
保存退出,重启PVE生效。
值得注意的是,如果你用apt update && apt upgrade
升级PVE,proxmoxlib.js
脚本可能会更新重置,从而导致该修改失效。那时,你只需要再次改动并重启PVE即可。
SATA可用性
我们可以拿一个没坏的硬盘,每个孔都试探一下。如果SATA接口工作正常,大小灯都会亮(小灯比较暗):
同时,在PVE Shell里输入fdisk -l
命令也可以查看。这里有个示范信息:
...
Disk /dev/sda: 7.28 TiB, 8001563222016 bytes, 15628053168 sectors
Disk model: WDC WD80EFZX-68U
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 64B3C10C-5000-419C-975E-3B012E8169BE
Device Start End Sectors Size Type
/dev/sda1 2048 15628052479 15628050432 7.3T Microsoft basic data
...
这里的Disk /dev/sda: 7.28 TiB
即是我插入的硬盘。当然,你也可以在PVE后台里查看硬盘的挂载情况:
在没有直通SATA控制器之前,这里应该可以实时看到新插入的硬盘。当然,你需要在Bios里正确地设置了Hot Plug=Enabled
(详见《NAS系列 准备安装PVE系统》的“硬盘启动顺序、热插拔”),这样硬盘才支持热插拔!
应该逐一检查每个硬盘槽,直至确认所有的硬盘SATA工作正常为止。当时我发现有一个SATA口工作不正常,后来了解到是主板跳帽设置不对。如果你已经看过《NAS系列 硬件选择》,跳帽的设置应该没有太大问题。装机时SATA口接线接牢固,一般问题不大的!
网络
这一小节既是重点也是难点,大家要仔细了!(敲黑板) 我画图用的工具是自建的“苯苯白板”,欢迎使用!
网络结构
可能不是最理想的PVE网络结构,但可以正常使用。大家有更好的网络结构可以评论区留言喽!
网络拓扑图如下,适合多网线设备的接口(只要2.5G交换机的口子多一点就行):
其它网络结构2
这里我会直接将2.5G网口直通给OMV,接线方法是2.5G网口——2.5G物理交换机
。这种方法的好处是个人电脑与OMV进行通讯时不依赖vmbr0
和其它虚拟网口,这样对CPU并不会造成额外损耗。实际上,这是一种更加合理的方案。
但是,该网络结构有一个致命缺陷——如果你在中途停止OMV,则会导致整个网络异常;只有将2.5G网口的网线拔掉后,整体网络才会恢复正常。如果你是远程控制PVE并且不小心停止OMV虚拟机,那你的心态绝对会爆炸的。我推测这是因为OMV停止后,PVE系统会重新接管该网口,导致网络短路。我推测,如果可以将该网口在PVE中完全屏蔽(像屏蔽核显那样),该方案应该是可以实现的。不过目前暂时还没有完美的解决方案。
有什么建议大家可以评论区留言!
更新软件包
在没安装什么虚拟机时,更新软件包还是可以的。命令和Ubuntu类似:
# 更新软件列表
apt update
# 查看可更新的软件包
apt list --upgradable
# 更新全部可更新的软件包
apt upgrade -y
稳定运行的时候,最好别有事没事升级。或者,你专门挑个有空的时候再升级比较安全,以防新软件包没有向下兼容而导致系统崩溃!
硬件直通/核显直通
由于我需要将核显直通给LXC,且硬件直通涉及的grub文件修改后要重启生效,这里一并做完。在做硬件直通给Linux系统/LXC前,请确保Linux内核升级到较新版本(对G5400T而言,需要内核5.18或以上)。这里的“内核”指是是使用该核显的系统,它并不一定是PVE系统。如果你将核显直通给LXC,升级PVE的Linux内核;如果将该核显直通给某Linux虚拟机(比如OMV),则升级该虚拟机的Linux内核。如果虚拟机是Windows系统,一般都可以成功使用直通的核显,不需要特别地在意所谓的Linux内核版本。“直通给LXC”和“直通给虚拟机”二选其一即可。
以下教程都是基于G5400T的Intel Corporation CoffeeLake-S GT1 [UHD Graphics 610]
核显,可能并不是一种通用的方法。其它核显的方法应该是类似的思路,但代码可能不一样。如果你是AMD的CPU,就更加不适用此教程,仅供参考了。更多技巧请参考官方文档Pci passthrough – Proxmox VE。
直通给LXC
我目前正在使用的方案。如果你准备使用此方案,该视频是一个质量不错的教程,也比较新,值得关注!
核显直通给LXC时,本质上是在PVE里使用该显卡。5.19版本的Linux内核不容易产生直通成功但Jellyfin无法驱动核显的bug。因此,我们先更新PVE内核至5.19版本:
apt update && apt install pve-kernel-5.19 -y
然后,我们要确定PVE系统是否可以正确识别核显。只需在PVE Shell里运行:
ls -l /dev/dri
输出类似于:
total 0
drwxr-xr-x 2 root root 80 Feb 25 11:32 by-path
crw-rw---- 1 root video 226, 0 Feb 25 11:32 card0
crw-rw---- 1 root render 226, 128 Feb 25 11:32 renderD128
出现card0
和renderD128
(或者类似的东西)代表PVE可以成功识别该核显。如果没有出现card
和render
字样的文件,说明PVE系统没有正确地识别该显卡,此时需要安装Linux版Intel显卡驱动。这里有两种方案可依次试验:
- 方案一:
apt update && apt install vainfo -y
。安装完成后再试试运行ls -l /dev/dri
。 - 方案二:如果方案一不生效,请在
/etc/apt/sources.list
里添加Debian的contrib non-free源,然后试运行apt install intel-media-va-driver-non-free -y
。安装完成后再试试运行ls -l /dev/dri
。
我记不太清自己有没有遇见PVE无法识别核显的情况了。根据文章How to Identify & Find Graphics Drivers for Linux,大多数Linux发行版都已经内置Intel显卡驱动,但一般是由发行版托管而不是Intel (ฅ´ω`ฅ) 总之,如果你遇到无法识别核显的bug,可以试验上述方案,两者都是手动安装Intel驱动的方法。有什么问题可以评论区留言!
确定核显被PVE正确识别后,我们打开grub
文件:
vim /etc/default/grub
修改参数:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on i915.enable_guc=2"
如图所示:
quiet
选项用于阻止Linux提供引导过程的Shell输出,intel_iommu=on
指的是用intel_iommu驱动来驱动IOMMU硬件单元。这两个选项一开启,其实PVE就可以进行硬件直通了(比如直通网卡、SATA控制器等)。i915.enable_guc=2
是确保核显开启HuC固件,它与核显的硬件解码功能有关。这些选项其实是定义Linux Kernel的行为。按我的理解是这样,不正之处请评论区留言哈!
添加完成后,更新grub生效:
update-grub
重启PVE。之后,在PVE Shell里查看显卡工作是否正常:
journalctl -b -o short-monotonic -k | egrep -i "i915|dmr|dmc|guc|huc"
输出类似:
这里的HuC authenticated
表明HuC固件是正常工作的,但GuC SLPC disabled
表明GuC未成功启动。根据此文章的部分内容:
DMC 为显示微控制器,主要提供额外的图像处理器低功耗空闲状态。它具有从 OS 内核中跨低功耗状态保存和恢复显示寄存器的能力,保证系统在降低功耗的同时可以高性能工作。
GuC 主要负责多图像处理引擎的任务负载调度。在调度模型中,主机软件通过256个图像doorbell中的一个来提交任务,从而激活对应图像引擎上的调度操作。调度操作负责决定下一步运行哪个x负载、向命令streamer 提交负载、抢占运行在一个引擎上的负载、监视任务进度以及提醒主机软件任务何时结束等。
我测试了很久,发现HD610似乎并不支持开启GuC,只支持开启DMC和HuC。从Jellyfin硬解设置中,我发现要启用低电压模式的硬件编码器只需要Linux内核开启HuC固件。所以只要HuC能成功开启应该问题不大。事实上我在LXC中使用HD610是可以成功解码H265的。
这样,核显就满足成功直通给LXC的条件了。之后的操作很简单,这里按下不表。
直通给虚拟机
测试时未将OMV的Linux内核升级到5.19,故未成功测试。但思路应该是对的。仅供参考!
值得一提的是,如果你要将核显直通给虚拟机(比如OMV),那么还需要一些额外的操作——为了让PVE不使用该核显。
以OMV为例,查看已安装的内核:
find /boot/vmli*
输出类似于:
/boot/vmlinuz-5.18.0-0.deb11.4-amd64
/boot/vmlinuz-5.19.17-2-pve
/boot/vmlinuz-6.0.0-0.deb11.6-amd64
查看正在使用的内核:
uname -a
# Linux pveomv 5.19.17-2-pve #1 SMP PREEMPT_DYNAMIC PVE 5.19.17-2 (Sat, 28 Jan 2023 16:40:25 x86_64 GNU/Linux
提示为5.19.17-2-pve
。实际上,OMV的内核由omv-extras插件openmediavault-kernel
管理:
它设置内核的方式也比较简单:
使用OMV的小伙伴建议使用5.19-pve内核
,这既和ZFS协议兼容的Linux内核版本,也是对核显直通的兼容性比较好的版本。下面我们正式开始核显的直通工作!
第一步,屏蔽显卡驱动。我们在PVE Shell里输入:
vim /etc/modprobe.d/pve-blacklist.conf
添加以下内容:
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
更新屏蔽:
update-initramfs -u
第二步,我们修改启动项,让核显开机时不随PVE自启动。我们打开grub
文件:
vim /etc/default/grub
修改参数:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"
关于efifb的具体设置可见此文,video=efifb:off
意味在boot阶段不通过UEFI启用显卡(因为我们不需要在PVE里使用显卡,而是在LXC中;那是PVE系统成功启动之后)。
修改完成后,更新grub生效:
update-grub
第三步,屏蔽核显的PCI通道。我们先找到核显的PCIE通道,在PVE Shell里输入:
lspci -nn | grep VGA
输出为:
00:02.0 VGA compatible controller [0300]: Intel Corporation CoffeeLake-S GT1 [UHD Graphics 610] [8086:3e90]
即可确定id为8086:3e90
。我们修改/新增一个文件/etc/modprobe.d/vfio.conf
,添加屏蔽记录:
options vfio-pci ids=8086:3e90
然后再更新屏蔽:
update-initramfs -u
第四步,重启PVE。在PVE Shell中输入:
reboot
这样,核显就满足成功直通给虚拟机的条件了。之后的操作很简单,这里按下不表。
重启/断电测试
所有东西设置完后,进行重启、断电测试。如果PVE都可以正常启动,再折腾虚拟机/LXC;否则就排故障,直至问题解决为止。
这里要特别注意的是:断电再通电,NAS是否自启动?如果NAS是关机状态,断电再通电,NAS是仍然保持关机还是会自启动?
重启/关闭/停止虚拟机
PVE虚拟机在默认情况并未开启QEMU Guest Agent
,因此使用关机/重启时容易产生TASK ERROR: VM quit/powerdown failed - got timeout
的报错。
解决方案是在虚拟机系统里安装QEMU Guest Agent
,比如:
# Ubuntu/Debian系列
apt update && apt install qemu-quest-agent -y
停止
虚拟机。默认情况下只能这样关闭虚拟机:
在选项中开启QEMU Guest Agent
:
之后重启/关机就不会出现bug了。而且,在概要
中还可以看到虚拟机的IP:
可以下载qemu-quest-agent
的Linux发行版(比如Ubuntu/Debian系)都建议开启喔!OpenWrt似乎是不需要开启的,也没有qemu-quest-agent
的相关插件。
NPM & DDNS-Go
由于Nginx Proxy Manager
(NPM)和DDNS-Go
是比较基本的Docker应用,且PVE本质上也是一个Linux系统,对Docker的支持较好,因为我将NPM和DDNS-Go托管在PVE中。我比较早就已经安装了NPM & DDNS-Go,这样方便使用https对NAS相关服务进行远程访问。具体教程我以前已经出过,大家按需食用即可:
- Docker/Docker Compose安装:Docker系列 配置Docker全局环境、Docker系列 了解Docker Compose的配置文件;
- NPM & DDNS-Go:Docker系列 两大神器NPM和ddns-go的安装
这里有个重要的情况需要提醒,即大多数有实时交互界面(比如PVE后台、Clash Dashboard控制面板)都需要在NPM中勾选Websockets
选项:
否则https访问应用时,其交互界面的信息将会显示异常(比如黑屏/error/无输出)。切记,切记!
Fail2ban防扫描和暴力破解
参考《配置 Fail2ban 保护 Proxmox VE · Phoenix’s island》。可在丑搜搜索关键词
fail2ban
查询其它帮助。
关于Fail2ban
由于局域网会暴露在公网中,因此很容易受到恶意IP扫描后台并进行暴力破解。根据chatGPT对Fail2ban的介绍:
Fail2ban是一种基于日志分析的安全工具,用于防止恶意用户暴力破解登录密码或在您的系统上进行其他恶意行为。它通过监视系统日志文件,查找特定的恶意行为,如多次失败的登录尝试、恶意扫描或其他异常活动,并自动封锁攻击者的IP地址,以防止进一步的攻击。
Fail2ban是一个开源项目,支持多种操作系统和服务,包括Linux、Unix、Apache、Nginx等。它可以配置为阻止暴力攻击、SSH登录、FTP登录、SMTP认证、HTTP访问、数据库访问等各种服务。
通过使用Fail2ban,您可以加强您的系统安全性,减少恶意攻击的风险,并保护您的敏感数据和重要业务免受黑客和其他恶意用户的攻击。
很有必要使用Fail2ban对PVE等Linux主机进行保护喔!下面是一个PVE的保护实例:
安装Fail2ban
首先,更新系统
apt update && apt upgrade
安装Fail2ban
:
apt install fail2ban -y
查看一下状态:
fail2ban-client status
默认ssh是被监控的:
Status
|- Number of jail: 1
`- Jail list: sshd
添加PVE jail
我们再添加一下PVE GUI登陆相关的jail:
- 创建filter
vim /etc/fail2ban/filter.d/proxmox.conf
填入以下内容:
[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =
- 创建jail
vim /etc/fail2ban/jail.d/proxmox.conf
填入以下内容:
[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
logpath = /var/log/daemon.log
maxretry = 3
# 1 hour
bantime = 3600
重启 fail2ban:
systemctl restart fail2ban
检查状态:
fail2ban-client status
输出类似下面的情况即生效:
Status
|- Number of jail: 2
`- Jail list: proxmox, sshd
查看拦截日志
可以使用
find / -type f -iname "*fail2ban*"
定位日志文件。一般在/var/log/fail2ban.log
观察一下日志:
less /var/log/fail2ban.log
可以看到自fail2ban安装成功后有一堆IP扫我的ssh:
也可以查看实时ssh攻击:
tail -f -n 30 /var/log/fail2ban.log
Fail2ban的进阶用法我暂时了解不多,以后研究透了再另开文章介绍。
小结
PVE的基本设置就是这些。主要是网络结构那里比较复杂,小白得仔细想想。至于其它部分,对于熟悉Linux和Vim编辑器的人来说只是小case;如果你对Linux不太了解,还是建议先了解《学习地图 》的“Linux基础”系列文章。
写本教程距离我装机也有些时日了,有些细节记不太清,以后再慢慢补充吧。
如果你在设置过程中有什么问题,也可以直接在评论区下留言!
扩展阅读
- Proxmox VE Documentation Index:PVE的官方文档
- Renaming a PVE node – Proxmox VE:更改节点的名字
- Network Configuration – Proxmox VE:PVE的网络设置。
- 佛西博客 – Proxmox VE虚拟机无法关机的解决思路:介绍了qemu-guest-agent。
- 【司波图】2022版通用型PVE_AIO服务器布局教程(上):网口的布署
- PVE里安装LXC:司波图的视频教程
- 【司波图】基于PVE的千元级带万兆交换机的AIO服务器搭建-bilibili:有OMV的G5400T集显直通的教程。
- 免费开源影音服务器Jellyfin部署全攻略,含群晖,OMV系统下Docker安装并启动硬件转码_哔哩哔哩_bilibili
- 免费开源影音服务器Jellyfin部署全攻略,含群晖,OMV系统下Docker安装并启动硬件转码
- 解决Jellyfin提示 “该客户端与媒体不兼容,服务器未发送兼容的媒体格式“ 错误的解决办法 – 知乎 (zhihu.com)
- PVE直通Intel核显虚拟机配置ffmpeg-qsv硬件加速
- Intel N5105核显硬件实时转码部署实战教程——基于PVE LXC容器–bilibili
- Z.1、J4125虚拟机核显直通(含HDMI输出) · 司波图/通用PVE AIO安装教程:图哥的教程是可以成功直通的(第1次成功,后面没怎么成功)。但不知道还有没有显卡驱动的问题。
- Docker中Jellyfin开启硬件加速(Intel QuickSync) – Rogunt – 博客园 (cnblogs.com):有关于升级容器内部ffmpeg的过程
- (2456) PVE直通核显 虚拟机关闭后恢复宿主机显示 – YouTube:似乎是一个PVE大佬。视频的风格也不错。
- N5105 软路由安装 ESXi 7 直通核显给 Debian / Ubuntu 虚拟机通过 Docker 实现 jellyfin 硬件转码视频文件(硬解/编码) (aoeii.com):这个博客文章写得十分用心,很强的参考价值。
- Hetzner Online Community:关于核显无法被linux识别的解决方案。
- 懒人党的福音–顶级全自动化影音系统全方位深入剖析 | 杰森的博客 (johnrosen1.com):很全的影音系统折腾。
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍