解锁网络边界的魔法师:Tailscale
Last updated: 2025/01/05 Published at: 2025/01/05
这是又一篇安利 Tailscale 的文章,如果问我 2024 年我最喜欢的软件是什么,那么 Tailscale 当之无愧。我真的非常喜爱 Tailscale 这个软件,而且已经为其写了两篇文章:
在中国大陆,如果你想成为一个合格的 self-hosted 爱好者,我认为首先需要解决的不是你的影音服务器,NAS 设备,树莓派等,而是一个更为重要的问题:内网穿透。如果你无法非常方便的访问到你的设备,你自建的各种服务,那么其他的一切都无从谈起,而 Tailscale 就是实现这一目的最棒的工具。
实际上,内网穿透是一个非常常见的议题,市面上的解决方案也非常多,如大名鼎鼎的 frp 以及各种 VPN 等,这也代表了两大类解决方案,从 TCP 四层网络协议模型的角度来看:
传输层的穿透:
如果是临时性质的此类端口转发,用 SSH 就直接能做到,而且更为的便捷和快速
这类工具的核心功能是通过某种机制,将内网中的某个端口暴露到外部网络,从而实现内外网络的互通。以 frp 为例,它基于客户端/服务器(C/S)模型,在客户端和服务器之间建立一条加密隧道,服务端监听一个指定端口,当接收到来自外部网络的流量时,会将数据通过隧道传输给客户端。客户端则根据预先配置,向内网对应的端口发起连接,将接收到的流量转发到目标服务,从而完成内网资源的外部访问。
网络层的穿透:
主要实现的是整个网络层的透明互联,将不同网络之间的通信障碍(如 NAT、路由隔离、防火墙)以更底层的方式解决。典型代表是各种 VPN(虚拟专用网络),它们通过虚拟网络接口和加密隧道技术,将多个物理上分散的网络逻辑上连接起来,使其表现为同一网络的一部分。因此传输层的穿透能做到的,网络层的穿透全部都能做到,但反过来却不行。
这两种模型各有优劣:
传输层的穿透:
之前就爆出过的新闻,就是对 FRP 此类工具的安全风险的认知不足导致的安全事故,如何看待小米因实习生导致被不法分子入侵小米服务器? - 知乎
这种穿透暴露的单元是服务,粒度是端口。配置较为简单,但是灵活性不足,而且此类方案直接转发端口到公网的方案,如果被暴露的服务的安全性较弱,就会有非常大的安全风险。
网络层的穿透:
这种穿透暴露的单元是主机,粒度是 IP。正是 VPN 工具的职责所在,但是传统 VPN 工具通常部署和维护都较为复杂,但是通过 VPN 可以直接构建一个无视地理位置的虚拟局域网,在网络内的设备直接在网络层打通,有着无与伦比的便捷性和灵活性。同时,VPN 对比直接向公网暴露服务端口这种简单粗暴的方式,其安全性由 VPN 软件保证,而不是由被暴露的服务负责。
Why Tailscale?
显然,VPN 方式是一个既更安全,又更灵活的穿透解决方案,但是使用传统 VPN 方案有两个巨大的痛点:配置复杂以及带宽受限。
配置复杂尚好解决,花点时间研究一下如何配置倒也无妨,但是传统 VPN 是一种以星型网络拓扑为主的软件,所有客户端连接到同一个服务器认证后进行再数据的交换,那么其势必受到服务器端的带宽和性能约束。这种缺点对于企业来说或许尚可接受,但是如果个人使用,在大陆这种带宽比金子贵的环境,我想我这种普通人是用不起的。
但好在 Tailscale 出现并解决了这两个问题:
- Tailscale 的配置十分简单,个人使用不需要任何复杂的配置,支持所有的主流平台,安装客户端后登录即可拥有属于你自己的 Overlay Network,同时如果你有更高级的需求,它 有着非常详细的文档教程,甚至如果你对其技术细节感兴趣,也有非常棒的博客文章可以学习。
- Tailscale 的杀手级能力就是它很大程度上解决了传统星型 VPN 网络的问题,它会让尽可能的实现一个全互联(full mesh)的拓扑网络,节点和节点之间直接建立隧道进行通信,而不需要通过一个中间服务器进行中转。当然,如果你的每个节点的 NAT/防火墙都十分的严格,tailscale 也有着星型网络的能力,它能够通过 DERP 服务,帮你进行流量的中转。这部分我在 Create your own Overlay Network 这个文章有着介绍,这里就不多解释。
Hints
1. Tailscale 无需关闭
tailscale 可以保证节点的互通,即使节点的 IP 变化,位置移动等。
假设你需要通过手机下载你的树莓派上的某个文件,树莓派通常放在家中固定不动,家庭网络的公网上行带宽为 50Mbps,同时假设你有一台存在于公网的云服务器带宽为 5Mbps,部署了 FRP,OpenVPN,以及自建了 tailscale 的 DERP 服务。
我们考虑这几种条件下,手机不改变任何配置仍旧通过 FRP,OpenVPN,tailscale 访问树莓派的带宽能力。
手机网络环境 | FRP | OpenVPN | Tailscale |
---|---|---|---|
家里 (和树莓派处于同一千兆局域网) | 5Mbps | 5 Mbps | 900 Mbps |
流量 (tailscale 不能建立点对点连接) | 5Mbps | 5 Mbps | 5 Mbps |
咖啡厅 Wifi (tailscale 能够建立点对点连接) | 5Mbps | 5 Mbps | 50 Mbps |
通常情况下,在家中访问自己的服务并不需要通过 FRP 或 OpenVPN,但这往往需要进行一些配置切换,比如更换域名或 IP,或者关闭 OpenVPN 客户端。然而,这种频繁的配置切换无疑会带来不小的不便,影响使用体验。
Tailscale 在内网直连时确实会带来一些性能损失,但我认为,只要你的局域网不是万兆甚至更高的级别,这种性能损失与 Tailscale 所带来的统一性和便利性相比,几乎可以忽略不计。
当 Tailscale 的节点处于同一局域网时,通常可以实现直连,此时速度接近内网满速。如果在网络限制较严格的场景中无法建立点对点连接,Tailscale 的表现与其他工具相当。但一旦 Tailscale 节点能够直连,其带宽优势便远超其他工具。
因此,如果你为树莓派配置了域名,可以始终将其指向 Tailscale 网络内的内网 IP。Tailscale 会自动选择最优的连接方式,为你带来更高效的使用体验。
2. 拥有你自己的 DERP Servers
当 Tailscale 无法在节点间建立点对点连接时,会通过 DERP Servers 进行流量中转。Tailscale 官方提供了一些服务器,但这些服务器并不位于中国大陆。这意味着,当你访问树莓派等设备时,流量可能需要绕道国外,从而导致较高的延迟。为了解决这个问题,你可以利用云服务器,在常住区域搭建一个专属的 DERP Server,作为 Tailscale 连接的兜底方案。搭建 DERP Server 并不需要很高带宽,但能显著提升使用 Tailscale 的体验,而且相关教程在网上非常丰富,按需选择即可。
Summary
本文再次向 self-hosted 爱好者们推荐 Tailscale。如果你经常折腾家庭服务器,NAS 等,相信对我提到的这些痛点也深有体会。如果你还没使用类似 Tailscale 的组网工具,或者手头的工具没有 Tailscale 那样方便,不妨从 Tailscale 开始吧!我相信,一旦你体验到 Tailscale 带来的全互联魅力,你一定会发现更多有趣的玩法。更何况,Tailscale 仍在不断迭代,持续推出新功能。