Tailscale 能做什么?从 WireGuard、NAT 穿透到中继的运行原理
家里的电脑、云服务器和随身携带的笔记本,通常位于不同网络。想从外面连接家中电脑,往往要处理公网 IP、端口映射、动态 DNS 和防火墙;如果遇上运营商级 NAT,连端口映射都未必可行。
Tailscale 的作用,就是让这些设备加入一张受身份和访问策略管理的虚拟内网。设备可以通过相对稳定的虚拟 IP 或设备名互相访问,底层则尽量建立点对点加密连接,无法直连时使用中继。
它主要解决“自己的设备如何互联”,默认不会把所有公网访问都改成从远端出站。 理解这一点,也就容易区分 Tailscale、普通代理和出口节点的用途。
1. Tailscale 能解决哪些问题
假设有四台设备:
1 | MacBook:随身使用,在家、学校和咖啡店之间切换 |
它们加入同一个 Tailscale 网络后,就可以在策略允许的范围内,通过虚拟网络通信。这张网络称为 tailnet。
| 场景 | 具体用法 |
|---|---|
| 远程开发 | SSH 连接服务器,使用 VS Code Remote SSH |
| 访问开发服务 | 在笔记本上打开远端的 Jupyter、测试网站或模型 API |
| 远程桌面 | 通过 Tailscale 地址连接 RDP 或屏幕共享服务 |
| 访问 NAS | 在外面访问家中的文件服务 |
| 团队协作 | 按成员、设备和端口授权访问内部服务 |
| 访问未安装客户端的设备 | 通过子网路由器连接打印机、NAS 等局域网设备 |
| 改变公网出口 | 选择出口节点,让公网流量从指定远端设备出站 |
例如,远端设备名为 dev-server,可以这样连接:
1 | ssh alice@dev-server |
若服务器上已经运行了端口为 8000 的 Web 服务,也可以尝试访问:
1 | http://dev-server:8000 |
这要求 MagicDNS 和本机解析正常、服务监听了可达地址、主机防火墙和 tailnet 策略允许通信。安装 Tailscale 只提供网络连接能力,不会自动启动 SSH、远程桌面或 Web 服务。
这里的 SSH 示例使用普通 SSH 服务;Tailscale 另有 Tailscale SSH 功能,需要单独启用和配置策略,二者不应混为一谈。
2. 虚拟内网不是同一个物理局域网
加入 tailnet 后,设备通常会获得:
- 位于
100.64.0.0/10范围内的 IPv4 地址。 - 位于
fd7a:115c:a1e0::/48范围内的 IPv6 地址。 - 可由 MagicDNS 解析的设备名。
其中,100.64.0.0/10 是共享地址空间,并非 Tailscale 独占,也不是 RFC 1918 私有地址范围。
这些地址充当设备在虚拟网络中的身份。当笔记本换 Wi-Fi、服务器公网地址变化时,设备仍可通过相对稳定的 Tailscale 地址互相访问,客户端负责更新底层连接路径。
但 Tailscale 提供的是三层 IP 网络,不能直接等同于把所有设备插到同一台交换机上。依赖二层广播、局域网自动发现或 mDNS 的应用,不一定能自动发现远端设备。通常需要直接填写设备名或 IP。
3. 架构:控制平面负责协调,数据平面负责通信
理解 Tailscale,首先要把两类工作分开。
| 部分 | 负责什么 | 典型内容 |
|---|---|---|
| 控制平面 | 身份、设备发现、策略和连接协调 | 设备公钥、候选地址、DNS 和路由配置 |
| 数据平面 | 传输实际业务数据 | SSH、文件、远程桌面、HTTP 请求 |
简化后的关系如下:
1 | Tailscale 控制服务 |
控制服务像通讯录和调度中心,帮助设备知道“对方是谁、可能在哪里、是否允许连接”。业务数据则尽量直接在设备之间传输。
因此,“使用 Tailscale 的云端控制服务”不等于“所有业务流量都经过同一个云端网关”。直连失败时确实可能使用中继,但中继承担的是另一项工作。
3.1 登录和密钥交换
设备加入网络时,大致经历以下过程:
- 用户通过支持的身份提供商完成认证,或设备使用相应的注册机制加入网络。
- 客户端在本机生成通信所需的密钥材料。
- 将公钥、设备信息和可连接地址等信息注册到控制服务。
- 获取允许通信的对端信息和网络策略。
- 根据这些信息建立加密连接。
用于 WireGuard 通信的私钥保留在设备本地,控制服务分发公钥和协调信息,而不是收集双方的 WireGuard 私钥。
这并不表示控制平面无关紧要。设备信任关系、策略和配置仍然依赖它;新设备注册、密钥轮换和网络变化也需要相应协调。端到端加密和控制平面的信任,是两个应当分别理解的问题。
3.2 Tailscale 与 WireGuard 的关系
WireGuard 提供经过身份认证的加密隧道,主要解决两个端点之间如何安全传输 IP 数据。
Tailscale 则在它之上补充了设备注册、公钥分发、身份管理、访问策略、NAT 穿透、DNS、路由和中继等能力。Tailscale 客户端可以使用用户态实现,并不要求所有平台都通过内核 WireGuard 模块运行。
可以用下面的方式理解二者关系:
1 | WireGuard:加密隧道 |
4. 没有公网 IP,为什么也可能直连
大多数家庭设备都在路由器后面。电脑使用局域网地址,路由器通过 NAT 将流量转换成公网连接;运营商网络还可能增加一层 NAT。
1 | 电脑 A → 家用路由器 / NAT → 互联网 → 另一处路由器 / NAT → 电脑 B |
外部设备直接向家中电脑发起新连接时,路由器通常不知道应该转发给谁。但内部设备主动向外发送数据后,路由器会建立映射,并允许符合条件的返回流量通过。
Tailscale 利用这一机制,探测设备的候选地址和 NAT 映射,让双方协调发送 UDP 数据,尝试建立可用路径。这通常称为 NAT 穿透或 UDP 打洞,涉及 STUN 等探测机制以及多种连接尝试。
直连成功时:
1 | 电脑 A |
“直连”指不需要应用层中继,沿途仍然经过运营商和互联网路由器。
打洞并非总能成功。UDP 被阻止、双方 NAT 映射难以预测、严格防火墙或其他网络限制,都可能导致直连失败。即使本机网络支持 UDP,也不能单凭这一点保证能与某台远端设备直连。
5. 三种连接路径:直连、Peer Relay 和 DERP
按照官方连接类型文档,Tailscale 当前支持三种主要路径:
| 类型 | 数据路径 | 性能特点 |
|---|---|---|
| Direct | 设备 A → 设备 B | 通常延迟最低、吞吐量最好 |
| Peer Relay | 设备 A → tailnet 内配置的中继设备 → 设备 B | 取决于中继位置和网络,可能优于 DERP |
| DERP | 设备 A → DERP 中继基础设施 → 设备 B | 兼容受限网络,可能增加延迟并限制吞吐量 |
Peer Relay 需要在 tailnet 中显式配置可用的中继设备,并满足双方可达等条件,并不是加入网络的任意设备都会自动承担中继。
5.1 连接不一定从直连开始
一个容易忽略的细节是:连接建立初期可以先通过 DERP 通信,双方再交换连接信息、尝试 NAT 穿透。
按照官方文档描述的典型流程:
1 | 先通过 DERP 建立通信 |
客户端还会继续检查是否存在更好的连接路径。网络切换后,直连也可能退回中继。
所以,看到一次 via DERP(...) 不代表永远不能直连,需要观察后续探测和实际连接状态。
5.2 中继能看到数据内容吗
在两个 Tailscale 端点之间,直连、Peer Relay 和 DERP 都传输 WireGuard 端到端加密的数据。
中继不持有双方的 WireGuard 私钥,不能因此解密其中的 SSH、HTTP 或文件内容。但中继仍然可以观察流量时间、大小及连接相关元数据,不能把“内容加密”理解成“完全没有元数据”。
还要区分中继与网关:子网路由器和出口节点会终止对应的 Tailscale 隧道并转发内部数据,后续链路的保护范围不同。
6. 一次 SSH 请求经过了什么
假设 Mac 要访问另一处网络中的 Linux 服务器:
1 | ssh alice@dev-server |
大致过程是:
1 | MagicDNS 将设备名解析为 Tailscale 地址 |
这是常见系统网络模式的简化流程;用户态网络模式等部署方式的接入机制会有所不同。
SSH 自身也有加密,所以这里是 SSH 会话运行在 WireGuard 加密网络之上。Tailscale 的网络策略决定是否允许连接,SSH 服务仍然负责相应的用户认证和主机权限。
7. 子网路由器与出口节点分别做什么
这两个功能都会转发数据,但目标不同。
7.1 子网路由器:进入另一处局域网
假设家里的打印机没有 Tailscale 客户端,地址是 192.168.50.20。可以让家里一台常开设备安装 Tailscale,作为子网路由器,发布相应网段:
1 | 外面的笔记本 |
这需要配置转发、发布和批准路由、访问策略,以及客户端对路由的接受行为;并不是安装客户端后自动获得整个家庭网络的访问权。
Tailscale 的加密在子网路由器处终止。子网路由器到打印机这一段是否加密,取决于实际应用协议和网络配置。另外,远端局域网与当前位置的局域网网段重叠时,需要专门处理地址冲突。
7.2 出口节点:从远端网络访问公网
如果想让访问公网网站的流量从家里出站,可以将家中设备配置为出口节点,并在笔记本上选择使用它:
1 | 外面的笔记本 |
此时网站看到的通常是出口节点所在网络的公网地址。出口节点可以接管 IPv4 和 IPv6 默认路由,具体还受客户端平台、其他路由及配置影响。
Tailscale 加密保护的是到出口节点的隧道。出口节点之后,HTTPS 等应用协议继续提供自身的加密;不能认为 WireGuard 隧道一直延伸到任意公网网站。
| 对比项 | 子网路由器 | 出口节点 |
|---|---|---|
| 主要目标 | 指定的远端子网 | 公网流量 |
| 常见资源 | 打印机、NAS、内部服务 | 外部网站和公网 API |
| 是否要改变公网出口 | 通常不需要 | 是其主要用途 |
出口节点由设备发布、管理员授权,客户端再按相应设置选择使用。仅仅开启 Tailscale,不代表已经选择了出口节点。
8. 怎么判断当前连接走哪条路径
常用命令有:
1 | # 查看设备状态和已经发生通信的连接信息 |
status 中常见的关键词包括:
| 输出 | 含义 |
|---|---|
direct |
当前使用直接连接 |
relay |
通过 DERP 中继 |
peer-relay |
通过配置的 Peer Relay 设备中继 |
下面是示意输出,设备名和数值仅用于说明:
1 | pong from dev-server (...) via DERP(sin) in 180ms |
其中 sin 表示新加坡 DERP 区域。如果后续输出变成通过具体端点地址通信,说明可能已经升级为直连。
本次实际排查中,Mac 到一台远端 Linux 设备可以通信,但持续使用新加坡 DERP,延迟约为 140–250 ms。这个现象说明连接可用而路径可能有优化空间,并不能直接归因于本机代理软件。
另外,tailscale ping 主要验证 Tailscale 连接情况。它成功不代表目标端口已有服务监听,也不代替应用访问策略、主机防火墙和应用本身的检查。排查 Web 或 SSH 问题时,还应测试实际请求。
9. Tailscale 与 Clash 为什么可以同时使用
二者虽然都可能创建虚拟网卡,解决的主要问题却不同。
| 工具 | 主要关注点 |
|---|---|
| Tailscale | 让授权设备跨网络互联,支持子网和出口路由 |
| Clash / Mihomo | 接收应用流量,按规则选择直连或代理出口 |
一种常见分工是:
1 | 访问自己的服务器、电脑和 NAS → Tailscale |
但二者可能同时影响系统路由和 DNS。需要确认内网目标仍走 Tailscale,公网流量按预期进入 Clash,而且 IPv4 和 IPv6 都得到正确处理。使用 Tailscale 出口节点时,还要重新考虑公网流量的实际路径。
之前的排查中,Clash 能代理 IPv4,却没有完整接管公网 IPv6。开启 Tailscale 时使用的 DNS 能返回真实 IPv6 地址,应用选择 IPv6 后便从本地宽带直出。修复的是 Clash 的 IPv6 路由缺口,而不是关闭 Tailscale。
具体过程见:开启 Tailscale 后,Clash 出口为什么变成中国?一次 IPv6 绕过代理的排查与修复。
默认未使用出口节点时,Tailscale 主要处理 tailnet 及已配置的路由,不会自动将普通公网访问全部交给远端设备。不过,DNS 配置仍可能发生变化,所以“没有使用出口节点”和“完全不影响上网行为”也不是同一个概念。
10. 从一个最小场景开始使用
对于个人开发环境,可以先完成一个简单目标:让笔记本访问一台远端服务器。
- 在两台设备上安装官方 Tailscale 客户端,登录并加入同一个 tailnet。
- 在管理界面确认设备已获准加入,并检查访问策略。
- 用
tailscale status和tailscale ping检查设备是否可达。 - 确认远端 SSH 或 Web 服务已经启动,并监听可达地址。
- 通过设备名或 Tailscale IP 访问实际服务。
- 如果传输慢,再检查是直连还是中继,以及双方网络条件。
有了这条最小可用路径,再根据需要增加子网路由器、出口节点或更细的访问策略,排查起来会更清楚。
Tailscale 带来的便利,是把原本分散的身份、公钥、地址变化、NAT 穿透和路由管理组合起来。使用时仍然需要分别确认三件事:设备能否连接、策略是否允许、应用是否正常提供服务。
参考资料
以下官方资料查阅于 2026 年 10 月,功能支持和具体行为应以所用版本为准。



