作者:瞎折腾的地产狗
写在前面:本篇开始正式进入PVE虚拟机的安装,考虑到可能会有用PVE内虚拟机做主路由的读者,所以软路由篇还是放在了第一章,本篇会介绍的软路由系统有iKuai以及openwrt衍生的istoreOS和Immortalwrt,分别对应直接镜像安装、按照官方文档img镜像写盘安装以及使用rootf镜像安装CT容器三种方式来进行。
本篇所要用的操作有增加ISO镜像、增加CT模板、WinSCP上传文件、Shell基本操作、PVE网络基本设置、创建虚拟机及基本设置、命令行创建CT容器及基本设置。
首先来说说软硬路由。硬路由指的是传统的路由器,就是你在网上买的路由器基本上都是硬路由,他的硬件和硬件的固件系统都是为了路由和网络管理的功能设计的,优点是相对稳定,缺点是系统的可扩展性不是很好;软路由则是基于一台普通电脑,然后使用特定的路由系统来实现路由功能,优点就是可扩展性和DIY性更好,缺点就是硬件自行组装系统不一定完全适配,而且系统可能会存在不稳定性。不过现在软硬路由在使用层面上的区别也越来越小,当前的硬路由也开始主打扩展性,而软路由的系统经过长期迭代也趋于稳定。另外,比如说像部分华硕这种可以刷系统的以及像部分小米这种本来就是openwrt做基础的路由器,到底算软路由还是硬路由其实也挺模糊的。
本文主要说的还是安装和基础的网络设置,插件之类的东西还请自行搜索了,毕竟每个人的需求不一样。
一、准备工作
如果说安装过程中你的PVE和操作管理网页端的电脑不能联网,那么你需要先将要用的安装镜像下载下来,如果下载有什么问题可以后台留言。
iKuai:
https://www.ikuai8.com/component/download
选择iso镜像下载即可,建议还是选64位,虽然说是最低要求4G内存,但是我们只用路由功能其实还可以缩。
istoreOS:istoreOS看了看都是img的镜像,所以需要写盘来安装,也就是说除了镜像外还要下载一个写盘工具,他的下载里面也有,叫img2kvm。
EFI镜像:https://fw.koolcenter.com/iStoreOS/x86_64_efi/
普通镜像:https://fw.koolcenter.com/iStoreOS/x86_64/
工具:https://fw.koolcenter.com/binary/other-tools/
镜像选择一个下载就行,区别就是efi引导需要用efi的bios,然后选择最新的版本就行,工具选择img2kvm下载即可
ImmortalWRT:
由于我这里是直接用CT模板安装容器,所以是去这个网站找的符合PVE CT模板要求的镜像rootf.tar.gz,下载地址如下:
https://downloads.immortalwrt.org/releases/23.05.2/targets/x86/64/immortalwrt-23.05.2-x86-64-rootfs.tar.gz
如果后续版本变化了可以去这个网址找最新版:
https://downloads.immortalwrt.org
如果说你更喜欢ISO镜像安装虚拟机的办法也可以去他这里搜索X86选择image-efi.iso镜像下载:
https://firmware-selector.immortalwrt.org/
或者你也可以在这里找到rootf的img镜像将其转换为tar.gz格式的模板。
准备完成,进入PVE后台,准备正式开始安装。
二、PVE网络基本设置
PVE的网络设置在中间选项的系统里面的网络项,里面会显示你所有的网络设备和创建的虚拟网桥(默认会有一个vmbr0,这个网桥的ip地址就是你访问PVE管理界面的IP地址)。

虚拟网桥
虚拟网桥的作用是给PVE系统内的虚拟机设置虚拟网口连接用的,虽然叫网桥,我们可以把他想象成只有0-N个物理接口以及很多个内部虚拟接口的交换机,如下图所示。

虚拟网桥的设置
我们点击创建Linux Bridge,可以看到如下需要填写的部分,首先是网桥的IPv4/CIDR,这个地址可以访问到PVE的管理后台;然后是网关IP,由于这个是PVE主机的网关,所以只能设置一个,重复设置会报错;IPv6不需要配置,后续如果需要添加接受路由器广播就行,在公网访问的篇章再来说;VLAN感知如果你要单线复用或者VALN划分的话需要勾选上,下面会说什么是单线复用;桥接端口就是你这个网桥的物理网口的名称,网口名称就是那些enp开头的网口,注意区分哪个是哪个,可以使用分别插网线看能否连接到PVE来测试,桥接端口可以设置多个就相当于这个交换机有多个跟物理设备连接的网口,但是最终的网桥的IP地址还是只有一个,也可以不设置桥接端口只作为虚拟机内部通信的网桥。MTU保持默认即可。

一些虚拟机网络结构举例
我这里举一个一般的没有vlan但是有网卡直通的例子和一个PVE总共就一个网口对外的VLAN划分的例子。
案例1就是我目前在用的,2.5G网卡直通NAS,其他的虚拟机全部接到PVE管理IP对应的网桥上,为了虚拟机内的存储挂载读写速度NAS也有一个虚拟网口和虚拟网桥连接,然后两个网口接到交换机上去,整体比较简单。

案例2就是全PVE设备总共就一个网口还需要将主路由也放在PVE内。不推荐这种接法,因为所有流量都走这一条网线而且还有主路由,网络不稳定性比较大,容易boom。同时不管怎么说主板上都应该还是有插pcie设备的地方,建议买张pcie网卡插上去,比如说8125b芯片的2.5G网卡也不贵。这里只是拿这个举例子什么是VLAN,因为我也没有网管交换机,所以只能画个图,没法实操演示。

图上红色的网线就是路由器WAN口的连接,黄色的就是局域网内的连接,橙色的线就是既要负责WAN口也要负责LAN口的线。我们通过将WAN口网线设计的网口VLAN tag设为10,LAN口的设为20,交换机的网口2设为Trunk接口跑两个VLAN tag,就可以实现单线复用在PVE主机只有一个网口的情况下运行主路由。
虚拟网桥上的通讯会因为需要CPU处理数据帧会占用一定的CPU,你比如说我在通过虚拟网桥连接的两台机器上跑iperf3命令测网速,就会看到CPU的占用多了大概35%-40%,当然这个测速是24Gbit/s的传输速度,平时连接外网的资源占用基本可以忽略不计。当然抠细节的话还是硬件直通对于系统资源的消耗最少。


三、软路由安装
1.iKuai
iKua主要的功能是在于做大型网络管理、流量控制和行为管控了,一般还是用作主路由的比较多,旁路由的功能并不算是太丰富。iKuai的优点是在于还是比较稳定,毕竟是商业化的产品,而且管理功能比一般家用路由器系统多,但是这些网络管理的功能家里面用得上的机会有待考察。如果你想要openwrt的那些功能,还是要openwrt的相关衍生系统,可以跳过这一节。我也只是看大家都把iKuai放第一个我也放吧,万一有些我不知道的功能呢,毕竟我只是一个硬路由带ssh功能的用户,而且也可以初步先说一说虚拟机的一些设置,多说几次大家就熟练了。
iKuai是通过光盘镜像文件来安装的,类似于平时我们安装windows,相当于新装一台机器,所以使用的是新建虚拟机的模式。
开始上传镜像或者使用PVE的url下载,首先展开PVE管理界面的PVE节点,找到下面的硬盘图标local(默认的应该是一个local供PVE系统使用,一个local-lvm供虚拟机使用),然后选择中间选项的iso镜像

如果PVE不能联网就上传我们刚才下载的镜像,如果可以联网也可以选择从URL下载,就是右键点击64位的下载按钮然后选择复制链接过来即可。哈希校验可选,iKuai的校验码给的是MD5,当前3.7.13 202406212115版本的MD5校验值为5507955FD7E297C3BA74382CE6D2B4A2,上传界面如下

URL直接下载的话界面如下

上传成功会显示最后一行是TASK OK字样的这个界面

上传后的镜像存储在/var/lib/vz/template/iso/这个目录内,同时我们可以看到网页上ISO镜像里面有了刚才上传的iKuai镜像。
点击右上角创建虚拟机,勾选上下面的高级,VM ID随意,可以选个你喜欢的不和其他重复就行,名称可以就取成iKuai,其他可以默认。如果你要当主路由,建议开机自启动一定勾上,下同,免得万一哪天PVE主机关机了或者停电了重新开机又要插网线折腾半天。

选择我们刚才的镜像,操作系统保持linux不用去改他

机型选择q35更加现代一点对pcie设备直通支持更好一点而且我们也不需要对老系统的兼容性,Qemu代理可开可不开,后面如果你真的需要这个功能也可以在选项里面去再开。

硬盘最小要求是1GB,由于我们All in one当中路由器只需要实现网络相关功能即可,给个4GB绰绰有余,后续可以增加,但是应该是不能缩小。iKuai不要求系统盘的总线接口,我用的是nvme的SSD所以我选择了virtIO Block。如果你是SATA接口的硬盘可以选择SCSI总线,你是SSD还可以考虑勾选SSD仿真。

CPU给个双核其实就够了,类别可以默认,也可以跟我一样选成跟物理机一致的host。因为物理机单CPU多半不支持NUMA,所以启用NUMA没必要选。要验证支不支持也可以在shell中输入命令
dmesg | grep -i numa
返回No NUMA configuration found就是不支持

内存按照最低要求给个4096MB即可,就算是旗舰硬路由多半也没这么大的内存所以也是绰绰有余。虚拟机关机后可以调整。Ballooning表示可以PVE可以动态调整虚拟机内存占用,除非真的是物理机总的内存捉襟见肘你为了保住路由器的顺畅不被PVE收回内存,否则还是建议启用。

网络这一页按照你实际要使用的网口形式来设置。如果你WAN口LAN口都要直通网卡,那这里就选无网络设备;如果你要用上面提到的单线复用,那么这里还是先选择LAN口并输入LAN口的VLAN tag,都不用就设置一个LAN口挂在默认的vmbr0网桥上或者你建的别的网桥上,作为路由器管理口。因为这个虚拟机作为路由器使用这里建议把Multiqueue设置为你刚才设置的CPU核数,我忘了设置了后面检查才发现。后面也可以虚拟机硬件的网络设备来修改。

最后是确认页,确认无误就点击完成,不用点创建后启动,因为我们还要调整引导顺序和硬件直通。

然后我们点击已经创建好的iKuai虚拟机,点击引导顺序,调整为硬盘最前(你的可能是SCSI0,如果你创建的硬盘是SCSI总线的),光盘第2,网络
那个可以取消勾选(或者你准备全直通硬件没有网络这个选项),这么选是避免安装完重启还是光盘启动你要额外关一次机。不觉得麻烦也可以光盘在第一启动顺序。

如果说你需要添加网卡直通虚拟机,点击上面的硬件选项,点击添加PCI设备

点击原始设备在下拉菜单中选择你要添加的网卡

例如我这儿的8125的2.5G网卡,如果是多网口的可能需要拆分IOMMU组,我这里没有实际的硬件所以就不做演示了可以自行探索或者问AI。选择后记得再点击下面的PCI-Express选项。添加后你就会看见多了一个设备,ID就是上面的ID,然后有个pcie=1

需要单线复用的虚拟网口也是在开机前先进行设置,这里需要添加一个网络设备,其他和之前设置的一样,只是说VLAN tag要改一下。如果是物理网口直通的话应该是在iKuai界面里面去设置vlan相关信息。
旁路由使用的话记录一下你的网卡的MAC地址,等会去主路由绑定固定的局域网IP,虚拟网卡在硬件栏双击打开即可,可以直接复制。
网口设置完成后我们点击控制台开机start now开机,很快就可以看到这个界面,我们输入1回车再确认,然后几乎秒安装完毕。

重启后进入这个界面里面的网口顺序跟你硬件里面的顺序应该是一致的,当然我只有一个网口。里面的设置基本上都是输入q回到上一层,不管他有没有显示。输入1可以换绑lan1口对应的网卡,主要是输入2设置LAN口IP,他默认是192.168.9.1。如果是旁路由模式你可以先去你的主路由把这个LAN口的MAC和局域网IP绑定了再来设置这个LAN口IP,设成一样就行。如果这个是主路由就把LAN口IP设定为跟你PVE的IP同网段的.1即可,例如PVE是192.168.1.10,这里就设置为192.168.1.1。(单臂路由设置是在检测到你只有一个网口的情况下给你的选项,开启后会给你8个虚拟网口按VLAN1-8划分,我们这里VLAN可以在PVE层面去操作,也可以进系统后在iKuai内操作,所以没必要。)

设置完成后即可通过网页访问iKuai管理webui。初始用户名密码均为admin,进入后会强制要求你修改,密码复杂度有一定的要求但是要求不高,记住就行。

旁路由的网络设置很简单,进入后确认dhcp服务关闭了就行了,剩下的就是你需要什么功能就看能不能安装什么插件了。

以后你的设备要使用这个旁路由转发只需要手动将那个设备的网关修改为旁路由IP就好了,觉得麻烦而且要全部设备的流量都走旁路由过一次的话可以考虑在主路由去修改dhcp服务,把dhcp服务默认网关修改为旁路由IP,例如小米的路由器是在这里。这个设置主要的问题就是这么设置之后旁路由掉线了你就不能上互联网了,得回主路由把默认网关改回主路由。后面openwrt的两个系统也是同样的逻辑,就不再赘述。

如果说是主路由的话就需要两个网口,然后你点击内外网设置,选择WAN口

接入方式这里如果按照上一篇我们说的光猫桥接的话这里选择PPPoE拨号,光猫拨号的话就直接dhcp动态获取

剩下的设置就跟普通路由器没有什么区别,只是说ikuai还可以进行AC管理、流控分流、行为管控(记录你浏览的网址和聊天工具等上线记录、终端上下线和流量统计),可以自行探索这些功能,并且了解一下不用怎么折腾的路由器就可以把上网行为记录到什么程度。
2.istoreos
最近比较热门的一个openwrt衍生系统,主打的是一个易用性和整合性。系统本身是免费的,但是提供的一些插件有要收费的。考虑到我们不需要软路由去做那些杂七杂八的活儿,四舍五入这个系统就是免费的。
安装方法与上面的iKuai略有不同,区别就是在于系统不是通过ISO镜像安装而是用img镜像直接写入硬盘挂载到虚拟机上,然后使用的是efi引导,设置里面会需要多一个efi硬盘,等会儿删了就是。跟iKuai同样的操作就不再赘述,只说一下不同的地方。
操作系统这里选择不使用任何介质

系统这里选择bios为支持uefi的,然后efi储存选在local-lvm里面。如果你不用efi的镜像,那么这一步可以和iKuai选择一样用默认bios。我们也不用挂大容量硬盘做路由器系统盘,我这里只是演示一下用efi是个什么样子所以选择的efi镜像。

硬盘直接不需要,等会img写盘会直接增加一个硬盘,点击这个删除

连接上PVE的服务器,然后进入root文件夹新建一个istoreos目录,进入其中将我们下载的镜像和工具上传上去,传完之后是这样

然后右键选择img2kvm点击属性,把X全部勾上,开到这个权限已经足够,当然你要像官方文档一样全开777权限也不是不行。

接着我们打开ssh工具或者就用PVE管理界面里面的shell,进入到istoros文件夹
cd istoreos
./img2kvm 固件完整名 虚拟机ID
固件完整名字可以在WinSCP中右键文件名复制到剪贴板,虚拟机ID看你设置的是多少。

以我的来举例现在我的这条命令就是
./img2kvm istoreos-22.03.6-2024062810-x86-64-squashfs-combined-efi.img.gz 103
运行结束后会有一个镜像已经写给了虚拟机

PVE的界面也可以看到出现了一个未使用的磁盘

双击这个磁盘,总线设备选择逻辑还是跟安装iKuai的时候一样,然后点击添加。

接着点击EFI磁盘,点击移除,第一次变为未使用的磁盘,还要再移除一次

最后点击选项,选择引导顺序,将我们后面添加的硬盘放到第一位

点击OK后进入控制台启动虚拟机。显示istoreos已经准备好按回车启动控制台的时候按回车

回车后输入quickstart回车

然后请注意这里是方向键控制不是让你输数字,和iKuai有点区别。
istoreos跟iKuai有一点区别就是你如果还是旁路由的接法他就会像一台正常的机器接上主路由并且通过主路由dhcp服务器获取一个IP地址,如有需要你也可以提前去主路由绑定固定IP。如果是主路由那么还是一样的设置LAN口IP和子网掩码,修改后istoreOS是需要重启才会修改IP的。然后同样我们在浏览器输入istoreos的LAN口地址,进入管理webui,经典的openwrt界面。默认用户名root,默认密码password。
istoreos比一般的openwrt好的地方就是他有指引化操作,比如在网络向导处会有三个选项,你可以根据自己的模式选取

同样的,不想按照指引来唯一注意的就是当旁路由用的话网络设置把dhcp服务给关了,选择网络,接口,LAN口,DHCP服务器,忽略此接口保存即可

剩下的至于openwrt的那些插件就需要你自己探索了,比如说什么广告拦截和其他之类的。
3.ImmortalWRT
同样是一个openwrt的衍生系统,单独拿出来说是因为他有rootf.tar.gz的版本可以安装为lxc容器,lxc容器直接运行在PVE内核上会比虚拟机少一点系统开销,不过路由器本身也没啥开销,所以就是提出一种思路而已。当然原生openwrt也有,设置基本类似,喜欢原生的也可以参考。
虽然说是用lxc容器的路子部署,但是由于rootf文件里面的os-release里面的信息PVE不认,所以正常可视化选项是不行的,只有通过命令行才能正常安装,以下是安装的办法。
首先我们还是在CT模板里面下载immortalwrt的rootf.tar.gz文件,放在这里只是为了方便管理,你也可以用WinSCP上传到root文件夹内。同样有本地上传和PVE自行下载两种方式,与前面iKuai镜像类似,只是说不在ISO镜像里面在下面的CT模板。
PVE中有模板之后我们就可以开始创建lxc容器了,这里只能用命令行,因为PVE无法识别系统需要加入一个可视化界面不能添加的命令--ostype unmanaged来跳过系统识别。我使用的创建命令如下,符号是分行的意思,方便阅读,不然这一行实在是太长了,你也可以把他删了合成一行,但是注意别把空格删掉了
pct create 104
/var/lib/vz/template/cache/immortalwrt-23.05.2-x86-64-rootfs.tar.gz
--arch amd64
--hostname ImmortalWrt
--rootfs local-lvm:2
--memory 2048
--swap 2048
--cores 2
--ostype unmanaged
--net0 name=eth0,bridge=vmbr0,gw=192.168.1.1,ip=192.168.1.104/24
每一行的意思分别是
容器id,注意不能和已有的虚拟机以及容器重复
CT模板路径,我这个是在CT模板那里上传后的默认位置
CPU类型,这里不用改
容器显示的名字,后续可以在conf文件里面改
系统盘位置和大小,大小单位是GB
内存大小
交换区大小,你用管理界面创建的时候他默认也是和内存一样大,不喜欢也可以设为0
CPU核心数
系统类型,设置为unmanaged
虚拟网卡,分别是网口序号,名字,连接的虚拟网桥,网关IP,网口的IP。网口的IP你也可以写ip=dhcp,后面都可以直接改
确认修改无误后我们输入shell或者用ssh运行上述命令,运行完成后就会看到PVE中增加了一个ID为104的lxc容器(ID和名字看你上面输入的是什么)

然后我们还需要修改一点点配置文件,打开WinSCP,进入/etc/pve/lxc这个文件夹,双击104.conf打开,没这个文件就刷新一下

然后我们看到里面本来就有的就是刚才我们创建时候输入的那些参数,内存核心数网络都可以进行修改,硬盘大小修改还需要其他操作这里先暂且不提。然后我们需要把PVE自带的默认openwrt配置文件丢进来。在下面增加以下内容,当然我这里是为了图方便,为了安全性的话可以参考
/usr/share/lxc/config/openwrt.common.conf
这个PVE自带的模板设置来修改
我这里就直接允许了访问所有设备(第一行),然后取消了apparmor,因为有可能影响插件使用(第二行)
lxc.cgroup.devices.allow: a
lxc.apparmor.profile: unconfined
如果说你要当主路由你还需要将/dev/net文件夹和/dev/ppp这个文件挂载进去从而可以进行PPPoE拨号,加入以下两行。但是由于我没法实验拨号,只是理论上我参考pxc使用核显的设置,这样路由器应该已经具备了拨号能力。
lxc.mount.entry: /dev/ppp dev/ppp none bind,optional,create=file
lxc.mount.entry: /dev/net dev/net none bind,optional,create=dir
当然lxc也可以直通网卡,你需要在下面加入如下命令。我没有可以供直通的额外网卡了所以我没有测试这个是否没有问题。
lxc.net.1.type: phys
lxc.net.1.link: 你的网卡号,例如enp4s0
lxc.net.1.flags: up
然后我们就可以在控制台启动容器,提示你按回车后按下回车,进入控制台界面

首先我们来改个root密码,输入passwd,然后输入两遍密码,请记住这个密码,等会儿登录管理界面要用。
然后我们修改网络配置,由于只有vi命令所以我们只能用vi修改,需要回忆一下vi工具中按i键进入插入修改模式,按esc退出修改模式,:wq!是保存修改退出,:q!是不保存修改退出。修改的文件如下
vi /etc/config/network
向下拉找到lan相关的设置

如果你有多个网卡要改端口就去修改上面的eth0,主要是修改下面的option ipaddr,这个是你访问路由器的网址,请根据你是旁路由还是主路由自行修改。
修改完成保存退出后输入reboot重启设备,因为lxc启动快所以直接重启,重启网络设置和防火墙的命令打完reboot已经启动完了。
重启完成后输入你上面设定的ip地址就可以进入路由器管理后台,用户名root,密码就是你刚才设定的密码。进入之后就可以看到系统运行的状态。如果你是旁路由的话还是跟istoreos一样的操作进入网口去把dhcp忽略了,剩下的就是按照openwrt你需要的功能进行操作了

由于这里没有像istoreos一样的设置向导,所以简单说下怎么当主路由连上WAN口
如果作为主路由需要拨号那么还是在网络-接口界面下面添加新接口,名称WAN,协议选择PPPoE,设备选择你接WAN口的网口

然后输入宽带账号密码,之后点击保存

然后记得点击保存并应用,就可以实现拨号了

immortalwrt的软件安装在这儿,当然你也可以命令行直接用opkg进行包管理。

软路由安装完了剩下的就是需要自行折腾了,就我个人而言最推荐的模式还是有些硬路由自己就是openwrt魔改的然后带ssh就可以实现很多功能,也不用害怕万一PVE出问题了上网功能受影响;另外就是软路由做旁路由,毕竟也不是所有家里人都要用旁路由功能。当然做主路由问题也不大,到目前为止我PVE也用了半年多了,所有的重启都是我自己折腾的原因,不太折腾的话一般也不会boom,稳定性上问题不大。
下一篇会开始说NAS虚拟机的安装。


财经自媒体联盟

4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有