相关指南
深入了解 Tailscale:设备之间是怎么直接连上的
更新于
Tailscale 做的事可以用一句话说完:让你名下的每台设备各自拿到一个固定的内网地址,然后设备和设备之间直接建立 WireGuard 加密隧道,不用经过一台中心服务器转发。它把一套组网系统拆成两半:控制面只负责认人、发钥匙、告诉每台设备「别的设备现在在哪」;数据面是设备之间点对点的加密连接,你的流量不经过控制服务器。难点在于家里和公司的设备都躲在路由器后面、没有公网地址,Tailscale 用 NAT 穿透把它们直接接上,实在接不上再用中继接力。下面按这个顺序讲。
传统 VPN 和 Tailscale 的差别:星形和网状
传统 VPN 是星形的:所有设备都连到一台 VPN 服务器,设备之间要通信,流量先到服务器再折回来。服务器是瓶颈,也是单点——它慢,所有人都慢;它挂了,所有人都断。
Tailscale 是网状的(mesh):每两台设备之间各有一条直接的隧道。手机访问家里的 NAS,流量从手机直接到 NAS,走的是两者之间最短的那条路。没有哪一台机器承担全部流量。
网状的代价是管理复杂:十台设备两两互连就是四十五条隧道,每条都要交换密钥、要知道对方当前的地址。手工维护不现实,Tailscale 的全部工作就是把这件事自动化。
控制面:只发钥匙和地址簿,不碰流量
每台设备装上 Tailscale 后会自己生成一对密钥,私钥永远留在设备上,公钥交给控制服务器(Tailscale 叫它 coordination server)。你登录账号,控制服务器就知道「这台设备属于谁」。
控制服务器手里有一张表:每台设备的公钥、分到的内网地址、它目前能被找到的网络地址,以及访问规则允许谁连谁。它把你有权访问的那几行发给你的设备,任何一台设备上线、下线、换了网络,表就更新,再推给相关的设备。
控制服务器不转发你的流量,也拿不到私钥,所以它解不开设备之间的通信。它像一个只管发通讯录和门禁卡的前台:告诉你对方在哪、你能不能进,进去之后说了什么它不在场。
登录用的是你已有的账号体系(单点登录),不是另设一套 VPN 密码;设备的密钥会定期过期,要重新登录确认,丢了的设备在后台删掉就失去访问权。
数据面:设备之间的 WireGuard 隧道
真正传数据的是 WireGuard。每台设备拿到别的设备的公钥后,就能和它建立一条加密隧道,隧道两头各认对方的公钥,中间任何人都读不了、也改不了。
Tailscale 没有改动 WireGuard 的加密部分,它做的是 WireGuard 本身不管的那些事:密钥怎么分发、地址怎么分配、设备换了网络怎么重新找到彼此。WireGuard 的原理见《深入了解 WireGuard》。
每台设备在这张网里有一个固定的内网地址(100 开头的那一段),不管它实际接的是家里宽带、公司网络还是手机流量,这个地址都不变。所以你可以一直用同一个地址访问家里的 NAS。配上 MagicDNS,还能直接用设备名字访问。
NAT 穿透:两台都躲在路由器后面,怎么直接连
家里的电脑没有公网地址,它出门要经过路由器做地址转换(NAT)。路由器只放行「里面先发起」的连接,外面主动来敲门的一律挡掉。两台设备都在各自的路由器后面,谁也没法先敲开对方的门,这就是点对点连接的难处。
Tailscale 的办法分三步。第一步,每台设备先问一台公网上的服务器「你看到我是从哪个地址、哪个端口出来的」,这样它就知道自己在路由器外面长什么样(这类服务叫 STUN)。第二步,两台设备通过控制服务器交换这个外部地址。第三步,两边同时朝对方的外部地址发包:各自的路由器看到是「里面先发的」,就给回程开了口子,两边的包恰好从这个口子进去,连接就通了。这就是常说的「打洞」。
打洞用的是 UDP。大多数家用路由器都能打通;但有些网络的地址转换方式特别严格(每连一个新目标就换一个外部端口),或者干脆封了 UDP,这时就打不通。
DERP 中继:打不通的时候谁来接力
打洞不保证成功,所以 Tailscale 准备了一批中继服务器,叫 DERP。两台设备一时连不上,就都连到同一台 DERP,由它把加密后的包转交给对方。DERP 走的是 HTTPS(TCP 443),几乎任何网络都放行。
中继转发的是已经用 WireGuard 加密好的包,DERP 没有密钥,只能看到「谁发给谁、多大」,看不到内容。
连接总是先从中继开始:两台设备一上线就先通过 DERP 说上话,保证马上能通;同时在后台尝试打洞,一旦直连成功就悄悄切过去,切换过程中连接不断。所以刚连上的头几秒延迟高一点、随后降下来,是正常现象。
一直停在中继上,速度和延迟取决于那台中继离你多远、有多忙,通常比直连慢。Tailscale 客户端里能看到当前这条连接是直连(direct)还是走了中继(relay)。
出口节点和子网路由:不止是设备互访
- 出口节点(exit node):把某一台设备指定为出口后,你其他设备上的全部上网流量都先加密送到它那里,再从它的网络出去。效果和传统 VPN 一样——对外显示的是出口节点的地址。出口节点可以是你自己家里的电脑,也可以是服务商提供的服务器。
- 子网路由(subnet router):让一台装了 Tailscale 的设备替它所在的整个局域网做代理。打印机、摄像头、老 NAS 这些装不了 Tailscale 的设备,就通过它被访问到。
- 访问控制(ACL):默认你名下的设备互相都能访问,团队使用时可以写规则,规定哪些人、哪些设备能访问哪些端口。规则由控制服务器下发,各设备自己执行。
- MagicDNS:给每台设备一个名字,访问时不用记 100 开头的地址。
它和 WireGuard、和传统 VPN 是什么关系
- 和 WireGuard:WireGuard 是一条隧道的协议,只管两端怎么加密通信;每一端的密钥和对方地址要你自己手工配。Tailscale 是建在它上面的一整套系统,替你做了登录、分发密钥、分配地址、NAT 穿透和中继。
- 和传统 VPN 服务:传统 VPN 是「所有流量去一台服务器」,重点在换一个出口;Tailscale 的重点是「设备之间互通」,换出口只是它的一个附带功能(出口节点)。
- 和内网穿透工具(frp、花生壳这类):内网穿透是把内网的某个端口暴露到公网,任何人知道地址都能访问到,安全靠那个服务自己;Tailscale 不暴露任何端口,只有你名下登录过的设备才进得来。
- 和 ZeroTier:思路相近,都是自动组网;ZeroTier 用的是自己的协议并模拟一个二层网络,Tailscale 用 WireGuard、工作在三层。
Headscale 和自建控制服务器
Tailscale 的客户端是开源的,控制服务器是它公司运营的服务。Headscale 是社区写的开源控制服务器,实现了同一套协议,官方客户端可以改连到它上面。这样设备名单、密钥目录和访问规则都在自己手里。
客户端里那个「自定义控制服务器」「Use custom server / Use an alternate server」的选项就是为此准备的:填一个地址,客户端就不再连 Tailscale 公司的服务器,而是连你指定的那一台。
自建之后,账号怎么登录、能挂多少台设备、有哪些出口节点,都由这台控制服务器的运营者决定,和 Tailscale 官方的免费额度与付费套餐没有关系。
在国内网络上用,要知道的几点
- 打洞靠 UDP。国内不少宽带对 UDP 限速,运营商的大内网(多层地址转换)也让打洞更难成功,走中继的概率比海外高。
- 走中继时速度看中继在哪。中继离得远,延迟就高,这是 Tailscale 在国内体验差别大的主要原因。
- WireGuard 的数据包格式是固定的,没有做伪装,在检查严格的网络里可能被识别和限速。它是一个组网工具,不是为绕过封锁设计的。
- 手机上常开没问题:隧道没有流量时几乎不耗电,切换 Wi‑Fi 和流量时连接会自己恢复。
雷腾 的私网怎么用它
雷腾 的「私网」栏目用的就是 Tailscale 的官方客户端,接到我们自己运营的控制服务器上:你用本站账号登录一次,设备就一直在线;我们在各地区提供出口节点,在客户端的 Exit Node 菜单里选地区即可换出口,不用重新导入配置;同一账号下的手机、电脑、NAS 互相能直接访问。
因为登录的是本站的控制服务器,设备数按本站的账号档位算,和 Tailscale 官方的账号、额度无关;如果设备上已经登录过 Tailscale 官方账号,要先退出再登录本站的。安装和登录的图文步骤见《私网(Tailscale)是什么》,入口在私网页面。
所在网络限制 UDP、私网又慢又不稳的时候,同一个账号可以换用其他接入方式,见《各种连接方式适用的场景》。
常见问题
Tailscale 的服务器能看到我的流量吗?
看不到内容。控制服务器只保存公钥、设备名单和访问规则,私钥不离开设备;中继服务器转发的是已经加密的包,没有密钥。它们能看到的是元数据:哪台设备在线、和谁建立了连接。
Tailscale 和 WireGuard 是什么关系?
WireGuard 是底层的加密隧道协议,Tailscale 在它上面加了账号登录、密钥分发、地址分配、NAT 穿透和中继。可以理解为 WireGuard 是发动机,Tailscale 是装好了发动机、能直接开的整车。
为什么有时候显示走中继(relay)而不是直连?
说明两台设备之间打洞没成功,常见原因是其中一边的网络封了 UDP,或者地址转换方式太严格。走中继照样能用,只是速度取决于中继的位置。换一个网络(比如手机热点)常常就能直连。
DERP 是什么?
Tailscale 的中继服务器。两台设备无法直连时,由它转发加密后的数据包;设备刚上线时也先经过它建立联系。它走 HTTPS,所以在只放行网页流量的网络里也能通。
出口节点和普通 VPN 有什么区别?
效果一样,都是让全部上网流量从另一个地方出去。区别是出口节点只是组网里的一台设备,随时可以在菜单里换成另一台或关掉,换的时候不用重新配置,设备之间的互访也不受影响。
Headscale 是什么?
一个开源的 Tailscale 控制服务器实现。把官方客户端的控制服务器地址改成它,就得到一套自己掌握的组网系统,数据面仍然是 WireGuard,客户端还是官方的。
Tailscale 能翻墙吗?
它本身是组网工具:只有当你的网里有一台位于境外的设备、并把它设为出口节点时,流量才会从境外出去。它的流量没有伪装,在限制 UDP 的网络里不一定好用。需要稳定的跨境线路时,看《各种连接方式适用的场景》里其他几种方式。