前言

女儿的照片手机放不下了,一直想攒个NAS机器把照片整理下。商业的NAS如群晖、威联通, 感觉性能都较为一般,而自建机器一直还没下定决心用什么配置。一次契机群友在聊天中说在组装NAS机器, 看配置蛮不错,遂入手。

硬件

机器的配置清单如下:

物件型号价格
主板畅网N5105¥837
机箱乔思伯N2¥689
电源全汉FSP 350W¥359
内存光威16GB DDR4 3200¥229*2
固态致钛TiPlus5000 Gen3 1T¥469
硬盘希捷银河8T¥1268

当然上面的选项有些是超标的,比如内存和固态,可以降配,价格也不是全网最低价,仅参考。畅网主板也有网友直接买N5105软路由机器进行魔改,比乔思伯机箱加单独主板成本会少不少。

其他零碎配件,包括机箱前置USB3.0转2.0转接线(20针转9针),SATA硬盘线6根(3.0直对弯), 以及机箱风扇的四线PWM温控调速器(N5105主板是3pin接口)。

整体装机过程还算顺利,下图是装完主板的样子,可以顺利点亮

nas case

系统

NAS一种是直接装黑裙或者OpenMediaVault等NAS系统,当然要发挥主机完整的性能,可以考虑先做一层虚拟化, 常见的虚拟化系统有PVE,ESXi,以及NAS圈的Unraid。这三个系统详细的对比,可以参考这篇知乎文章:ESXi、PVE、unRaid对比 。总体感觉,Unraid可玩性还行,但是需要单独的U盘启动,且Linux发行版比较小众,尝试下来之后不是特别顺手,而PVE基于debian发行版,整体灵活性比较好,但是担心后续系统出问题维护较为麻烦,最终考虑ESXi系统,正好早年在公司也都是用的ESXi+vCentor,还算比较熟。

不过ESXi在新版本中砍了不少驱动,8版本在m2固态、网卡驱动上均有些问题,而且给我留了个很大的坑 (在进入安装界面后我的机械键盘不生效,之前一直以为是固态驱动的问题),但总算磕磕碰碰装上了。

ESXi官方原版的iso镜像缺少驱动,所以我们需要使用官方的离线包及社区驱动,自己构建镜像 (网上也有其他人构建好的带驱动的镜像,可以尝试)。

安装PowerCLI

我用的macOS,其他系统可以参考官方文档。首先先安装PowerShell

# set brew cask to ustc mirror
brew tap --custom-remote --force-auto-update homebrew/cask https://mirrors.ustc.edu.cn/homebrew-cask.git
brew install --cask powershell

# check installation
pwsh

PowerCLI需要Python3.7的环境,可以使用pyenv工具安装。从官网下载PowerCLI离线安装包

pwsh环境下,输入命令$env:PSModulePath查看PowerShell的模块路径,将下载的离线安装包解压到其中的目录,如/Users/tomo/.local/share/powershell/Modules,最后验证模块是否正确加载:

PS /Users/tomo> $env:PSModulePath
/Users/tomo/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/usr/local/microsoft/powershell/7/Modules

# 验证是否安装成功
PS /Users/tomo> Get-Module VMware* -ListAvailable

    Directory: /Users/tomo/.local/share/powershell/Modules

ModuleType Version    PreRelease Name                                PSEdition ExportedCommands
---------- -------    ---------- ----                                --------- ----------------
Script     12.6.0.19            VMware.CloudServices                Desk      {Connect-Vcs, Disconnect-Vcs, Get-VcsOrganizationRole, Get-VcsService}
Script     8.0.0.208            VMware.DeployAutomation             Desk      {Add-CustomCertificate, Add-DeployRule, Add-ProxyServer, Add-ScriptBundle}
Script     8.0.0.208            VMware.ImageBuilder                 Desk      {Add-EsxSoftwareDepot, Add-EsxSoftwarePackage, Compare-EsxImageProfile, Export-EsxImageProfile}
Manifest   13.0.0.20            VMware.PowerCLI                     Desk
...

上面的结果表明PowerCLI安装成功了,整体安装流程可以参考官方安装文档

构建镜像

接下来我们通过PowerCLI构建自己的ESXi系统镜像。首先从官网下载如下文件,

  1. VMware vSphere Hypervisor (ESXi) Offline Bundle
  2. https://flings.vmware.com/community-nvme-driver-for-esxi
  3. https://flings.vmware.com/community-networking-driver-for-esxi
  4. https://flings.vmware.com/usb-network-native-driver-for-esxi

我们放到~/Downloads/ESXi目录下,文件列表如下:

VMware-ESXi-8.0b-21203435-depot.zip
nvme-community-driver_1.0.1.0-3vmw.700.1.0.15843807-component-18902434.zip
Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip

继续在PowerShell环境中执行下面命令:

# 添加包及驱动文件
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/VMware-ESXi-8.0b-21203435-depot.zip
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
Add-EsxSoftwareDepot /Users/tomo/Downloads/ESXi/nvme-community-driver_1.0.1.0-3vmw.700.1.0.15843807-component-18902434.zip


# 获取镜像列表
Get-EsxImageProfile

# 样例输出
Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESXi-8.0sb-21203431-standard   VMware, Inc.    2/14/2023 12:0 PartnerSupported
ESXi-8.0b-21203435-standard    VMware, Inc.    2/14/2023 12:0 PartnerSupported
ESXi-8.0sb-21203431-no-tools   VMware, Inc.    1/30/2023 5:35 PartnerSupported
ESXi-8.0b-21203435-no-tools    VMware, Inc.    1/30/2023 7:21 PartnerSupported

# 复制一个配置文件
New-EsxImageProfile -CloneProfile "ESXi-8.0b-21203435-standard" -name "ESXi-8.0b-21203435-standard-nic" -vendor "tomo"

# 添加驱动文件
Add-EsxSoftwarePackage -ImageProfile "ESXi-8.0b-21203435-standard-nic" -SoftwarePackage "nvme-community"
Add-EsxSoftwarePackage -ImageProfile "ESXi-8.0b-21203435-standard-nic" -SoftwarePackage "net-community"
Add-EsxSoftwarePackage -ImageProfile "ESXi-8.0b-21203435-standard-nic" -SoftwarePackage "vmkusb-nic-fling"

# 导出iso镜像
Export-EsxImageProfile -ImageProfile "ESXi-8.0b-21203435-standard-nic" -ExportToIso -FilePath /Users/tomo/Downloads/ESXi/ESXi-8.0b-21203435-standard-nic.iso -Force -NoSignatureCheck

执行上述命令后,我们可以在目录下看到刚刚导出的镜像ESXi-8.0b-21203435-standard-nic.iso

安装及配置

我们可以使用ventoy 工具制作启动U盘,将上述镜像拷贝到U盘中。这里踩的坑就是我的机械键盘兼容性有问题,在ESC/Enter界面按键无反应,如果出现这种情况可以换个比较低级的键盘试下(比如Dell自带的那种薄键盘)。

如果到这一步,基本系统算构建好了,安装虚拟机,开启核显功能等,我们后续文章介绍。

这里我为了增加可玩性,使用frps+Caddyserver开启公网访问,感兴趣的可以尝试下(需要公网服务器+域名, 域名没有的话可以直接使用ESXi原生的https和证书)。

  1. 通过web入口访问ESXi管理后台,开启SSH服务。
  2. ssh登录到EXSi服务器,关闭http到https的自动跳转(因为使用Caddyserver自签了证书,所以反向代理的时候需要使用http协议)
    cd /etc/vmware/rhttpproxy/
    # backup endpoints.conf
    cp endpoints.conf endpoints.conf.back
    
    endpoints.conf配置了URL路径对应的规则,其中第四列是重定向,将第四列redirect全部改成allow
  3. 重启服务/etc/init.d/rhttpproxy restart

frp是一个内网穿透工具,服务端frps运行在带公网地址的服务器上,如云主机,frpc运行在本地。具体安装可以参考官方GitHub仓库

我路由器之前刷过固件,带软件中心,里面有frpc工具,如果路由器没有frpc工具,需要内网有台常驻机器运行frpc服务(比如可以EXSi中建个虚拟机,设置自动启动),frps服务器记得开启防火墙策略,允许7000端口。

路由器中配置如下(除common段落外,配置文件段落命名需要唯一):

asus frpc

其中192.168.50.100是ESXi地址,80是其http端口号。公网服务器中可以查看frps监听的地址:

sudo netstat -natup|grep frps
tcp6       0      0 :::7000     :::*   LISTEN      1179303/frps
tcp6       0      0 :::9001     :::*   LISTEN      1179303/frps

其中7000是frps的默认通信端口,9001就是frpc中的remote_port配置。Caddyserver配置如下(需要提前将域名指向服务器):

https://esxi.example.com {
  reverse_proxy 127.0.0.1:9001
}

整体网络路径如下:

   https┌───────┐9001 ┌────┐7000 ┌────┐80 ┌────┐
   ────►│ caddy ├────►│frps├────►│frpc├──►│ESXi│
        └───────┘     └────┘     └────┘   └────┘

做完上述设置后,可以直接在公网通过域名访问ESXi服务了(当然其他服务也可以类似处理,开启公网访问)。

esxi public access