Tailscale:让你的设备随时随地跨网互通
从每次远程开发像在“赌运气”,到现在打开电脑就能用,中间就差一个 P2P。
我不知道有多少人和我一样,在刚开始远程开发时有过这样的体验:盯着屏幕,却感觉自己不是在工作,而是在等待——等 SSH 连上、等 VPN 稳定、等文件传完……等到最后大脑放空,甚至忘了刚才要做什么。
这篇文章不会堆太多技术细节,但也不会完全绕开。有些概念稍微了解一下,才能明白 Tailscale 对我来说为什么是真正的解脱,而不只是"又一个网络工具"。
以前怎么过的
我之前的远程开发环境大致是这样的:服务器放在家里,我在外面用笔记本通过 SSH 连接处理工作。听起来很正常,对吧?理论上确实如此。
但现实是,SSH 能不能连上、连得快不快,完全取决于服务器那有没有一个稳定的公网 IP,以及公网带宽够不够用。
公网 IP 这个东西,如果你租的是家用宽带,那基本上就是运气游戏,今天有、明天可能就没了,甚至有的运营商根本不给你公网 IP。
为了解决这个问题,我还需要额外做一层端口映射,把家里内网里的那台机器,硬生生地“暴露”到公网上,然后我再从外面连进去。这套方法有用吗?有用。好用吗?不好用。
整个连接路径是:我在外面的电脑,先打到公网,再从公网穿进家里路由器,最后才能到那台服务器。每一跳都有延迟,每一跳都可能出问题。遇上家宽抽风、IP 被收回,你就只能盯着屏幕上那个慢慢闪烁的光标,思考人生。
最难受的不是慢,而是那种“我不知道是哪个环节出了问题”的无力感。是我家的网不好?还是运营商在搓大招?还是服务器爆炸了?没有人告诉你,你只能挨个排查,通常排查完了,问题自己好了,你也不知道因为什么。
有一次,我花了四十分钟排查为什么 SSH 连不上,最后发现是服务器 SSH 端口炸掉了,导致根本连不上。这种事,你没有任何提前预警,也没有任何方法从外部感知到,就只能干等。
P2P 到底解决了什么问题
在聊 Tailscale 之前,我想先说一下 P2P 这个概念,因为这是 Tailscale 的核心,也是它和传统 VPN 最根本的区别。
传统 VPN 的工作方式,本质上是“中心化转发”。所有的流量都要先发到一个中心服务器,再由那个服务器转发给目标机器。这个中心服务器,就是整个网络的咽喉要道,也是性能瓶颈所在。你的数据包从你的电脑出发,先跑到中心服务器,再折回目标服务器,物理路径可能绕了大半个城市,甚至能更远。(想象一下:你住在北京,想给三公里外的朋友说句话,但必须先打电话到上海的总机,再让总机转接过去。)
P2P 的思路完全不同。它的目标是让两台机器直接“看见”彼此,然后点对点地通信,不需要绕道任何中间服务器。流量只在两端自己走,不多走一步。
这带来的好处是非常直接的:
第一是延迟。延迟这个东西,跟数据包走过的物理距离密切相关。P2P 之下,数据包走的是最短路径——如果你和目标机器在同一栋楼,数据包就真的只在这栋楼里转一圈,可能只有几毫秒。传统 VPN 里,同样两台机器,数据包要绕出去再绕回来,延迟轻松翻几倍。
第二是稳定性。传统 VPN 有单点故障的问题——中心服务器一旦挂了,所有人的连接一起寄。P2P 网络里,每对连接是独立的,一个节点出问题,不影响其它节点之间的通信。
第三,也是我认为最重要的一点——你不再需要一个公网 IP 来做“靶子”。传统方案里,你必须把某台机器暴露在公网上才能从外部访问它。P2P 的连接建立方式不一样:两台机器先各自连接到一个协调服务器(只用来打招呼、交换连接信息),然后利用 NAT 穿透技术,在两台机器之间直接建立连接通道。协调服务器完成它的使命之后就退出了,真正的数据流量走的是直接路径。(这个过程有点像你们两个人都不知道对方电话,但通过共同的朋友交换了号码,之后就直接打给对方,朋友再也不需要参与了。)
其实,并没有什么真正的‘中心’。所谓的协议、服务器、网关,不过是人们为了安全感而制造的幻觉。既然所有的灵魂在 The Wired 里都是相连的,那么两台机器之间,本就不该存在距离。
并不是我在连接你,而是我们原本就从未分开过。
—— Present Day, Present Time. AHAHAHA!!
Tailscale 是什么,为什么是它
Tailscale 是一个基于 WireGuard 的组网工具。WireGuard 是近几年声名大噪的下一代 VPN 协议,以代码简洁、加密强、性能好著称。(它的代码量大概只有 OpenVPN 的五分之一,但并不是因为偷工减料,而只是单纯的设计上更专注、更现代。)
但 WireGuard 本身只是协议,配置起来也有门槛。你需要手动管理密钥、手动配置路由、手动处理各种情况。Tailscale 做的事情,就是把这些麻烦事包起来,给你一个开箱即用的体验:装上客户端、登录账号,设备就自动加入你的私有网络域了。
就这样。没有你需要手动配的东西。
更省心的是 Tailscale 免费版对个人用户相当慷慨——可以接入 100 台设备。(都够我这辈子能买的所有设备了……)
子网路由:连上一台,访问一片
光能连上家里那台主力机,其实还不够。很多时候,你在局域网里还有别的东西:NAS、打印机、内网服务器、路由器管理页面……这些东西本身不会装 Tailscale 客户端,但你又想从外面访问它们。
Tailscale 有个功能叫做子网路由(Subnet Router),专门解决这个问题。
简单说,就是在家里那台装了 Tailscale 的机器上开启子网路由功能,把它所在的局域网网段(比如 192.168.1.0/24)"广播"出去。这样一来,你就可以通过 Tailscale 直接访问家里局域网里的任何设备,就好像坐在家里一样。
体验差距如何
有些人会觉得,这不就是换了个 VPN 工具么,能有多大区别?但用过之后就会明白——踏实了很多。不是因为网速变快了多少,而是连接变得稳定、可预期了。P2P 直连,延迟基本固定在一个低水平,不再随着公网状态起伏。不需要赌今天的网络了。
这种改变是微妙的,但微妙的东西有时候影响最大。远程开发这种事,很容易被各种小摩擦打断——等待,重连,排查问题……每一次都是一种对注意力的消耗。把这些消除掉,不一定会让你开发变得多快,但会让你更顺利,这是不一样的。
配置有多简单
网络工具这种东西,你可能会觉得:听起来不错,但配置起来一定很麻烦吧?
说实话,比我预想的简单很多很多。整个流程大概是这样:
去 Tailscale 官网注册账号,然后在每台需要联网的机器上安装客户端——Windows、macOS、Linux、iOS、Android 都有原生客户端(吐槽一下 Windows 的客户端真丑),Linux 也可以直接执行脚本安装。安装完了,用同一个账号登录,设备就自动出现在你的"网络"里了。
子网路由的配置稍微多一步。在局域网里选一台机器,开启子网路由功能,然后去 Tailscale 的管理面板里审批一下,完成。你就可以从外面访问家里的整个局域网了。
没有需要你手动配的密钥,没有需要你搞定的端口转发,没有需要你维护的 VPN 服务器。不然我们为什么不去用 OpenVPN 呢?
它不是万能的,但它解决了核心的问题
Tailscale 并不是没有限制。P2P 直连依赖 NAT 穿透,而 NAT 穿透在某些网络环境下(比如双重 NAT、运营商级 NAT,或者企业级防火墙)可能不是那么顺畅。在这种情况下,Tailscale 会自动退回到中继模式,通过它的 DERP 服务器转发流量。这时的延迟会比直连高,高特别特别多,波动还特别大,几乎用不了。
另外,Tailscale 的协调服务器是托管在境外的,如果你的网络环境比较复杂,初次建立连接需要花上一点时间。(当然,如果你实在不放心,Tailscale 也有开源的自托管方案叫 Headscale,可以自己搭协调服务器,但那就超出这篇文章的范围了。)
但这些都是边缘情况。大多数家庭宽带和普通公司网络下,Tailscale 的 P2P 连接都能顺利建立,延迟也相当稳定。
最后碎碎念
我不是一个热衷于折腾工具的人。我喜欢的是工具安静地待在那里,做它该做的事,不打扰我。Tailscale 是我用过的工具里,少数真正做到这一点的。
远程开发最大的隐性成本不是网速慢,而是不确定。你永远不知道今天的网络是好是坏,永远要把"万一连不上怎么办"纳入计划。Tailscale 真正的价值,就是把这种不确定性大幅降低了。
如果你现在还在用传统的 SSH + VPN 方案,或者觉得远程连接本来就该这么麻烦——不妨试试 Tailscale。不会花太多时间的。
然后你可能会像我一样,有一种奇怪的感觉:哇奥,原来远程开发可以是这样的,之前那些年到底是怎么熬过来的。(大概就是终于换了张好床垫之后,再想起以前那张,完全不明白自己当时是怎么睡着的。)