Tailscale 入门:原理、使用方法与适用场景
AI 参与说明(Agent:Codex):本文由 Codex 协助检索 Tailscale 官方资料、整理示例与校对。资料通过 Context7 及官方原始页面核对,整理日期为 2026-10-21。执行入口为 Codex Desktop;模型完整标识与 reasoning effort 未取得任务级运行记录。
Tailscale 可以把分散在家里、办公室和云上的设备连接成一个受访问策略控制的私有网络。人在外面时,仍然可以用设备名或 Tailscale IP 访问家里的开发机、NAS 或服务器,通常不必手动配置公网 IP 和路由器端口映射。
最容易上手的方式是:先让两台设备加入同一个 tailnet,连通一个已有的 SSH 或 Web 服务。需要访问没装客户端的局域网设备时,再配置 subnet router;需要把上网流量送到另一台设备出口时,再使用 exit node。
先认识几个术语
| 英文术语 | 中文名称 | 简要解释 |
|---|---|---|
| Tailscale | Tailscale | 负责连接设备、协调连接并管理访问权限的网络产品 |
| tailnet | Tailscale 私有网络 | 由加入其中的设备、用户及访问策略组成的网络 |
| WireGuard | WireGuard | Tailscale 用来加密设备间通信的 VPN 协议 |
| control plane | 控制平面 | 处理设备认证、连接协调与访问策略等管理工作 |
| data plane | 数据平面 | 实际传输设备之间的数据包 |
| NAT traversal | NAT 穿透 | 穿越路由器的地址转换,让不同网络的设备建立直连 |
| DERP | DERP 中继服务 | 在设备无法直连时转发已经加密的数据包 |
| MagicDNS | MagicDNS | 让设备通过名称找到同一 tailnet 中的其他设备 |
| subnet router | 子网路由器 | 把 tailnet 与指定的局域网或私有子网连接起来 |
| exit node | 出口节点 | 为选用它的设备转发互联网流量 |
Tailscale 是什么
Tailscale 常被称为基于 WireGuard 的 mesh VPN。它在设备原有的网络之上建立连接,让不同地点的设备通过各自的 Tailscale 地址通信,同时把设备认证、连接发现和访问控制整合起来。
例如,笔记本连接手机热点,家里的 Linux 服务器位于家用路由器后面。两者加入同一个 tailnet 后,可以尝试直接连接;即使网络条件不允许直连,也可以通过 DERP 转发加密通信。你不需要先把服务器的 SSH 端口暴露到公网。Tailscale encryption
这里的“像在同一个私有网络里”主要指按 IP 或名称访问服务。Tailscale 不会替你安装 SSH 服务、启动数据库,或配置应用账号。设备能连上之后,访问哪个端口、应用是否允许登录,仍由相应配置决定。
control plane 与 data plane 怎样分工
The control plane coordinates devices and access policies. The data plane carries device traffic encrypted with WireGuard. Tailscale encryption
flowchart TD
C["Tailscale control plane"]
A["笔记本"]
B["家中服务器"]
D["DERP"]
C -.->|认证与连接协调| A
C -.->|认证与连接协调| B
A <-->|WireGuard 直连| B
A <-->|已加密数据包| D
D <-->|已加密数据包| B
图中的直连路径和 DERP 路径是连接可能采用的不同路径。设备建立连接时可以先经过 DERP,再尝试通过 NAT traversal 建立直连;无法直连时继续使用中继。因此,第一次看到中继并不代表连接之后也一定经过中继。
DERP 只转发已经经过 WireGuard 加密的数据包,无法读取其中的明文。它与负责设备协调的 control plane 承担不同职责。中继会影响延迟和可用带宽,实际体验还取决于两端网络,不能保证“装好就能跑满宽带”。连接类型与路径验证
两台设备怎样开始使用
下面以一台笔记本和一台 Linux 服务器为例。两端需要能够访问 Tailscale 服务;服务器上的 SSH 或 Web 服务应已经可以正常使用。个人试用时,可以先在两端登录同一账号,让它们加入同一个 tailnet;团队使用应给成员各自的账号并分配权限。
安装客户端并登录
Windows、macOS、iOS 和 Android 可以从 官方下载页安装对应客户端,启动后按提示登录。macOS 若要使用下文的命令,还需要按 CLI 文档配置命令行入口。
Linux 可以使用官方安装脚本,再连接并认证:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
按终端提示打开认证链接。完成后,在客户端或 Machines 管理页面确认两台设备都已出现,并处于在线状态。受管理的 tailnet 如果启用了设备审批,还需要完成相应审批。Linux 安装示例
找到设备地址并验证连接
在 Linux 服务器执行:
tailscale ip -4
tailscale status
第一条返回本机的 Tailscale IPv4 地址,例如 100.101.102.103;第二条用于查看设备及连接状态。示例地址仅用于说明,实际操作应替换成自己的设备地址。CLI 文档
然后在笔记本上执行:
tailscale ping 100.101.102.103
返回 pong 表示 Tailscale 连接测试成功。输出还会显示经过 DERP 还是直连地址。此测试确认的是 Tailscale 连接,SSH 或 HTTP 能否使用还要继续验证实际服务。路径检查说明
访问 SSH 或 Web 服务
假设 Linux 服务器上已经运行普通 SSH 服务,且存在 ubuntu 用户:
ssh ubuntu@100.101.102.103
把 ubuntu 替换成实际账号,继续使用原来的 SSH 密钥或其他认证方式。这是通过 Tailscale 网络连接现有 SSH 服务;Tailscale SSH是另一个需要额外启用并配置策略的功能。
如果已有 Web 服务在服务器的 Tailscale 地址或合适的网络接口上监听 8000 端口,可以在笔记本浏览器中打开:
http://100.101.102.103:8000
当服务只监听 127.0.0.1 时,远端设备不能直接通过 Tailscale IP 访问它。应让服务监听适当的接口,或另行配置代理;调整监听范围后也要核对主机防火墙和应用认证。
用 MagicDNS 代替记 IP
启用 MagicDNS 后,设备可以通过名称相互访问。例如把服务器命名为 home-server,就可以使用:
tailscale ping home-server
ssh ubuntu@home-server
可以在管理控制台的 DNS 页面确认 MagicDNS 状态。它负责名称解析,不会改变应用端口、访问策略或认证方式。MagicDNS
设备互联 subnet router 与 exit node 怎样选
| 目标 | 使用方式 | 例子 |
|---|---|---|
| 访问已经安装 Tailscale 的设备 | 直接使用设备的 Tailscale IP 或 MagicDNS 名称 | 连接开发机的 SSH |
| 访问没有安装 Tailscale 的内网设备 | 配置 subnet router,发布指定子网的路由 | 访问家里 192.168.50.20 上的 NAS |
| 让互联网访问从指定设备所在网络出去 | 配置并选用 exit node | 出差时通过家中的网络出口上网 |
By default, Tailscale does not route your public internet traffic through another device. An exit node must be configured and selected for that purpose. 因此,只为访问家中服务器而安装 Tailscale,不需要顺带设置 exit node。Exit nodes
用 subnet router 访问没装客户端的设备
假设 NAS 的地址是 192.168.50.20,它不能安装 Tailscale;同一局域网中有一台能访问 NAS 的 Linux 小主机,可以把这台主机配置成 subnet router。远端笔记本由此获得访问 192.168.50.0/24 的路径。Subnet routers
在已加入 tailnet 的 Linux 小主机上,先启用 IP forwarding。以下适用于使用 /etc/sysctl.d/ 的常见 Linux 发行版;如果已有相关配置,应合并设置:
printf '%s\n' \
'net.ipv4.ip_forward = 1' \
'net.ipv6.conf.all.forwarding = 1' \
| sudo tee /etc/sysctl.d/99-tailscale-forwarding.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale-forwarding.conf
sudo tailscale set --advertise-routes=192.168.50.0/24
把网段换成实际需要访问的子网。接着在 Machines 页面为该设备批准发布的 subnet routes;已有 autoApprovers 授权时可以自动批准。发布路由、批准路由和授权访问是不同环节:访问策略还必须允许发起方连接目标子网及服务端口。
在远端 Linux 客户端上,显式接受路由:
sudo tailscale set --accept-routes
Windows、macOS、iOS 和 Android 的常见客户端默认接受 subnet routes,仍应检查实际客户端配置。完成后,从远端访问 NAS 原来的局域网地址,例如 http://192.168.50.20:5000,其中协议与端口应以实际服务为准。配置与客户端路由说明
subnet router 需要持续在线,并能访问目标设备。WireGuard 加密覆盖到 subnet router 的连接;从它到 NAS 的这段网络是否加密,取决于 HTTPS、SSH 等应用协议。远端所在局域网与家中子网使用相同地址段时,还可能发生路由冲突,不能只凭“已经批准路由”判断整个路径可用。
用 exit node 指定上网出口
exit node 转发选用它的设备的互联网流量。选择之前,先确认这台设备有稳定的网络、足够的带宽,并且你信任它的运营者。
在准备作为 exit node 的 Linux 设备上,先按上一节启用 IP forwarding,再执行:
sudo tailscale set --advertise-exit-node
管理员在 Machines 页面允许该设备作为 exit node 后,客户端才可以选用它;配置了相应 autoApprovers 时可自动批准。图形客户端可以在 Exit Nodes 中选择设备,Linux 客户端可以使用:
sudo tailscale set --exit-node=home-server
这里的 home-server 应替换成实际 exit node 的名称或 Tailscale IP。如果还需要访问客户端当前所在的局域网,显式允许 LAN access:
sudo tailscale set --exit-node-allow-lan-access=true
停止使用该出口:
sudo tailscale set --exit-node=
如果 tailnet 已改成限制较严的访问策略,还要授权相应用户访问 autogroup:internet;仅允许访问 exit node 本身不等于允许通过它上网。exit node 到互联网目标之间仍应使用 HTTPS 等协议。它改变的是流量出口,不提供匿名保证,也不保证网络访问速度。Exit nodes · CLI 配置选项
哪些场景适合使用
| 场景 | 可以怎样使用 | 需要考虑的条件 |
|---|---|---|
| 远程开发 | 从笔记本 SSH 到开发机,访问远程 IDE 或测试服务 | 目标服务已运行,账号和策略允许连接 |
| NAS 与家庭自托管 | 访问文件服务、相册、家庭管理面板 | 优先在目标设备装客户端,无法安装时再用 subnet router |
| 小团队运维 | 按成员身份、设备标签和服务端口分配权限 | 每人独立账号,及时撤销离职成员和丢失设备的访问 |
| 跨地点或多云设备连接 | 用 Tailscale 地址连接服务器;按需要接入私有子网 | 关注路由范围、带宽和网段冲突 |
| 固定互联网出口 | 让指定客户端通过家中或办公室的 exit node 上网 | 出口设备持续在线,上传带宽与延迟能满足需求 |
Tailscale 尤其适合“这些设备分散在不同网络,但只需要一部分受信任的人访问”的需求。对于面向所有访客的公开网站,通常仍需要公开的 HTTPS 入口;让访客加入 tailnet 会改变产品的访问方式。
如果需求依赖局域网广播发现,也应先核对协议和发现机制,不能把按 IP 可达等同于完整复制原来的局域网体验。对时延、吞吐或网络隔离有严格要求时,应该在实际网络中测量和核验。
连不上时怎样排查
按“设备在线 → Tailscale 路径 → 名称解析 → 应用端口 → 访问策略”的顺序检查,通常比反复重装客户端更容易缩小范围。
| 现象 | 优先检查 |
|---|---|
| 管理页看不到目标设备或显示离线 | 是否登录同一 tailnet、设备是否在线、认证或密钥是否到期、是否等待审批 |
tailscale ping 一直不通 | 当前网络是否允许 Tailscale 工作;使用 tailscale status 和 tailscale netcheck 查看状态 |
| IP 可以访问,名称不行 | MagicDNS、客户端 DNS 设置和设备名称 |
tailscale ping 成功,SSH 或 Web 不通 | 服务是否启动、是否仅监听回环地址、实际端口、主机防火墙和 tailnet 访问策略 |
| subnet router 在线,但 NAS 不通 | IP forwarding、路由批准、客户端接受路由、目标子网授权、NAS 服务及网段冲突 |
| 连接成功但速度慢 | tailscale ping 显示的路径、两端网络质量及出口设备上传带宽 |
| 选了 exit node 后上不了网 | 出口设备联网与转发设置、管理员批准、autogroup:internet 授权及 DNS |
tailscale netcheck 用来检查网络条件,不能代替对具体应用的验证。最终通过标准应是实际 SSH 登录成功、Web 页面能打开,或目标应用完成一次操作,而不只是管理页上出现设备。CLI 诊断命令
把连接权限限制到实际需要
设备加入 tailnet 后,还应检查当前访问策略。不要从“采用 zero trust 理念”推断所有新设备都会自动彼此隔离。Tailscale 支持通过 grants 和 ACLs 表达访问控制,当前官方推荐新配置使用 grants;授权范围应按成员、设备和资源的实际用途确定。Access control
个人使用可以先连通两台自己的设备,再收紧权限;团队则应在添加成员和服务时明确谁能访问哪个目标及端口。保留应用认证,及时更新系统,并在设备丢失或成员退出时撤销访问。这些措施与传输加密解决的是不同问题。
参考资料与关联阅读
- Tailscale encryption:control plane、data plane 与 DERP 的加密边界。
- Connection types:连接路径与
tailscale ping的输出。 - Tailscale CLI:安装后的连接、地址查询、配置与诊断命令。
- MagicDNS:通过设备名称访问。
- Subnet routers:IP forwarding、发布和批准路由、客户端接受路由。
- Exit nodes:出口设备配置、客户端选择与访问授权。
- Access control:grants、ACLs 与权限管理。
- SSH 常用命令指南:SSH 密钥、连接命令和客户端配置。
- Linux 文档导航:相关系统与网络资料。