继上一集主包给小主机配好了WiFi并装了clash之后,又被各种神秘问题折磨了好几天(别喷了主包是笨蛋),最终反思了3秒之后(也许没那么久)决定把问题怪罪到openwrt上,于是改装了iStoreOS,虽然底层还是openwrt但是感觉易用性上可能对小白更友好一点(?)。不得不说iStoreOS的商店真的是一个很牛逼的东西,图形化的docker面板也真的是一个很牛逼的东西。于是主包一发不可收拾,连装了HomeAssistant、qBittorrent、JellyFin等一众软件包。这一堆服务搭完之后,下一个重要问题就是如何从公网访问。

这里主包简单尝试了三种方法,并来给大家做个对比。

  • Zerotier
  • Zerotier+中间云服务器
  • Cloudflare Tunnel

Zerotier

Zerotier的原理就是创建一个虚拟的局域网,把你的各种设备加到这个VPN网络中,每个设备分配一个局域网中的IP,这样就可以通过这个IP去让各个设备互相访问了。

免费版本的Zerotier限制是创建1个网络,可以加入10个设备。对于基础的个人使用应该是足够了,只要把所有服务器自己和需要访问服务器的设备都放到这个局域网里,就可以互相访问了。

优点

Zerotier的上手难度我个人感觉是真的很简单,iStoreOS在iStore中收录了一个Zerotier应用,直接下载、打开、填写网络ID并连接,然后在其他需要访问服务器的设备上也下载Zerotier的软件、填写网络ID并连接,最后记得在Zerotier的控制面板里给所有设备标记authorized就行了。

缺点

Zerotier只是给每个设备分配一个局域网IP,所以首先你需要在所有需要访问服务器的设备上都装一个Zerotier的软件并打开这个VPN,其次你还得记住它给你分配的IP地址,因为没有域名可以用。

Zerotier+中间云服务器

既然Zerotier可以把不同设备放到一个虚拟局域网中,那么主包就自然想到了可以把自己的云服务器(即本站用的服务器)也加入到Zerotier中,然后把一些路径代理到目标上。经过与nginx的一番搏斗,主包成功在这个路径上代理出了一个测速服务。

优点

跟我之前建网站积累的经验知识比较匹配?感觉没有过多困难就配好了。不过后续配JellyFin和HomeAssistant等的时候遇到了一些obstacles,把主包整得濒临破防。

而且这个方案带宽还挺高的,主包试了试看JellyFin基本不怎么卡。

缺点

带宽需要走云服务器上,如果你也像主包一样买的是特价优惠云服务器,大抵带宽不会太高,看JellyFin肯定是不可能的了。

CloudFlare Tunnel

CloudFlare的一个叫Zero Trust的东西,如果你的域名挂在CloudFlare上,你就可以把子域名(比如tunnel.your-domain.example这种感觉)重新定向到任何你希望的设备上。

这个服务理论上是免费的,但是需要添加一个支付方式,而主包既没有Visa也没有MasterCard,迫不得已上闲鱼斥3块7毛8巨资整了一张虚拟卡绑定了一下。使用免费计划创建一个隧道,它会给你一个隧道令牌,并且告诉你各种系统上如何“安装并运行连接器”。这个对应的可执行程序是叫cloudflared,我是选择了使用docker来跑这个服务,镜像是cloudflare/cloudflared,具体创建的命令是:

1
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <Your Token>

创建完连接后,可以为连接器创建“应用程序路由”,其实就是把你域名底下的某个子域名代理到你的内网机器上。比如我把这个域名speed.loveapple.icu导到了http://localhost:88,而88端口上有speed-test服务。在创建应用程序路由的同时,CloudFlare会自动帮你配置一个DNS记录,把子域名代理到CloudFlare自己的一个神秘网址上,然后再转而由内网服务器上的那个cloudflared程序接收(据我的粗浅理解应该是这样)。

优点

可以使用CloudFlare的SSL不用自己配;不需要服务器,只需要有个域名绑在CloudFlare上就行了;而且不像上一个方法,这个方法不用占服务器带宽,带宽走的是CloudFlare,不过用脚趾想想带宽也不会高就是了。

缺点

带宽不高,跑JellyFin是别想了。以及CloudFlare在大陆的访问性成谜,有时也许会不那么好用。

带宽对比

主包在小主机上跑了一个speedtest的docker,可以简单测测带宽。

首先是用流量连接NJU e-science中心的speedtest服务(感谢yaoge123老师太伟大了desuwa),测了一个手机流量的基准速度,确保后面测试时这一关不会成为瓶颈。

基准测试

接下来就是分别测试三种方案。Zerotier直连的带宽还是挺高的,至于CloudFlare Tunnel和Zerotier+云服务器的两种方案,带宽简直就是菜鸡互啄。

Zerotier直连
Zerotier+云服务器
CloudFlare Tunnel