最近搬新家,顺便把家庭网络和 homelab 的结构简单搭建了一下。

其实以前一直有用树莓派搭建简单的 self-hosted 服务,以及下载服务。但毕竟一个派的计算能力有限,arm 平台的应用也经常由于支持性问题,许多服务没有最好的选择。

在新家我有了更好的网络设施,也设了专门的信息箱,可以添加海量设备,正好把原有的服务有个整理和扩展。

就需求而言,我的 homelab 主要解决以下的几个问题:

  • 科学上网能力,国内工作者的刚需
  • 私有服务的部署能力,不能把自己的一切都交给大公司
  • 资料存储能力,家庭共享和保存古早资料是个好习惯
  • 稳定的内网环境,方便倒腾各种玩意儿

总体而言,我的网络结构如下图

Untitled-2023-01-24-1137.png

全屋wifi 覆盖我选择使用 TP Link 的全屋网络方案,上墙的 AP 用 POE 在墙内走线,在装修时就预埋进去,节省空间又能让所有房间都有充足的信号覆盖,同时保留了有线网口,在书房可以用有线连接桌面设备,提供更稳定的网络连接能力,玩嵌入式设备的时候一接网线就搞定。

POE Switch 是 TP Link 自带的 POE 路由器充当的。由于我在上层还有一个软路由,所以只拿他当交换机用,所有的口连接的都是 Lan。TP Link总控提供了4个lan口,套装里却只有3个AP,感觉上厂商在设计时已经考虑我这样的使用情况了。

软路由我选了 iKoolcore R1 ,倒也没有什么特殊的理由,就是在推上看到的广告,同时又是最新的 intel 架构,比友善之臂性能更好,应用面也更强,网口丰富(有3个lan,1个wan),价格也不贵,就顺下了。整体的体验还是蛮不错的,出厂已经预装了 PVE 和两个虚拟系统:OpenWRT和Debian,前者是目前功能最丰富的路由系统,后者是经典 linux 发行版跑 Docker 绝对稳定。x86的架构不用再像以前玩 arm,连个合适的 docker 镜像都下不到,自己编译还可能有问题。OpenWRT在出厂时已经装了不少应用,几乎是零折腾。

OpenWRT 的部署在 POE Switch 的 lan 上,这样才能和 AP 共享内网网段。TP Link 不知道如何在 wan 上设桥接,用 lan 一样完美解决问题(就是浪费一个 lan 口)。主要的点在于 AP 上设备的 DHCP 是由 Switch 提供的,而内网段上其他的服务,都是由 OpenWRT提供的。所以在 DHCP 的设置上,两个服务应提供不同的 IP 段避免冲突。

内网穿透方案我选了Tailscale,一个服务化的 wireguard ,看者网上的教程很容易就搭建完成。我家的手机和宽带都是电信,所以直接能建立连接不需要中转。之前也折腾过 wireguard ,但复杂的配置方式,以及做内网穿透需要一个中转服务器的做法,令人劝退。Tailscale的服务化配置,零折腾的让我构建好组网,经过测试,这样的组网方式没有中转,唯一的缺点是 Tailscale 的免费方案有设备上限,但对个人用户来说已经足够。

另一方面,ios上要连接tailscale需要有专门的客户端,启动方式也是调用系统的 api 创建一个 vpn 连接,这会和手机上的科学上网产生冲突。我原先手机是用 Surge 科学上网的,他的收费版也支持 wireguard 协议,但不支持 tailscale。还好另一款移动端翻墙应用 Choc 支持 tailscale,可以在 ios 上同时开启科学上网和内网访问,因此我也全面把手机端的翻墙应用换成了 Choc,目前实用感觉还可以。

回到内网,在openWRT 中,我使用Openclash 用来科学上网,具体的使用方法和移动端 clash 差不多,可以导入机场的服务器配置。在内网手机中,我通过对 Surge 或 Choc 做额外规则,让网络连接到家庭网络时,自动全部使用直接连接,这样不会让 openclash 和移动端的 Surge 重复代理,在家里有科学上网路由器的情况下没必要。

另外,内网中各服务还是需要分配域名,同时如果要在移动端使用这些服务,比如我使用 webdav 或 caldav 在 ios 上共享日历和文件,必须配置域名和SSL。我使用 let’s encrypt 自动定期更新免费的 ssl ,并分配域名 htts://*.local.gsj987.cn 给所有内网服务,在DNS上全配置成内网域名。由于我的域名托管在阿里云上,可以通过自动化脚本配置域名解析规则更新ssl证书。另由于我的服务都是通过tailscale进行的访问,所以在公网上也可以直接解析成内网网址,都可以访问到,也解决了安全问题。

在网络出口处,我还是用了运营商的光猫来接入网络,多占了一个设备,所有的网络出口瓶颈就全在这个光猫上了。有些别的玩家会使用猫棒来增加出口的流量。这个可以是未来可以继续探索优化的方案。

Pi 和移动硬盘都是旧设备,所以本着废物利用,不买就是赚的原则,没有用 NAS 作为存储,而是用 Pi + 移动硬盘组建了一个 NFS 作为存储,总的来说工作还算顺利,但就数据安全而言,用 NAS 做个 Raid 才是完全方案,也是值得下一步探索。

以上就是我初步的 homelab 方案,后续我会在这个基础上逐步把方案优化,包括上述的猫棒和NAS,以及更好的内网路由和虚拟化方案,方便做快速的实验。期待和读者交流。