可以先了解一下 fly.io 提供的免费额度,按量付费,需要添加信用卡,注意需要在 Organization - Billing 处,把 Plan 改为 Hobby Plan,而不是 Hobby Plan Preview 或其他 Plan。更新:免费的 Hobby Play 已经不能申请了,幸好已有用户还可以继续使用,现在这个 Plan 改名为 Legacy Hobby plan。
什么是 Tailscale 呢?你可以去它的官网了解,少数派的一篇文章是这样介绍 Tailscale 的:
Tailscale 属于一种虚拟组网工具,基于 WireGuard。他能帮助我们把安装了 Tailscale 服务的机器,都放到同一个局域网。
简单地说,我们可以在 Mac、iPhone、Windows 等设备都安装上 Tailscale,经过简单的配置,这些设备就能组成一个局域网,即使不是在同一个 Wi-Fi 下也可以互相访问对方的文件。你当然也可以把 Tailscale 安装在 fly.io 的虚拟主机上,这样你的手机或电脑就可以和这部虚拟主机组成局域网。
Tailscale 还支持所谓的 exit node:
An exit node in Tailscale is a device or network that is used to route all of your internet traffic.
Github 有一个项目 patte/fly-tailscale-exit 手把手教你如何在 fly.io 的主机上部署 Tailscale,并把该主机设置为 exit node,从而把你的手机、电脑的流量都路由到这个主机上,我试了一下,速度还不错。如果你已经购买了其他虚拟主机,也可以把 Tailscale 部署到你的主机上,不一定是 fly.io。
项目的安装说明已经很久没有更新,有些步骤已经过时,所以有几个需要注意的点:
Waiting for depot builder,可以试试使用 fly deploy --depot=false;Reusable + Ephemeral;fly.toml 再部署;fly.io 支持很多 region,如果你想知道哪个 region 在你所在的位置延迟最低,可以看这个帖子,或打开帖子提到的这个网页。我在广州,根据我的不完全测试,lax(Los Angeles)速度比较快,我以为 hkg(香港)、sin(新加坡)速度会不错,实际却很慢。
Tailscale 可能会通过它的 DERP node 中转你的网络,即你的网络不是直接从你的设备到 fly.io 的主机,而是从你的设备到 Tailscale 的 DERP node,再从 DERP node 到 fly.io 的主机,这样速度可能就有点慢了。
在安装了 Tailscale 应用的电脑上执行 tailscale status 命令,如果返回的信息提示 relay,说明你的网络经过了 DERP node,如果显示 direct,那你就是直连 fly.io。
你在网络上可能会看到 “Tailscale 打洞” 这个词,英文说法是 UDP hole punching,上面提到的项目支持 UDP hole punching,这是之所以能 direct 的原因。
Tailscale 博客写了一篇解释 NAT 穿透的文章,NAT 穿透有多种实现方式,其中一种就是 UDP 打洞。