- 概览
- mac mini
- 极空间 NAS
笔者的主力机是一台 macbook pro,在家庭内网中存在一些设备需要在外网能够访问到:
作为家庭服务器
作为私有云、影音中心,同时跑了一些 docker 镜像,如 nastools,qb 等
- TL;DR
- 通过 zerotier 组网,zerotier moon 加速,实现设备互联;
- 通过 cloudflare tunnel 隧道穿透实现内网服务访问;
Zerotier 组网
zerotier 组网的实现方式,是通过多平台网络虚拟化 + 软件定义网络(SDW)技术,将所有设备加入一个局域网中,从而实现相互访问。核心原理是构建了一个分布式的网络虚拟化层,这个层位于传统的 IP 网络之上。
zerotier 近乎支持了所有的平台,在 zerotier 注册完成,创建一个主网,将所有需要相互访问的设备加入创建的主网中,设备就可以实现相互访问。
zerotier 组网中的设备通过 UDP 打洞的方式建立 P2P 连接,但是因为其根服务器在国外,对于国内用户来说打洞的失败率比较高,就会降级为通过中继网络转发的方式建立链接,导致延迟较高。所以一般都会通过自建 zerotier moon 的方式提高 UDP 打洞的成功率,其原理就是作为一台中继服务器转发请求,从而提升打洞的成功率,实现不同设备间的 P2P 连接。
zerotier moon 的创建方式也很简单,只要你有一台低配的固定公网 IP 的云服务器即可,创建的过程这里不再赘述,网上科普文章一大把。笔者使用的是阿里云 ESC,需要注意的一点是记得将云服务的 UDP 端口打开,否则会导致打洞失败,无法建立连接。
macOS 设备互联
macOS 原生支持了 VNC(Virtual Network Computing) 协议,可以通过远程桌面的方式访问到另一台设备。注意被访问的设备需要在设置中开启桌面共享。
- 打开 Screen Share
- 输入要访问 mac 设备 IP
- 输入用户名,密码
- 访问成功
第一次因为要建立访问通道,会相对比较慢,通道建立完成之后,基本可以达到远端访问秒开。
Cloudflare tunnel
Cloudflare tunnel 是 Cloudflare 提供的一种内网穿透的服务,通过使用自定义域名,轻松访问内网服务,且无需暴露内网 IP 和服务端口号。使用这个服务的前提是你有一个托管在 cloudflare 的域名,通过二级域名将请求转发到内网服务中。
我目前的使用场景,是将极空间中部署 docker 服务,通过 Cloudflare tunnel 的方式访问,比如:在内网中,我通过
http://192.168.50.169:8888/ 访问服务,在外网,我就可以通过 qb.xxx.com 直接访问。实现步骤:
- 在源服务器上通过 docker 安装 Cloudflare 提供的daemon进程
cloudflared
- 在 cloudflare tunnel 页面中设置请求转发
- 开启邮箱验证,限制访问
通过二级域名将服务暴露在了公网,必然存在被爆破的分享,通过在 cloudflare 上配置访问策略,指定特定的访问人员,能够很大程度上加强服务的安全性。
通过上述组合拳,我就实现了在外网随时访问家中的任意设备。