家庭网络部署指南
最近新房入住,也趁着这次机会对家里的网络进行了一次改造,这篇文章把整个流程记录梳理一下,希望对有和我类似需求的人有所帮助。
整体需求
- 网速尚可,外网下载速度支持 4K 视频不卡顿
- 全局代理
- 照片视频类的资源存储在本地
- 24h 全天候内部服务器
- 尽可能的利用现有资源: 两台旧的笔记本
初次搭建
第一次的搭建主要核心在 openWRT 软路由上,整体网络拓补图如下所示:
软路由简介
使用 ASIC(专用集成电路)达成路由功能的路由器是硬路由,使用软件达成路由功能的路由器是软路由
就我个人的理解而言,软路由是相对于我们常见的路由器的一种叫法。常见的路由器是可以看到的,称之为硬件路由器,而软路由是通过软件来实现路由的功能,所以区别于硬件路由器,我们称之为软路由。
软路由相比于硬路由而言可玩性和灵活性够高,常用的软路由系统为openWRT,可以实现多种功能,常见的功能可以在openwrt-packages这个仓库中查看,可以看到支持的功能还是很多的。实验的软路由系统装在旧笔记本电脑中的,如何安装软路由也很简单,和平常装系统一样,网上有很多教程,这里不再赘述。但是经过了多次尝试,我还是放弃了软路由的搭建,原因如下:
- 不稳定性
在网上找了比较多的镜像文件进行安装,整体测试下来都有一些莫名其妙的问题,如 LAN 口突然不生效了之类的严重问题 - 散热问题
弱电箱在入住之前已经装好了,而且整体空间比较狭窄,软路由还是装在旧笔记本电脑上的,这就更不利于操作和散热了 - 功耗问题
因为软路由安装在笔记本中,相比较传统的路由器还是比较耗电的,这也是需要考虑的因素之一
总的来说,用笔记本安装软路由有不稳定性和功耗等问题,所以最后这个方案被弃用掉了。但是整体上软路由还是一个比较不错的选择,淘宝等也有提供软路由相关的硬件,建议不想折腾的可以直接选购,节省了很多麻烦。
交换机
电信的光猫在上门安装的时候,师傅就说只有 LAN 1 千兆网口能连接,其它的不能使用,我也试了一下确实不行 😂,非专业人员表示不太理解。既然只有一个千兆网口可以使用,而我需要两条网线分别接到客厅和书房的路由器,那么就需要交换机了。
交换机就是一种在通信系统中完成信息交换功能的设备,它应用在数据链路层
家里用的一般是局域网交换机,负责子网之间的通信。常用的交换机又分为傻瓜式交换机和网管式交换机两种,关于两种交换机的区别,可以自行搜索,只需要注意一点,网管式交换机支持 DCHP 功能,这个很重要。
那么什么是 DCHP 呢?
DCHP(Dynamic Host Configuration Protocol): 动态主机配置协议,主要有以下用途:
1.为内部网络或网络服务供应商自动分配 IP 地址
2.为用户或者内部网络管理员作为对所有计算机作中央管理的手段
3.为内部网络用户接受 IP 租约
所以有了 DCHP 支持后,就可以关闭两个路由器的 DCHP 功能,而使用交换机负责 DCHP 功能,两个路由器下连接的设备都属于同一子网下了。当时选择时也不是太懂,选择了 TP-LINK 的一个内置电源的傻瓜式交换机,这也为后续的一些操作带来了复杂性。
二次搭建
二次搭建去掉了软路由相关的硬件,增加了内部服务器的部署,整体网络拓补图如下所示:
路由器
在第一搭建的时候,提到的软路由可以做到全局的翻墙功能,但是软路由已经被去掉了,那么怎么实现全局代理呢,答案是刷固件。华硕三方固件的生态比较好,目前市面上做的比较好的三方固件是国外的梅林固件和国内的KoolCenter,都可以实现全局代理的功能,而且刷固件的方法也很简单,华硕路由器管理后台直接上传替换就可以,这里不再赘述。刷完固件之后就可以安装需要的插件了,可以自行搜索梅林固件和 KoolCenter 对应的代理插件。
服务器
拥有一台 24h 全天候的服务器是很方便的一件事,可以做很多有意思的事情,例如:
- 文件存储
- 远程 Linux 开发环境
- EPIC 游戏自动领取
等等,可以方便日常生活中的一些事情,或者自动化一些工作。之前的软路由方案被废弃之后,旧的笔记本电脑又被我拿来作为服务器使用了。服务器选择的是 Ubuntu 20.04 LTS,至于为什么选择 Ubuntu 而不是 CentOS 之类的发型版本,因为我从 Ubuntu14.04 一直用过来,比较熟悉懒得换了。安装完系统之后,进行了以下初始化操作:
- 固定服务器 IP 地址:
路由器在开启 DCHP 之后,各接入端的 IP 是自动分配的,这就导致设备的 IP 可能会变,但是作为服务器需要 IP 固定,网上也有很多教程,我这里采用的是华硕路由器直接配置 - 安装 docker:
各个服务以 docker 容器进行划分,方便隔离备份与迁移。
下面举几个例子来说明做了什么
文件存储
家里有这些年来手机和单反拍摄的照片和视频,大约 60G 左右,存放在了本地机械硬盘中。想把这些珍贵的数据进行备份,防止丢失,可选的方案是存放在云上,比如说国内的百度云和国外的 One Drive 和 Google Drive。但是国内的百度云众所周知限速,国外的不稳定,最为重要的是我经历了之前各种网盘提供商关服的事情,对这些云提供商并不放心,因此选择将这些数据存储在本地。本地存储的方案也有很多,一开始的选择是自建 NAS,但是考虑到目前整体资源只有 60G 左右,在可预见的几年之内也不会增加特别多的照片和视频,所以最终选择了NextCloud。
NextCloud 支持 docker 部署,说明文档在nextcloud docker,按照操作一步步来很简答,部署完成之后,就可以通过·服务器 ip:指定的 port`形式在浏览器访问了。初次访问会指定数据库和创建账户,完成之后安装对应平台的应用即可同步。
开发环境及其备份
日常开发中我有以下痛点:
- 开发中基本上接触到的是 linux 环境及其相关指令,但是家里的主力机器是 windows 操作系统,切换到 windows 操作系统环境下又要重新熟悉和安装各种工具
- 每次换电脑都需要重新安装各种工具
基于以上的痛点,我的做法是:
- 在 windows 系统中安装 docker
- 安装自己熟悉的 docker 镜像,这里我依然选择 ubuntu
- 在 docker 容器内安装自己需要的工具,如 node, nvm,zsh 等。也可以
git clone
自己的仓库到容器内进行后续操作 - 通过Remote Development连接运行中的容器,进行开发
- 开发完成之后定期将自己的镜像同步到自建的私有仓库中,完成备份
- 换电脑之后,只需要将备份的镜像同步到新电脑就可以省去重新安装各种工具的操作
通过以上的操作,以上两个痛点就得以解决
其它内容
远程游玩
家里的 Switch,PlayStation,Xbox 三个平台的主机目前还没凑齐,而且有了沙发和电视之外,更想坐在沙发上玩游戏了。那么有没有一种方案,可以在沙发上玩 PC 的游戏呢?答案是: Game Streaming。市面上相关的可选方案也比较多,比如 steam 的Steam Link和Moonlight。这里我选择的方案是 moonlight,主要原因是开源。使用 moonlight 也有一些注意点:
- 只支持 Nvidia 显卡
- 对内网的传输速率要求比较高,间接的对路由器硬件有一定要求
网络划分
考虑到智能设备的安全性问题,建立了一个访客网络,所有的智能设备都连接到访客网络,和内部网络进行隔离
总结
通过对家庭网络的实践,对 OSI 网络模型相关的模型有了更进一步的理解,利用了旧有的硬件设备,也对 docker 有了进一步的实践,整体折腾下来还是挺有意思的。但是体会最深的是不要创造需求,比如说文件存储的实践上,99%的家庭是不需要 NAS 的,而一开始的选型过程中,只是在信息流中经常被提到有印象而已,要结合自身的需要来做选择。