基于 ESXi 的 RouterOS(ROS) + OpenWrt + AdGuard Home + 黑群晖 + Docker 家庭 All In One 方案

LonelyMan 3163 2022-11-16

起因

刚刚买这套AIO的时候装的是unRaid,在里面运行了OpenWrt、黑群晖和好多Docker容器,将近稳定运行了八个月,都没啥问题

最近看了Stille大佬的一篇文章,就想把这台AIO重新装配一次,让底层虚拟机系统就干该它干的事,其他的需求就让运行的虚拟机来做,这样也分工明确,便于管理

选型

系统

看了ESXi、PVE、unRaid对比这篇文章,最后选择了EXSi,毕竟是大公司做的商业产品,追求的也就是稳定,本人也不需要很多高级的特性,能实现硬件直通就差不多满足了我的需求

硬件

硬件没有变化,跟之前一样

硬件 型号
主板 微星 B560M MORTAR 迫击炮
CPU i5-10400
SSD WD SN550 1T
网卡 HP 331T (BCM5719 PCIEx4)
阵列卡 IBM LSi SAS 2308
电源 益衡 ENH-1940 (400W 1U)
机箱 拓普龙 NAS 8盘位
硬盘 矿盘 3T *4 + WD HC550 18T *1 + WD HC320 8T *1

虚拟机

一共4台

  • DNS-Alpine
    • 1C 512M
  • Docker-CentOS7
    • 2C 2G
  • Router-RouterOS
    • 1C 512M
    • 直通网卡#0#1口
  • Proxy-OpenWrt
    • 1C 512M
    • 直通网卡#3口
  • DSM
    • 2C 2G
    • 直通阵列卡
    • 直通网卡#2口

网络规划

拓扑图

网络拓扑图

网络配置

Router-RouterOS 主路由器

Router-RouterOS作为主路由器,主要作为连接光猫提供PPPoE 拨号上网功能,同时提供DHCP服务和负责管理端口转发服务

IP
  • IPv4
    • addr : 10.0.0.1/24
  • IPv6
    • addr : fd00::1/64
DHCP
  • pool : 10.0.0.100 - 10.0.0.240

  • gateway : 10.0.0.2

    所有访问流量将先由 Proxy-OpenWrt 处理分流,再走向 Router-RouterOS 主路由

  • DNS : 10.0.0.3

    DNS设置为10.0.0.3的 DNS-Alpine,装有 Adguard Home,提供最前置的广告过滤和DNS 缓存

DHCPv6
  • pool : fd00::/64

  • gateway : fd00::1

    目前v6的代理不成熟,不代理v6,直接让所有v6流量从 Router-RouterOS 出

  • DNS : fd00::3

    v6的DNS解析只会经过 DNS-Alpine 进行基本的广告过滤,不会被 Proxy-OpenWrt 内的代理服务解析

Proxy-OpenWrt 科学上网网关

Proxy-OpenWrt 作为主要的科学上网网关,提供科学上网分流服务,主要依靠插件来处理分流工作

IP
  • IPv4
    • addr : 10.0.0.2/24
    • gateway : 10.0.0.1
    • DNS : 10.0.0.1
  • IPv6
    • addr : fd00::2/64
    • gateway : fd00::1
    • DNS : fd00::1

当客户端访问请求为国内网站,将直接转发至10.0.0.1的主路由器进行访问。当访问请求为国外网站,将先经过插件进行TCP DNS查询并返回真实 DNS 结果,然后在依靠插件进行代理访问。完全避免了DNS 污染

DNS-Alpine DNS 服务器

IP
  • IPv4
    • addr : 10.0.0.3/24
    • gateway : 10.0.0.2
    • DNS : 10.0.0.1
  • IPv6
    • addr : fd00::3/64
    • gateway : fd00::2
    • DNS : fd00::1
  • 上游DNS
    • IPv4 : 10.0.0.2
    • IPv6 : fd00::1

EXSi 管理端

IP
  • IPv4
    • addr : 10.0.0.10/24
    • gateway : 10.0.0.1
    • DNS : 10.0.0.1
  • IPv6
    • addr : fd00::10/64
    • gateway : fd00::1
    • DNS : fd00::1

Docker-CentOS7 容器服务器

IP
  • IPv4
    • addr : 10.0.0.11/24
    • gateway : 10.0.0.2
    • DNS : 10.0.0.3
  • IPv6
    • addr : fd00::11/64
    • gateway : fd00::2
    • DNS : fd00::3

DSM 黑群晖

IP
  • IPv4
    • addr : 10.0.0.20/24
    • gateway : 10.0.0.1
    • DNS : 10.0.0.1
  • IPv6
    • addr : fd00::20/64
    • gateway : fd00::1
    • DNS : fd00::1

搭建

EXSi

B560M迫击炮板载网卡是螃蟹的8125B,EXSi默认是没有这个网卡驱动的,需要自己将驱动打包进去

EXSi7版本似乎不能直接打包驱动进镜像,所以EXSi选择了6.7U3版本

准备工作

  1. VMware vSphere Hypervisor (ESXi) Offline Bundle

    注意,下载的镜像不是类似于VMware-VMvisor-Installer-7.0U3-18644231.x86_64.iso这种的ISO文件,ISO文件不能直接打包三方驱动

    由于现在在VMWare官网下载镜像需要登录,且需要购买EXSi后才能下载,所以我们需要一个第三方站点

    进入这个网站,下载 ESXi670-201912001.zip(下载速度会很慢,可能需要科学环境)

  2. ESXi-Customizer-PS-v2.9.0.ps1

    下载最新的release即可

  3. Realtek_bootbank_net-r8125_9.007.01-1.vib

  4. Windows 10环境

打包

  1. 以管理员身份运行 Windows PowerShell,执行 Set-ExecutionPolicy RemoteSigned 命令配置远程执行策略为允许,然后执行命令 Install-Module -Name VMware.PowerCLI,这个命令可能需要比较长时间,请耐心等待。中间出现确认提示的时候,输入 A 即可(或者Y)

    若安装失败则需要在官网下载最新的PowerCLI,并将解压后文件拷贝至Windows PowerShellModules目录(C:\Program Files\WindowsPowerShell\Modules

  2. 解压ESXi-Customizer-PS-v2..0.ps1到桌面,在ESXi-Customizer-PS-2.9.0文件夹内新建pkg文件夹,将Realtek_bootbank_net-r8125_9.007.01-1.vib放进pkg文件夹内

  3. 将下载好的 ESXi670-201912001.zip文件放到ESXi-Customizer-PS-2.9.0文件夹下

  4. 回到ESXi-Customizer-PS-2.9.0文件夹,直接在地址栏输入powershell,在打开的PowerShell窗口内出入以下代码,并回车执行

    .\ESXi-Customizer-PS-v2.9.0.ps1 -izip .\ESXi670-201912001.zip  -pkgDir .\pkg
    
  5. 控制台结尾是 All done 表示成功,成功后会在 working 目录中生成一个文件 ESXi-6.7.0-20191204001-standard-customized-with-bcm8125,这就是封装驱动后的镜像

安装

  1. 下载Rufus
  2. 插入一个空U盘,选择刚刚生成的iso文件,选择插入的U盘,点击开始即可
  3. 将U盘插到AIO主机,开机即可进入安装界面,按照界面提示进行安装,安装盘选择 SN550,网口选择板载网口,网络配置按照前文中规划好EXSi IP,若没有IPv6环境直接禁用IPv6即可
  4. 安装完成后拔出U盘重启即可

Router-RouterOS

待补充…

实现效果

所有由DHCP发放IP的终端设备的所有流量会被分流,能直接访问所有网站,以此实现电视、手机、平板在不启动 QuantumultX 的情况下能直接访问国外各大流媒体网站(节点支持的情况下),并且能屏蔽部分广告