简介
上一篇文章介绍了共享数据集与数据保护的一些小设置,这一期介绍一些与虚拟机相关的设置。
虚拟机网络配置
为什么网络不互通
在创建虚拟机时,我们会为虚拟机分配一张虚拟网卡,我们可以选择将虚拟网卡连入哪一个物理网口。但是实际这么操作之后,虚拟机虽然有网了,但是我们会发现,虚拟机是无法与宿主机建立连接的。这是因为虚拟机通过macvlan绑定在物理网口上,无需经过宿主机进行外部通信,宿主机无法在ip层取得虚拟机的流量。因此理论上来说,在宿主机对虚拟机发出回报时,报文的下一跳将被设置为宿主机(宿主机不知道可以直接从本机转发到虚拟机),并交由物理网卡转发至外部再回弹,最后重复这个过程,导致流量回环现象。
这里举个例子,假设虚拟机为131,宿主机为8。以下为流程:
(1.目标131,下一跳为8)->(2.到达8,目标131,下一跳为8)->(3.到达8,目标131,下一跳为8)…
1 | traceroute 192.168.31.131 #在宿主机192.168.31.8上对虚拟机192.168.31.131发出报文 |
可以看到,如果你想通过ip将8的报文转发到131,那么你就要经过8,而你到达8的时候,你的下一跳还是8。macvlan对这种情况进行了网络隔离,虚拟机发出的流量不能再回到宿主机,因此我们的虚拟机不能直接通过物理网卡与宿主机进行通信。
那么如何解决这个问题呢?
桥接
在物理机上再虚拟一个网桥,将物理机与虚拟机连接起来。这个过程可以理解为创建了一个虚拟交换机,然后将虚拟机和物理机都连接上交换机。这里借用趣谈网络协议的一张图。
这样你的Truenas就可以和虚拟机互通了,由于大部分人的机器只有一个网口,因此Truenas官方特别更新了这部分的教程,这里直接放链接:https://www.truenas.com/docs/scale/scaletutorials/virtualization/accessingnasfromvm/
网卡直通
桥接虽好,但是也存在一些小问题。由于整个流程全部使用了虚拟的硬件,因此高速的数据交换,就会带来巨大的处理器占用。从我的使用来看,就是虚拟机资源经常不够用了。网桥就是为虚拟机服务的,怎么一通操作虚拟机先死机了呢。于是Truenas官网也给了我这种用户一些提示:
If your system has more than one physical interface, you can assign your VMs to a NIC other than the primary one your TrueNAS server uses.
也就是说,如果你的网口比较多,那么你可以通过为虚拟机直接分配一个物理网口,将虚拟机直接连入局域网,让它就像一台正常的电脑一样和物理机交互。这种方案就称为网卡直通。如何进行网卡直通官方并没有介绍,所以此处放上流程。
首先,你要先找到自己的物理网卡在哪里。
1
2
3
4
5
6
7
8lspci #列出所有的pci设备
01:00.0 Non-Volatile memory controller: Micron Technology Inc Device 5407
02:00.0 SATA controller: JMicron Technology Corp. JMB58x AHCI SATA controller
03:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series
04:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
05:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
06:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
07:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)可以看到从上到下列出了一大堆的pci设备,从中可以看到
Ethernet controller: Intel Corporation Device 125c (rev 04)
这个就是网卡,而前面的编号就是pci的设备编号了。我们可以用设备编号来表示一个设备。得到了设备编号之后,打开虚拟机的Device设置添加设备。
在type中选中PCI Passthrough Device
,然后找到需要直通的网卡编号。直通成功,在操作系统中安装驱动(可能需要)。