在 OMV (Debian) 上安装软路由虚拟机,并且网卡直通给虚拟机。
本文适用于 OMV5 ,演示版本为 5.5.8-1,其他版本是否适用,请自行判定。
这篇教程很复杂,不懂的可以看我以前写的教程,或者是到网上自己爬。
在前面一段时间,我写过一篇教程,讲的是在 PVE 上安装虚拟机组装 All In One,但是那一期并不完美,只把硬盘直通给了 OMV,而没有直通显卡,这样 OMV 并没有硬件解码的能力。
看网上大部分 Up 主的方案,都是创建 PVE 虚拟机,然后虚拟机上装 NAS,然后把 SATA 控制器和核显直通给 NAS,我就在想,为什么不直接在 NAS 上安装软路由虚拟机,然后再把网卡直通给软路由?
准备➴
有想法就开搞,看几个常见的 NAS 系统,Synology,FreeNAS,OpenMediaVault。
这三个系统中,首先把 FreeNAS 排除,基于 FreeBSD 的系统,搞不定,然后是 Synology,白的教程我可以出,黑的是不可能的,但是白的那台我不会瞎折腾的。系统就敲定是 OpenMediaVault,基于 Debian,贼方便。
安装系统就略过了,这个网上有很多的教程,不过大部分 OMV 都是安装在单盘上的,如果想安装在 Raid 上,只需要一点技巧,这个以后可能会出一期教程的。
安装拓展插件和内核➴
安装完 OMV 之后先更新系统
1 | sudo apt update |
然后安装拓展插件
1 | wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash |
安装完拓展插件以后,刷新网页,会有OMV-Extras
这个选项,在内核选项卡中安装 PVE 内核,并设为默认启动内核。
然后重启系统,使用 PVE 内核启动。
安装 KVM 和 Cockpit➴
接下来安装虚拟机,首先安装 Cockpit
,这个直接在 OMV 的面板上安装即可(这一步也可以不做,直接使用下面的命令行安装)
然后安装 KVM 虚拟机相关的东西(如果不懂,直接照抄就行)
1 | sudo apt install cockpit cockpit-* qemu qemu-kvm qemu-utils libvirt-* bridge-utils virt-* net-tools |
尝试打开 Cockpit 面板看一下可设置的内容。
创建网桥➴
如果你有多个网口想要作为 LAN 口,就需要把这些网卡桥接起来,作为一个网桥使用,在 OMV 里创建网桥非常简单,只要你做了上面的操作,就可以在 OMV 管理面板创建网桥了,注意 OMV5 的网络配置文件,和正常 Debian 的不一样,尽量不要直接修改配置文件。
创建网桥的过程中,当前连接的网口是不能被选择的,可以把这个网口留作后面要用的直通 WAN 口。
创建完网桥之后,需要把网桥添加进 kvm 虚拟机里。
1 | sudo apt install vim |
添加下面内容,注意 name,我的是 br0,你的不知道是不是。
1 | <network> |
然后添加进 kvm 虚拟机里
1 | sudo virsh net-define --file ~/br0.xml |
然后就可以在 Cockpit 面板里看到这个网络了。
配置硬件直通➴
这里参考PVE虚拟机那一节
修改 grub 文件
1 | sudo vim /etc/default/grub |
找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"
,修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
,amd 的话就改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
然后保存,输入命令
1 | sudo update-grub |
打开 /etc/modules
1 | sudo vim /etc/modules |
增加以下内容
1 | vfio |
保存,并重启服务器。
创建虚拟机➴
如果你是多网口的机器,并且刚才创建了网桥,创建虚拟机之前,我们要先改一下网线接口的位置,将网线从刚才的网口,改到创建好网桥的网口上。
首先我们创建一个存储池,在Cockpit面板里操作即可,创建完成后记得激活。
然后上传镜像到此存储池中,在电脑上用SCP上传(不是NAS上)
1 | scp D:\MonoLogueChi\Desktop\1\openwrt-x86-64-generic-squashfs-combined-efi.qcow2 root@192.168.1.129:/srv/dev-disk-by-label-v/data/vm |
如果你不知用什么镜像,可以用我编译的精简版镜像
然后导入虚拟机,但不要立即启动,修改启动顺序,然后检查一下当前的网络接口是不是br0,如果是br0,就启动测试一下。
看一下网卡是不是正常的。
硬件直通➴
可以PCIE直通➴
测试完之后虚拟机关机,然后搞硬件直通。
下面这一步,最好打开一个记事本,把需要记录的都粘贴进去。
首先是看网卡的id,这一部分可以参考我们上一期的PVE教程。
1 | sudo dmesg | grep eth |
会输出大概这么一长串东西
1 | [ 1.294563] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) bc:5f:f4:ab:d8:7b |
我想要直通的网卡是 enp4s0
,我找到了相关的ID
1 | 0000:04:00.0 |
那这个有啥用呢?再来看下面的(如果不是新手,下面这一部分其实不用做)
1 | virsh nodedev-list --tree |grep pci |
会输出一个这样的东西
1 | +- pci_0000_00_00_0 |
在里面找到 pci_0000_04_00_0
,就是前面我们找到的网卡,别着急,接着看。
输入命令
1 | virsh nodedev-dumpxml pci_0000_04_00_0 |
会输出这样的一堆东西
1 | <device> |
上面这些最好记在一个地方,方便等下查看。
接着detach设备
1 | virsh nodedev-dettach pci_0000_04_00_0 |
然后编辑虚拟机配置文件,具体名称看你刚才设置的
1 | vim /etc/libvirt/qemu/openwrt.xml |
添加一部分
1 | <devices> |
其中的 <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
,这一部分按照上面的填。
添加完成之后,保存,然后重启主机,再打开虚拟机,看一下是否有另一张网卡。
不能硬件直通➴
如果你的网卡是那种螃蟹卡,不能pcie直通,就按照下面的来做。
在虚拟机这里再添加一张网卡
这样虽然也能用,但是效率肯定没有硬件直通高。
开机,输入 ifconfig -a
查看另一张网卡是否存在。
设置➴
接下来就是正常软路由的设置了,因为前面开机过一次,可能会遇到没有WAN口的情况,遇到这种情况,手动创建一个WAN口就可以了。
补充➴
貌似按照上面操作,OMV上的DNS会被NetworkManager接管,导致DNS配置出现问题。这个可以通过修改NetworkManager配置文件解决
1 | vim /etc/NetworkManager/NetworkManager.conf |
修改
1
2
3
[main]
dns=none
no-auto-default=*
➴
1 | [main] |
参考
KVM 安装部分 https://zhuanlan.zhihu.com/p/113187354
硬件直通部分 https://libvirt.org/formatdomain.html
- 本文作者: MonoLogueChi
- 本文链接: https://blog.xxwhite.com/2020/omv-oia.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!