Apple 生态下的内网穿透

Tag
draft
Slug
zeroiter-network
Created
Apr 8, 2024
  • 概览
    • 笔者的主力机是一台 macbook pro,在家庭内网中存在一些设备需要在外网能够访问到:
    • mac mini
      • 作为家庭服务器
    • 极空间 NAS
      • 作为私有云、影音中心,同时跑了一些 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) 协议,可以通过远程桌面的方式访问到另一台设备。注意被访问的设备需要在设置中开启桌面共享。
  1. 打开 Screen Share
  1. 输入要访问 mac 设备 IP
  1. 输入用户名,密码
  1. 访问成功
第一次因为要建立访问通道,会相对比较慢,通道建立完成之后,基本可以达到远端访问秒开。
 

Cloudflare tunnel

Cloudflare tunnel 是 Cloudflare 提供的一种内网穿透的服务,通过使用自定义域名,轻松访问内网服务,且无需暴露内网 IP 和服务端口号。使用这个服务的前提是你有一个托管在 cloudflare 的域名,通过二级域名将请求转发到内网服务中。
我目前的使用场景,是将极空间中部署 docker 服务,通过 Cloudflare tunnel 的方式访问,比如:在内网中,我通过 http://192.168.50.169:8888/ 访问服务,在外网,我就可以通过 qb.xxx.com 直接访问。
 
实现步骤:
  1. 在源服务器上通过 docker 安装 Cloudflare 提供的daemon进程 cloudflared
  1. 在 cloudflare tunnel 页面中设置请求转发
  1. 开启邮箱验证,限制访问
    1. 通过二级域名将服务暴露在了公网,必然存在被爆破的分享,通过在 cloudflare 上配置访问策略,指定特定的访问人员,能够很大程度上加强服务的安全性。
 
通过上述组合拳,我就实现了在外网随时访问家中的任意设备。