Truenas Scale踩坑——虚拟机部署

简介

上一篇文章介绍了共享数据集与数据保护的一些小设置,这一期介绍一些与虚拟机相关的设置。

虚拟机网络配置

为什么网络不互通

在创建虚拟机时,我们会为虚拟机分配一张虚拟网卡,我们可以选择将虚拟网卡连入哪一个物理网口。但是实际这么操作之后,虚拟机虽然有网了,但是我们会发现,虚拟机是无法与宿主机建立连接的。这是因为虚拟机通过macvlan绑定在物理网口上,无需经过宿主机进行外部通信,宿主机无法在ip层取得虚拟机的流量。因此理论上来说,在宿主机对虚拟机发出回报时,报文的下一跳将被设置为宿主机(宿主机不知道可以直接从本机转发到虚拟机),并交由物理网卡转发至外部再回弹,最后重复这个过程,导致流量回环现象。
这里举个例子,假设虚拟机为131,宿主机为8。以下为流程:
(1.目标131,下一跳为8)->(2.到达8,目标131,下一跳为8)->(3.到达8,目标131,下一跳为8)…

1
2
3
traceroute 192.168.31.131 #在宿主机192.168.31.8上对虚拟机192.168.31.131发出报文
# traceroute to 192.168.31.131 (192.168.31.131), 30 hops max, 60 byte packets
# 1 192.168.31.8 (192.168.31.8) 3066.160 ms !H 3066.143 ms !H 3066.138 ms !H 可以看到需要经过192.168.31.8

可以看到,如果你想通过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. 首先,你要先找到自己的物理网卡在哪里。

    1
    2
    3
    4
    5
    6
    7
    8
    lspci #列出所有的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的设备编号了。我们可以用设备编号来表示一个设备。

  2. 得到了设备编号之后,打开虚拟机的Device设置添加设备。

    在type中选中PCI Passthrough Device,然后找到需要直通的网卡编号。

  3. 直通成功,在操作系统中安装驱动(可能需要)。

参考文章

趣谈网络协议:https://doc.vercel.app/netprotocol/

Author: Links
Link: http://blog.taiho.cc/post/Truenas2/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.