家庭网络布局改造

背景

原来家里有一只群晖,20 年 4 月份的时候入了 1618+,本来想当服务器+存储使的。跟联通申请了个公网 IP,就一直这么用着。直到有一天群晖开始发邮件,要实名认证。再然后跑数据,发现群晖的 atom 根本跟不上速度。因此遇到了一些问题:

  • 直接暴露公网 IP 直接导致一堆黑客在扫描尝试攻击,影响安全;
  • 需要一台主机充当服务器,存储和计算分开;
  • 使用特殊通道设置一个只有自己可以连接的网络;
  • 在此之上实现一些增强需求;
  • 无论是内网还是外网,实现自定义 DNS。

实现

因此,在 leader 大神的帮助下,我大概规划了自己家里的网络结构图。

硬件部分

其中实线使用网线连接,虚线是无线。 里面有几个比较特殊,就是 PC 和树莓派和群晖,乍一看像一个环形结构,其实是有特殊原因的。先说这种布局的理由:

  1. 先说网线都是 CAT6 的,毕竟,千兆网络和路由器,五类网线的速度达不到数据传输的要求。
  2. 光猫只负责拨号和 DMZ ,其中 DMZ 是遗留之前的公网套路没有换,映射到了群晖上。因此,公网依旧可以访问群晖。这是由于搭建之初防止连接出现问题的兜底方案。
  3. 一级路由使用了新 3,可以换更好一些的,主要是我把自己的小米路由器 3 玩儿死了,不想折腾直接淘宝买了个breed的。用openwrt来实现一些额外功能。
  4. 一级路由下直接接交换机。不是因为口不够了(确实不够),而是因为内网间数据传输使用交换机的速度要比通过一个路由器解析转发快得多。现在通过交换机间进行数据传输基本是百兆的速度。
  5. 交换机下接二级路由,即小米路由器。利用它的 WIFI 对内提供 WIFI6 的速度。 WIFI6 和原有的速度相比差一个量级——虽然我没感觉到。同时,光猫和一级路由的无线功能关闭,让它们做好本职工作。
  6. 群晖和作为服务器的主机接在交换机上。
  7. 树莓派可以广告拦截,可以做外网与内网的桥。无线网络接二级路由,有线网络接一级路由,作为一级路由网络环境和二级之间的桥梁,主要用于远程控制智能家居。

软件部分

首先,断掉公网(也可以不断),使用树莓派做内网穿透,只穿透下面要作为代理的服务端口。 由于迁移改造工作尚未完成,因此现在用的是群晖作为代理服务。也就是,不暴露公网,只有自己在外可以访问的这个内网的工作,本应由树莓派去做。

具体的配置可以看 这里 ,其中:

  • 需申请一个证书用来 TLS , 如果你不需要加密,那就改一下配置。相关配置在 v2ray 和 caddy 中都可以找到。
  • 此处 v2ray 暴露的端口在 caddyfile 中写明,docker-compose.yaml 中的端口与内网穿透服务的端口一致。如果使用公网直接暴露,需要通过光猫 DMZ 或端口转发将此接口暴露。
  • 客户端的端口则是网络出口,即内网穿透出来的端口/光猫暴露的对外端口。

如此,在群晖上起 server :docker-compose up -d

在要用的客户端上起 client : docker-compose up -d

没有意外的话,现在内网和你所在的外网就是通的了。

  • dns

主机上肯定是要跑服务的,而我们又不可能每一个服务写一个 host 或者每一个服务开一个端口。因此,群晖和主机上都起了一个 Traefik 进行集中反向代理。为了识别方便,群晖叫 dsm.io , 主机叫 opti.io。具体 traefik 相关的配置不展开。 在一级路由上,由于是 openwrt 的环境,因此使用自带的 smartdns 即可,将对应的域名映射到 IP 上去。这里会遇到下一个问题,就是提供 https 服务。 使用 mkcert 实现证书自签,将根证书导入到 iCloud 钥匙串,iOS 系统根证书,android 证书,windows 受信任凭据中去。具体用法参见作者文档。这样家里的服务都可以通过 ssl 进行访问了。

  • 梯子

不多说,openwrt 自带。

  • 广告拦截

最初使用的是 openwrt上自带的 AdGuardHome 。用了之后发现比较占用运行速度。虽说可以使用它做一些额外的功能,但是路由器的核心还是转发,因此使用树莓派做这个功能。简单说就是将 smartdns 的上游 dns 服务器设置为树莓派上 adguard home 的 IP 即可。

客户端部分

家中网络基本配置好了。从外网访问,需要将相关的服务启动。此时 docker 会起一个 14280 端口的 http 代理(依客户端 docker-compose.yaml 的配置)。 Chrome 上推荐 Proxy SwitchOmega 插件,可以实现不同域名访问不同代理。使用自动切换模式,将自己的代理配置好。

总结

目前,家中使用 Emby + Infuse Pro 看电影,通过媒体中心 + PT 进行媒体管理,域名解析到 dsm.io 。内网跑一个 gitlab 和其他服务。通过外网可以拉代码,部署。一切运行正常

刚才说的比较怪的配置

大部分都解释完了,主要是 PC 为什么会连到光猫呢?打英雄联盟的时候突然发现网络不稳定,以为是 DNS 配置导致的,因此直接连到光猫上了。但是后来发现,似乎不是这么回事儿,貌似是光猫不太稳定。

优化

接下来的优化点:

  • 关闭公网,使用内网穿透进行访问
  • 网络代理切换到树莓派上