我的HomLab架构历程简述

HomeLab 顾名思义是“家庭实验室”的意思,这里特指家庭网络实验室,在我理解中是指个人在家庭环境下架设的一系列对外或对内提供私有网络服务的一整套网络设备。

本文仅用于个人学习与记录,不具有指导意义,请读者自行斟酌,若文章内容有误请留言@exfluex

对于一个喜欢整活儿的码农来说,拥有一套自己从零开始构建的家用服务体系无疑拥有巨大的实用性和成就感。同时在架设HomeLab的过程中可以从不同角度对整个网络服务体系有更深刻的了解,解决架设过程中的问题时也会提高自身分析问题和查找解决方案的能力,这些都是自己架设HomeLab的有益方面。但是,架设HomeLab是一个费时费力且需要长期投入同时不能保证其系统稳定性可靠性的工作,因此请斟酌自己是否拥有足够的时间精力面对层出不穷的奇怪bug和网络稳定性不佳的情况。当然在拥有一定计算机能力且有富余精力的同学们还是推荐自己搭建HomeLab,这是拓宽自身知识面的好办法。

一、HomeLab建设起因:

因为家里最近更换了千兆宽带,但电信送的光猫在开启无线WiFI且路由模式下无法跑满1000M宽带,最多只能跑到500~600M带宽,同时之前够买的二手服务器DELL R720 服务器(以下统称DELL服务器)使用频率低下没有发挥出它应有的作用。因此在2021年年初我决定以DELL服务器为核心建立一个完备的家用计算机网络系统,同时依托千兆宽带所附带的百兆上行速率通过CDN对外网提供网络服务,以此架设博客等服务型网站。

二、HomeLab设备列表:

  • 服务器
    • DELL R720 : 2*E5-2650CPU 4*8 ECC Sumsang内存条 4*千兆网口 1*iDrac网口 600GSeagate SAS盘(已有)
  • NAS:
    • SynologyDS218+ :3T Seagate Wolf(已有)
  • 软路由:
    • i5-3317U处理器 1*4G海力士内存条 40G SSD 2*千兆网口(2021年1月中旬购买)
  • 交换机:
    • H3C: S5120-28P-LI(2021年2月中旬购买)
    • TPLink: 8口千兆交换机(2021年1月上旬购买)

三、HomeLab建设规划

我的HomeLab截止2021年3月中旬已经经过了三次大改动和数十次小改动,稳定性有了一定保证的同时为我日常编程和生活提供了很大方便,在这个过程中我也提高了对Linux 系统的认识和理解。HomeLab的建成不是一天的事儿,但是每天花一点时间查找资料和改进,迟早有一天会建起来一个完备的系统。罗马不是一天建成的。

群辉拥有完备的基础服务套件,可作为网络基础服务中心快速搭建起一个网络的骨架。

群辉DSM Web桌面
群辉DSM Web桌面

NAS(Network Attached Storage)设计之初就以低功耗全天候提供网络存储为特点,为现代家庭、企业提供方便快捷且安全的私有存储方案。而群晖作为NAS界中的翘楚开发出专为NAS设计的DSM(DiskStationManager)系统,为群晖NAS增添了丰富的套件和强大的资源管理功能,拥有例如DNS套件、DLAP套件等基础服务套件,因此群辉拥有作为整个网络的数据中心和基础服务中心的全天候运行的能力。

DSM套件中心中可以用于家庭使用的套件多种多样,从群辉官方的几个Station再到第三方社群提供的套件为群辉NAS提供了完整的家庭共享能力,机主可以根据自己的需求自由的搭配套件提供不同的服务。从本文来说,群辉作为家庭网络基础服务提供者应具有DNS服务,DHCP服务,域服务,日志记录服务,邮件服务,存储服务,WebDAV服务,DDNS服务等,同时我还在Docker中安装了Gitlab和NexusRepository为软件开发提供版本控制服务和包管理服务,这些服务一同构成了群辉NAS所提供的基础网络服务。

同时群辉上所安装的编程基础库(比如Nodejs、Python、PHP)可以使用户通过SSH登录群辉后编写脚本甚至运行项目在群辉上,一个我的使用案例就是通过Nodejs利用阿里云OPEN API更新CDN 回源地址并把结果通过email的形式通知我。

群辉自动执行更新回源IP结果邮件

总结一下,群辉麻雀虽小五脏俱全,虽然价格上确实偏高,但使用下DSM给你的体验绝对是完美的,在某些方面由于安全性稳定性等原因DSM对一些操作作出了限制,但却不妨碍群辉玩家构建和开发。

爱快路由系统拥有丰富的流控模块且安全稳定,同时支持虚拟机的能力使其拥有无限的可玩性,而3.5版本的Docker更让其玩法多样化

iKuaiOS 系统概况界面
iKuaiOS 系统概况界面

光猫改桥接是解决高负载条件下光猫不稳定的主要方法

ISP所提供的光猫默认模式为路由模式,即通过光猫拨号上网,光猫承载着路由功能而绝大部分家庭同时会开启光猫WiFi,让光猫同时承担路由器、AP、交换机的功能。在低负载使用情况这种方法是没有问题的,但在高负载情况下可能会出现光猫发热巨大、网络不稳定等情况。所以一般来说,如果经过你的测试,光猫无法跑满你的带宽时可能就要考虑将光猫模式更改为桥接模式,而拨号则由后方连接的路由器进行拨号。

光猫更改模式需要有光猫超级管理员账户,同时需要宽带账号和密码进行拨号,有的地区可能安装宽带时会给机主,但有的地区可能没有,如果想获得超级密码和宽带账户可以通过本地区运营商微信公众号索取或电话索取。

顺便说一下公网IP,我家宽带是电信宽带,由于本地区为一个小小的县城,所以公网IP还比较充足,在通过运营商微信公众号索取公网IP后5分钟内就获得了公网IP。

在家庭网络设备数不多的情况下,就没有必要光猫进行折腾。最好在自身有一定计算机专业知识的前提下进行操作,同时备有额外网络通讯设备进行资料查询。

Docker是快速构建HomeLab丰富功能的重要一环

群辉Docker套件总览界面
群辉Docker套件总览界面

Docker的方便性是毋庸置疑的,大部分使用过Docker的玩家都应该认为Docker是一种快速高效的服务构建方案,这也是许多企业锁采用的服务部署方案将所有服务微型化容器化。群辉Docker为机主提供了一个方便的可视化界面,也为NAS提供了强大的拓展能力,而我则在群辉Docker上运行了GitLab和NexusRepository。

将自己的代码存储到GitLab私有库中同时可以通过Gitlab的DevOps链进行CI/CD服务构建,可以方便快捷的实现一个从开发到部署的自动化流程。也可以将常用的开发模板(Typescript Cz-tools pretty commit-hook ESLint一整套基础库)上传到Gitlab上,每次使用只需要简单clone下来,大大减少了配置项目基础库所带来的时间精力浪费。

NexusRepository则提供强大的包管理和缓存支持,由于国内国外之间墙的存在,很多Regsitry在国内访问缓慢甚至无法访问,而在本机更改regsitry只能解决一时之需,更换电脑后就需要重新设置而且之前的缓存的包也需要重新下载。而构建一个NexusRepository后用户可以将本地Maven、Nuget、npm、Docker源设置为Nexus仓库具体路径,然后将原本本机直接请求Registry下载的路径更改为先向Nexus仓库请求,Nexus仓库先查询缓存,如果命中则返回包,否则向定义好的registry列表发出请求,获取包并缓存,而后返回。第二次进行同一个package请求时NexusRepository就会直接将缓存返回,对于国内环境十分方便。NexusRepository私有包管理也是一个非常好的功能,将自己常用的工具类打包上传到Nexus私有仓库中,而不是上传到公共registry中,这样可以避免代码泄露,从某种程度上保证安全。

PterodactylPanel翼龙面板,翼龙面板是一个游戏服务器管理面板,通过Docker我将翼龙面板部署到了NAS上,而Esxi中开了两个GameNode作为WingsNode服务器,可以很方便的监控和管理服务器。后期也会将其迁移到Esxi服务器上,减小NAS的负担。

ELK Stack(ElasticSearch Logstash Kanabia 现在应该加个Beats)是一套完整的日志搜集可视化体系,我发现逐渐增加的服务和设备日志的查询和分析成本增涨迅速,可能一个问题牵涉到的服务有三到四个,因此我考虑搭建一个日志服务器搜集设备syslog,并集中化进行处理分析,同时给爬虫数据提供一个分析和可视化中心。但是ELK Stack在NAS中运行时,一旦设备发送数据量过多其CPU波动非常剧烈,因此我考虑将其迁移到Esxi Docker虚拟机中。Logstash号称可以Convert Everything主要因为其配置中Grok灵活性很高,可以通过类似于正则表达式的书写进行数据解析。但是这样也给Logstash性能带来了考验和处理瓶颈(因为没有在生产环境中见到过在此引用网络博客观点,如不正确请留言),但对于家庭使用,其性能已是足够。在实际使用环境中ELK中Logstash应该独立且部署到多个服务器上,为整个服务器系统提供LogServer服务。

Logstash中Grok是一个很关键的解析插件,而进行验证Grok的在线服务基本都部署在国外,国内服务少之又少,因此后期考虑使用将自用的GrokDebugger挂到博客上,提供在线服务。但推荐自己使用Docker()搭建,毕竟日志属于敏感数据应该内部使用避免外泄系统安全信息。

Portainer界面GrokDebugger概况
Portainer界面GrokDebugger概况

Docker可以提供的服务可以涵盖几乎所有方面,但对我来说Docker能方便快捷的提供一系列开箱即用的框架、平台供我研究操作,给框架学习方式带来了巨大的变化,也显露出容器化服务的优点。

Esxi虚拟机可以为HomeLab提供最为强大的拓展测试和研究能力

vCenter服务器概况界面
vCenter服务器概况界面

VMware vSphere为整机虚拟化提供了一整套安全稳定且搞扩展性兼容性的方案,我认为Esxi等虚拟机平台是整个HomeLab中最核心的部分。对于一个计算机专业学生来说,对计算机的搭建、网络设置、系统配置、软件安装与维护都需要花大量的时间进行测试和研究,而在物理机上根本不可能有机会随心所欲的进行操作,一个操作失误就可能造成配置失败导致系统服务出现问题,需要花大量时间进行回滚和恢复。但在Esxi虚拟机平台上可以在每个重要配置阶段保存快照,如果配置错误可以将错误记录下来后再用快照进行快速恢复,同时自己架设的服务如果崩溃也可以通过快照快速恢复服务。vSphere7 开始Kubernetes将作为vSphere架构的一部分为整个虚拟机平台提供容器化服务,但vSphere with Kubernetes需要开启HA,而贫穷的我没有购买第二天服务器的实力,因此只能沿用老套路,开虚拟机挂Docker。

对外网开放的服务尽量减少

对外网开放的服务尽量减少,最好只开放两个端口,一个是保证认证安全的远程端口,一个是提供Web服务的端口,其他端口暴露都会带来不必要的入侵风险,在我将群辉DSM端口转发到外网的第一天,我就受到了来自十多个地区近百次暴力破解攻击,因此将自己的服务暴露在网络环境下是高风险的,请仔细斟酌后操作。

域名、备案问题

如果想为互联网提供网络服务就必须要进行备案,而备案时需要填写自己拥有域名,一般来说比较冷门的.top等域名都是很便宜的,而且绝大部分域名供应商都会有首年优惠,如果有办博客、建网站想法的同学可以了解一下,我的域名是在阿里云进行的注册和备案。

备案完成后还需要对域名进行DNS解析,而阿里云提供了免费的DNS解析服务,在你拥有外网IP的前提下,可以直接添加A记录或AAA记录解析到你的公网IP上,但是一般ISP提供的公网IP在每次拨号后会改变,所以大部分中高端路由器和爱快等系统都提供DDNS更新服务。但是ISP一般会把家用宽带80、443等常用端口封禁,所以即时你解析上去也没法直接不带端口访问你的网站,只有通过自定义端口CDN转发一遍才能使用。如果你没有公网IP那就只有在各大服务器供应商选择一款拥有公网IP的服务器将服务部署上去,或者使用frp、花生壳等内网穿透供应商等方法提供服务。

(一)、初始建设 2020年十二月~2021年一月中旬

本来计划在DELL 服务器中安装Esxi并使用网卡直通开OpenWrt虚拟机进行广告过滤等操作,发现原本作为网关的华为AX3 Pro 路由器无法更改默认网关(老坑了,玩机的同志们避坑),因此只有作罢。

光猫的优化就告一段落了,推荐不要在没有其他联网途径下对光猫进行操作,万一玩儿炸了连搜索解决方案的能力都没有。路由器网关我使用的是华为AX3 Pro,对就是那个无法改默认网关的AX3 Pro,而且AX3 Pro的芯片是华为自研芯片,不能刷任何其他固件,可玩性很低。但购买AX3Pro时也不是奔着可玩性去的,能在一年多以前500元以下的价位购买WiFI6的路由器也是很不错的购物体验,但是连DHCP服务默认网关都不能更改就太坑了吧。将AX3Pro路由器设置好后,我用一根千兆网线连接到了TPLink8口交换机,推荐尽量在路由器上少连网线,因为很多家用路由器NAT性能其实不是很好,能把NAT职责转移到交换机上就尽量转移,能从某些程度上减轻路由器负担,提高高负载环境下网络稳定性。

网络基础设施方面,群辉NAS从某种程度上讲可以说是家庭网络万金油,DSM内套件中心提供很多开箱即用的网络基础服务,后面写一些介绍群辉的文章(挖坑)。在我的规划中,群辉NAS作为整个网络的数据中心和基础服务中心,暂时只提供NAS存储、DNS服务,在群辉套件中心中下载好DNS服务器套件后,简单几步就可以设置好DNS解析,把路由网关上的DNS地址更改为群辉地址后就可以愉快的添加DNS解析了,添加解析后可以直接在局域网通过设置好的域名进行访问,同时可以利用群辉DSM自带的反向代理服务器(Nginx)把一些其他端口的Docker服务反向代理到特定域名的80端口上,比如我在群辉Docker里面开的GrokDebugger,GitLab服务。总结一下内网DNS流程,局域网内计算机若访问www.baidu.com,首先会去群辉DNS服务器缓存中查询时候有缓存,如果命中缓存直接返回(你如果在这里配置了该域名指向内网某一IP则会解析为该IP),如果没有再向WAN口ISP提供的DNS服务器查询,查询结果群辉DNS服务器缓存并返回。

DELL服务器则安装Esxi6.0系统,提供虚拟机服务,吐槽一下vCenter如果不设置好FQDN运行一段时间后可能会WEB服务崩掉。在DELL服务器中开了vCenter虚拟机,提供Docker服务的CentOS7虚拟机,提供编码环境的CentOS7虚拟机和一个LEDE虚拟机。

总结一下截止2021年1月中旬,HomeLab提供的网络服务能力:

  • SynologyDS218+ DSM:
    • Docker:GitLab、NexusRespository、Dwsurvey
    • LDAP服务
    • Calendar、Contacts、Chat、Drive服务
    • 数据库服务:redis、mysql
    • DNS服务
  • DELL 服务器 Esxi6.0:
    • Pterodactyl面板及SwingsNode
    • Tower面板
    • CentOS Docker : GrokDebugger、Portainer、Proxy
    • vCenter Server
  • 软路由 iKuaiOS:
    • 流控模块
    • 家长控制模块
    • Docker:Nginx
    • 虚拟机模块:LEDE
  • iKuai虚拟机 LEDE OS:
    • AdGuardHome (未启用)
    • 插件:
      • let’s encrypt 申请SSL证书
      • SoftEther 虚拟私有网络

在HomeLab的架构过程中我遇到过很多问题和困难,最近一个月我会以博文的形式将其中的坑给记录下来。

更新日志

  • v1.0nmp 2021/3/17 15:20 新建、编写、美化文章

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注