家里的电脑、云服务器和随身携带的笔记本,通常位于不同网络。想从外面连接家中电脑,往往要处理公网 IP、端口映射、动态 DNS 和防火墙;如果遇上运营商级 NAT,连端口映射都未必可行。

Tailscale 的作用,就是让这些设备加入一张受身份和访问策略管理的虚拟内网。设备可以通过相对稳定的虚拟 IP 或设备名互相访问,底层则尽量建立点对点加密连接,无法直连时使用中继。

它主要解决“自己的设备如何互联”,默认不会把所有公网访问都改成从远端出站。 理解这一点,也就容易区分 Tailscale、普通代理和出口节点的用途。

1. Tailscale 能解决哪些问题

假设有四台设备:

1
2
3
4
MacBook:随身使用,在家、学校和咖啡店之间切换
Linux 服务器:运行开发环境和模型服务
家用电脑:保存文件,偶尔需要远程桌面
手机:在移动网络下访问内部服务

它们加入同一个 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
2
3
4
5
        Tailscale 控制服务
/ \
身份、公钥、策略 身份、公钥、策略
/ \
笔记本 ←── 加密业务通信 ──→ 服务器

控制服务像通讯录和调度中心,帮助设备知道“对方是谁、可能在哪里、是否允许连接”。业务数据则尽量直接在设备之间传输。

因此,“使用 Tailscale 的云端控制服务”不等于“所有业务流量都经过同一个云端网关”。直连失败时确实可能使用中继,但中继承担的是另一项工作。

3.1 登录和密钥交换

设备加入网络时,大致经历以下过程:

  1. 用户通过支持的身份提供商完成认证,或设备使用相应的注册机制加入网络。
  2. 客户端在本机生成通信所需的密钥材料。
  3. 将公钥、设备信息和可连接地址等信息注册到控制服务。
  4. 获取允许通信的对端信息和网络策略。
  5. 根据这些信息建立加密连接。

用于 WireGuard 通信的私钥保留在设备本地,控制服务分发公钥和协调信息,而不是收集双方的 WireGuard 私钥。

这并不表示控制平面无关紧要。设备信任关系、策略和配置仍然依赖它;新设备注册、密钥轮换和网络变化也需要相应协调。端到端加密和控制平面的信任,是两个应当分别理解的问题。

3.2 Tailscale 与 WireGuard 的关系

WireGuard 提供经过身份认证的加密隧道,主要解决两个端点之间如何安全传输 IP 数据。

Tailscale 则在它之上补充了设备注册、公钥分发、身份管理、访问策略、NAT 穿透、DNS、路由和中继等能力。Tailscale 客户端可以使用用户态实现,并不要求所有平台都通过内核 WireGuard 模块运行。

可以用下面的方式理解二者关系:

1
2
WireGuard:加密隧道
Tailscale:加密隧道 + 设备与身份管理 + 连接协调 + 路由和 DNS

4. 没有公网 IP,为什么也可能直连

大多数家庭设备都在路由器后面。电脑使用局域网地址,路由器通过 NAT 将流量转换成公网连接;运营商网络还可能增加一层 NAT。

1
电脑 A → 家用路由器 / NAT → 互联网 → 另一处路由器 / NAT → 电脑 B

外部设备直接向家中电脑发起新连接时,路由器通常不知道应该转发给谁。但内部设备主动向外发送数据后,路由器会建立映射,并允许符合条件的返回流量通过。

Tailscale 利用这一机制,探测设备的候选地址和 NAT 映射,让双方协调发送 UDP 数据,尝试建立可用路径。这通常称为 NAT 穿透或 UDP 打洞,涉及 STUN 等探测机制以及多种连接尝试。

直连成功时:

1
2
3
4
电脑 A
→ WireGuard 加密数据
→ 互联网中的直接 UDP 路径
→ 电脑 B 解密并处理

“直连”指不需要应用层中继,沿途仍然经过运营商和互联网路由器。

打洞并非总能成功。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
2
3
4
5
6
7
先通过 DERP 建立通信
↓
尝试建立直接 UDP 连接
├─ 成功 → 切换到直连
└─ 失败 → 尝试可用的 Peer Relay
├─ 成功 → 使用 Peer Relay
└─ 失败 → 保持 DERP 中继

客户端还会继续检查是否存在更好的连接路径。网络切换后,直连也可能退回中继。

所以,看到一次 via DERP(...) 不代表永远不能直连,需要观察后续探测和实际连接状态。

5.2 中继能看到数据内容吗

在两个 Tailscale 端点之间,直连、Peer Relay 和 DERP 都传输 WireGuard 端到端加密的数据。

中继不持有双方的 WireGuard 私钥,不能因此解密其中的 SSH、HTTP 或文件内容。但中继仍然可以观察流量时间、大小及连接相关元数据,不能把“内容加密”理解成“完全没有元数据”。

还要区分中继与网关:子网路由器和出口节点会终止对应的 Tailscale 隧道并转发内部数据,后续链路的保护范围不同。

6. 一次 SSH 请求经过了什么

假设 Mac 要访问另一处网络中的 Linux 服务器:

1
ssh alice@dev-server

大致过程是:

1
2
3
4
5
6
7
8
9
10
11
12
13
MagicDNS 将设备名解析为 Tailscale 地址
↓
操作系统根据目标地址选择 Tailscale 路由
↓
数据进入 Tailscale 虚拟网络接口
↓
客户端处理并通过 WireGuard 加密
↓
直连发送,或通过中继传输
↓
远端客户端解密,并按访问策略处理
↓
交给远端 SSH 服务

这是常见系统网络模式的简化流程;用户态网络模式等部署方式的接入机制会有所不同。

SSH 自身也有加密,所以这里是 SSH 会话运行在 WireGuard 加密网络之上。Tailscale 的网络策略决定是否允许连接,SSH 服务仍然负责相应的用户认证和主机权限。

7. 子网路由器与出口节点分别做什么

这两个功能都会转发数据,但目标不同。

7.1 子网路由器:进入另一处局域网

假设家里的打印机没有 Tailscale 客户端,地址是 192.168.50.20。可以让家里一台常开设备安装 Tailscale,作为子网路由器,发布相应网段:

1
2
3
4
5
外面的笔记本
→ Tailscale 隧道
→ 家中子网路由器
→ 家庭局域网
→ 打印机 192.168.50.20

这需要配置转发、发布和批准路由、访问策略,以及客户端对路由的接受行为;并不是安装客户端后自动获得整个家庭网络的访问权。

Tailscale 的加密在子网路由器处终止。子网路由器到打印机这一段是否加密,取决于实际应用协议和网络配置。另外,远端局域网与当前位置的局域网网段重叠时,需要专门处理地址冲突。

7.2 出口节点:从远端网络访问公网

如果想让访问公网网站的流量从家里出站,可以将家中设备配置为出口节点,并在笔记本上选择使用它:

1
2
3
4
5
外面的笔记本
→ Tailscale 隧道
→ 家中出口节点
→ 家中宽带
→ 公网网站

此时网站看到的通常是出口节点所在网络的公网地址。出口节点可以接管 IPv4 和 IPv6 默认路由,具体还受客户端平台、其他路由及配置影响。

Tailscale 加密保护的是到出口节点的隧道。出口节点之后,HTTPS 等应用协议继续提供自身的加密;不能认为 WireGuard 隧道一直延伸到任意公网网站。

对比项 子网路由器 出口节点
主要目标 指定的远端子网 公网流量
常见资源 打印机、NAS、内部服务 外部网站和公网 API
是否要改变公网出口 通常不需要 是其主要用途

出口节点由设备发布、管理员授权,客户端再按相应设置选择使用。仅仅开启 Tailscale,不代表已经选择了出口节点。

8. 怎么判断当前连接走哪条路径

常用命令有:

1
2
3
4
5
6
7
8
# 查看设备状态和已经发生通信的连接信息
tailscale status

# 探测与某个设备之间的 Tailscale 连接
tailscale ping dev-server

# 检查当前网络的 UDP、NAT 和中继延迟等情况
tailscale netcheck

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
2
访问自己的服务器、电脑和 NAS → Tailscale
访问公网网站 → Clash 按规则代理或直连

但二者可能同时影响系统路由和 DNS。需要确认内网目标仍走 Tailscale,公网流量按预期进入 Clash,而且 IPv4 和 IPv6 都得到正确处理。使用 Tailscale 出口节点时,还要重新考虑公网流量的实际路径。

之前的排查中,Clash 能代理 IPv4,却没有完整接管公网 IPv6。开启 Tailscale 时使用的 DNS 能返回真实 IPv6 地址,应用选择 IPv6 后便从本地宽带直出。修复的是 Clash 的 IPv6 路由缺口,而不是关闭 Tailscale。

具体过程见:开启 Tailscale 后,Clash 出口为什么变成中国?一次 IPv6 绕过代理的排查与修复。

默认未使用出口节点时,Tailscale 主要处理 tailnet 及已配置的路由,不会自动将普通公网访问全部交给远端设备。不过,DNS 配置仍可能发生变化,所以“没有使用出口节点”和“完全不影响上网行为”也不是同一个概念。

10. 从一个最小场景开始使用

对于个人开发环境,可以先完成一个简单目标:让笔记本访问一台远端服务器。

  1. 在两台设备上安装官方 Tailscale 客户端,登录并加入同一个 tailnet。
  2. 在管理界面确认设备已获准加入,并检查访问策略。
  3. 用 tailscale status 和 tailscale ping 检查设备是否可达。
  4. 确认远端 SSH 或 Web 服务已经启动,并监听可达地址。
  5. 通过设备名或 Tailscale IP 访问实际服务。
  6. 如果传输慢,再检查是直连还是中继,以及双方网络条件。

有了这条最小可用路径,再根据需要增加子网路由器、出口节点或更细的访问策略,排查起来会更清楚。

Tailscale 带来的便利,是把原本分散的身份、公钥、地址变化、NAT 穿透和路由管理组合起来。使用时仍然需要分别确认三件事:设备能否连接、策略是否允许、应用是否正常提供服务。

参考资料

以下官方资料查阅于 2026 年 10 月,功能支持和具体行为应以所用版本为准。