3212 字
16 分钟
从0开始的赛博生活-第0辑:个人网络空间的搭建(一期)

封面来源:Sora

这篇文章宣告了LiH的个人网络空间(一期)搭建企划完成!ヾ(≧ ▽ ≦)ゝ

趁记忆还新鲜,就此记录下来!若能给有相似需求的你提供些微帮助,也是我的荣幸啦(*^▽^*)

需求分析#

发现问题,分析问题,解决问题

问题导致需求,需求呼唤解决方案。

大抵是进入研究生阶段以后吧。结束了本科阶段一台笔记本打天下的局面,形成了台式机+(公用)工作站+笔记本电脑的设备矩阵,随之产生了许多问题。一段时间以后,总结得到了如下需求清单:

  1. 远程开机:唯一真神,无需多言。

    • ”没有硬件支持你操作个屁“
  2. 自动联网:连接校园网需要打开浏览器,手动点击登录按钮。平时这不是大问题,但若人在外地,就闭环了。

    • “你必须先给台式机联网才能远程”
    • ”我应该怎么联网?“
    • ”先远程上台式机,点一下就好“
  3. 跨设备数据同步:版本管理地狱。

    • ”计算程序V1_台式机.zip“,“计算程序V2_笔记本.zip”,“计算程序V3_台式机.zip”,…
    • ”明天线下测试记得带最新版程序!“ ”OK!“
    • ”卧槽,怎么不是最终版“
  4. 数据冗余/备份:复活吧我的硬盘们(×

    • “卧槽,我写了两周的报告啊”
    • “这还玩集贸啊,跳了”
  5. 软件环境配置:一配一个不吱声。

    • “好家伙,原来guacamole不支持最新jdk啊,降回旧版好了。”
    • “卧槽,我咋不知道我有这么多java应用要新版jdk?”
    • 算了,重装吧

嗯,看着确实很迫切。说干就干。

技术路线#

需求分解#

上面五个需求可以分为3类:

  • 网络类:需求1+需求2
  • 数据类:需求3+需求4
  • 环境类:需求5

有成品方案和自建方案可供选择~

TIP

适合自己的才是最好的。

成品方案#

其实,对以上大部分需求,都有成品方案可供选择。

  • 远程开机:成品路由器提供的网络唤醒功能 / 智能插座+来电启动 / 社会工程学(“在工位的好心人帮我开个机”);
  • 自动联网:挂python脚本 / 同社会工程学;
  • 数据同步:共享文件夹;
  • 数据冗余/备份:硬盘盒。

你可能觉得“这些方法已经足够了”。其实也确实,这些方法都能实现目标功能。

够用≠好用,正是这些方案存在的部分问题,让我下定决心替换掉它们:

  • 社恐:社会工程学手段固然是好。但一方面,工位不一定有人;另一方面,总是麻烦别人也不好,INTJ还是选择靠自己。
  • 拓展性缺失:成品设备的功能过于专一,且过度依赖厂商。“我想有这个功能!”“抱歉,现在我们还没有提供呢”。
  • 手工干预/重复劳动多:资料备份实在是个苦力活,每次往硬盘盒里备份总是会怀疑人生;共享文件夹有时存在权限问题,而且Linux下好像用不了;自动联网脚本运行在台式工作机上,等重装系统/换设备之后又要重新装一遍,重复劳动。

但如果你还是觉得这些都不是事,那其实你已经找到了适合自己的路,挺好的。

自建方案#

如果你也接受不了成品方案的缺点,还是决定自建?好的,那请继续往下看吧。搭建过程虽然艰难,但完成时的成就感将无与伦比。

  • 对网络类需求,明显可以用一台24小时开机的路由器解决。WoL还好说,但自动联网这样的高级功能怎么办?上软路由

  • 对数据类需求,集中在数据同步以及冗余/备份方面。这正是NAS的专长。就决定是你了!

  • 对环境类需求,看看现有的解决方案是什么?“容器化”。好的,那还需要一个宿主机提供容器环境

这么看来,软路由+NAS+容器就能把我们的需求包圆了。

再仔细想想,设备间有没有潜在冲突?

↓能给→提供什么软路由NAS容器
软路由/提供局域网环境与固定内网IP提供局域网环境与固定内网IP
NAS//提供外挂的持久化储存空间
容器///

这么看来,不但没有冲突,设备之间还能联动:

  • 软路由为NAS与容器提供局域网环境与固定内网IP,稳定的内网环境可太重要了;
  • NAS为容器提供mount point,将一些需要长期储存的用户数据进行冗余/备份。

太棒了,就这么来吧。继续给每项技术选一下型。

技术选型#

软路由#

闲话少说,先拉个表。

方案💰价格​​🧩拓展性备注
硬路由刷固件较弱贵,而且固件容量小,但可以充分利用现有硬件。
原厂固件基于openwrt魔改的硬路由较高较强看了一下glinet这些,但网上资料少,最后没敢下手。
ARM软路由较低某些ARM芯片对应的openwrt插件较少,别的没啥问题。
⭐️x86软路由较高插件丰富,性能强,除了价格稍贵没有任何问题。

搭建初期,使用了硬路由刷固件的方案,红米AC2100做主路由。

但128M的闪存大小实在捉襟见肘,遂换主路由为N100小主机,AC2100退居AP。

(P.S. N100的性能着实过剩,J1900跑千兆/N4500跑2.5G足足够了)

NAS#

方案💰价格🧩拓展性备注
成品NAS较弱费钱省事
⭐️自建NAS较低省钱费事,拓展性强

作为爱折腾一族,自然是选择自建NAS;-)

我对NAS的需求很简单:

  • 网络存储服务;
  • 最大程度的数据完整性。

至于容器等其它应用?我个人的态度是专业的人干专业的事。搞一个额外的linux虚拟机装容器并不多费多少事,但却带来了解耦的关键优势。

  • 万一哪天把容器玩坏了,我只需要重装一下负责容器的虚拟机;
  • 但如果与NAS耦合,就只能重装NAS系统了。

后者显然给数据安全带来了更多的不确定性。

因此,我最后的选择是TrueNAS Core,两块HC550组raid1进行冗余。ZFS的快照功能实在强大,再也不用担心误删文件了。

对了,还花了18/月买了1TB的Onedrive存储空间,由TrueNAS自动对工作文件夹进行每日备份。Win系统下可以直接访问,可太友好了。

容器#

我的选择是Docker。就这么点设备,实在没必要上集群管理,搞一台linux虚拟机装一下就好了。

那么这台虚拟机装在哪里好呢?

  • 工作机?并非24小时开机,Pass;
  • 路由器?网络设备我还是希望稳一点,不然炸到连网都上不了就完了;
  • 独立物理机?确实挺好,但是贵,买不起啊;
  • NAS?好像不错,刚好因为挂载点的原因,容器服务器需要与NAS同时启动。

但在NAS一节,已经说过想把NAS系统和容器虚拟机分开了。怎么破?

答案是虚拟环境。通过在底层虚拟环境上启动两个虚拟机,第一个为NAS,第二个是容器服务,即可完美实现解耦。

更棒的是,虚拟环境提供启动顺序选择功能,可以设置开机时NAS先启动,容器后启动,便不会有挂载点失效的问题了。

关于具体的虚拟环境选择,常用的有Esxi、PVE等。我选择了PVE,无它,硬件兼容性好(方便我淘洋垃圾10G网卡),而且网上教程实在太多了,very方便。

技术路线总结#

拉个表来总结吧。

对应需求技术选型具体技术方案物理宿主
需求1、2软路由x86 OpenwrtN100小主机
需求3、4NASTrueNAS Core + Onedrivei3-8100主机with PVE
需求5容器docker on linuxi3-8100主机with PVE

好,看起来没啥问题了,开干。

当然,这会已经干完了。

已实现功能&网络拓扑#

基本功能#

基本功能即以上五点需求,均已按照技术路线顺利完成。主要的容器服务如列表。

功能名称使用软件/镜像
自建git仓库gitea
容器管理portainer
音乐服务navidrome
微信docker-wechat
百度网盘baidunetdisk
BT下载qbittorrent
网站部署docker-fuwari

完成后将会发现,不经意间再次解锁了两项成就:存算分离/软件隔离

存算分离#

所有工作电脑上,将不保存工作文件/仅保留临时文件。这给更换设备/重装系统带来了极大的便利。

  • 传统的重装
    • 哎,这破电脑,软件环境已经成依托了,想重装;
    • 算了算了,备份太麻烦了,凑合用吧。
  • 存算分离后的重装
    • 今天心情不好,重装就重装;
    • 挂载下NAS,装好软件又可以开用了!

再也不用操心手动备份的事,也不怕丢数据了。

软件隔离#

部分软件,尤其是国内部分软件的开发质量实在一言难尽,已经到了完全不想在工作机上装的程度。难受的是,还不得不用,这对我这样的赛博洁癖患者简直难以忍受。

那么,解法是什么?

统统打包丢进容器!对某聊天软件和某网盘已经采取了相关策略。设置要点如下:

  • 关键文件夹挂载:将聊天文件夹/下载文件夹直接挂载到NAS上,即可直接在其它设备上找文件;
  • VNC访问:提供VNC访问端口,方便访问软件GUI。

这样,工作机不用装对应的软件,也可使用对应的功能了,爽!

拓展功能#

完成了基础功能的搭建,自然想着多干些什么。搭建完成的系统具有很强的拓展能力,现在已经拓展出了公网访问与远程桌面两个功能。

远程桌面#

鉴于Todesk、向日葵等远程桌面软件常常爆出安全漏洞,最近吃相也比较难看,选择自建远程桌面。

选择了Apache Guacamole远程桌面网关。打开工作机的RDP端口,即可通过浏览器享受到RDP via HTTP的访问服务。

公网访问#

仅在内网提供服务虽然也挺好,但我们的目标不止于此。公网访问是提升使用体验的重要一环,否则局限还是太大。

为了实现公网访问,购买了一台某平台的云服务主机。其上部署了本网站,同时使用SSH隧道实现内网向公网的映射。

公网访问的安全性是很重要的一环,直接进行端口暴露还是过于冒险了。为了提升安全性,形成了一套Nginx反代 + HTTPS终止代理 + base_http_auth + fail2ban的安全方案,服务器本身的SSH也配置成了禁止root登陆+仅允许公钥访问,安全性max。

总结而言,投入使用的公网服务如下:

功能名称部署地点使用软件/协议公网访问性
数据存储NASTrueNAS✔️ WebDAV
SSHNAS/主路由/AP/台式机/GiteaOpenSSH✔️ SSH ProxyJump
远程桌面台式机RDP✔️ Apache Guacamole
自建git仓库NAS - Dockergitea✔️ HTTPS, SSH

最终网络拓扑#

完成了以上所有功能的部署,最终的网络拓扑图如下所示。真是个大工程呢喵(×

network_schemetic

参考设备清单#

❌参考设备清单

✅不得不品的军火展示环节~~(存不下钱的原因找到了~~

名称功能附加说明
台式机高性能处理Windows 10没自己花钱
笔记本外出携带Windows 114000
NAS存储+DockerPVE (内含TrueNAS和Docker虚拟机)2400
HDD存数据HC550 16T * 22*900
路由器主路由PVE (内含Openwrt)750
10G交换机拓展网口/149
云服务器公网访问Debian99/年
onedrive云端存储/18/月

小结#

碎碎念了许久,写得也不太有章法,十分感谢能看到这里的你!

后续计划:详细写写每一部分的详细配置过程,但科研任务实在比较多,随缘更新~

就酱!

从0开始的赛博生活-第0辑:个人网络空间的搭建(一期)
https://www.lithium-hydroxide.space/posts/250605_network_schematic/
作者
LiH
发布于
2025-06-15
许可协议
CC BY-NC-SA 4.0