跳转至

Tailscale 组网与直连

一、这页讲什么

要让两台在不同网络里的机器互相访问,常规做法是配公网 IP、端口映射或买一台跳板机。Tailscale 换了个做法:每台设备装客户端、登录同一个账号,之后凭设备名互相访问,跨 NAT 也能连。

读完能做到:在三类系统上装好客户端并加入 tailnet;用设备名 ping 通另一台机器;判断这条链路是直连还是经过中继。

二、开始之前

项 内容
版本与日期 Tailscale 1.9x;2026-10-21 核实
预计耗时 20 分钟
前置 有实验室 tailnet 的邀请或账号;机器能出网
风险级别 低:只改本机组网配置

三、动手做

1. 装客户端

$ curl -fsSL https://tailscale.com/install.sh | sh
Installing Tailscale for debian bookworm, using method apt
...
Installation complete! Log in to start using Tailscale by running:

tailscaled

Windows 与 macOS 用官方下载页的安装包,手机用应用商店。Windows 安装后任务栏会出现图标。

看到这个就算成:tailscale version 打印出版本号。

2. 登录并确认设备上线

$ sudo tailscale up
To authenticate, visit:

  https://login.tailscale.com/a/xxxxxxxx

浏览器打开链接,用实验室账号登录。回到终端后查状态:

$ tailscale status
100.x.y.z    lab-server    publieople@    linux    idle, tx 1.2 kB rx 3.4 kB

看到这个就算成:status 里能看到本机与至少一台其他设备,后面跟着账号。

3. 用设备名互相访问

$ ping lab-server
PING lab-server (100.x.y.z) 56(84) bytes of data.
64 bytes from lab-server (100.x.y.z): icmp_seq=1 ttl=64 time=2.1 ms

设备名由控制台里的机器名决定,可以通过 --hostname 或控制台重命名。名字解析靠 MagicDNS,需要在控制台的 DNS 页开启。

看到这个就算成:名字能解析成 tailnet 地址并且 ping 通。解析不到时先确认 MagicDNS 是否已开启。

4. 判断直连还是中继

$ tailscale ping lab-server
pong from lab-server (100.x.y.z) via DERP(tok) in 42ms
pong from lab-server (100.x.y.z) via 203.0.113.7:41641 in 8ms

第一行表示流量经过中继(DERP),第二行表示两端打通了 UDP,直接互联。连续 ping 几次,通常前一两包走中继、后面转直连。

再看本机网络状况:

$ tailscale netcheck
* UDP: true
* IPv4: yes, 203.0.113.7:41641
* MappingVariesByDestIP: false
* Nearest DERP: Tokyo

看到这个就算成:能说出这台机器当前是直连还是中继,以及 UDP 是否可用。

5. 提高直连成功率

  • 放行出站 UDP 41641(多数家用路由器默认不拦出站);
  • 不要禁用 IPv6,双栈更容易打洞;
  • 两端都处在对称 NAT 后面时,打洞可能一直失败,中继是正常退路。

看到这个就算成:netcheck 的 UDP 为 true,tailscale ping 出现 direct 字样。

6. 打开 Tailscale SSH(可选)

$ sudo tailscale set --ssh
(成功时没有输出)

开启后从另一台已登录设备执行 ssh <设备名>,走 tailnet 身份认证,不需要拷贝密钥。谁能连哪台机器由 ACL 决定,配置方法见设备、标签与 ACL。

看到这个就算成:tailscale status 中该设备显示 SSH 可用,跨机 ssh <设备名> 直接进。

7. 不需要 MagicDNS 时关掉

$ sudo tailscale set --accept-dns=false
(成功时没有输出)

这条只影响本机是否把 DNS 交给 Tailscale,不影响其他设备。

看到这个就算成:本机 DNS 配置里不再出现 MagicDNS 的固定地址。

四、做完怎么确认

  1. tailscale status 里目标设备在线。
  2. 两台机器用设备名互相 ping 通。
  3. 能说出当前链路是直连还是中继。
  4. 清楚本机 DNS 是否交给 Tailscale。

五、卡住了怎么排查

症状 多半是 先验证 处理
设备显示 offline 客户端没启动,或长时间没联网 $ tailscale status、看最后在线时间 启动服务;重新登录
名字解析不到 MagicDNS 未开启,或本机关了 accept-dns 控制台 DNS 页、$ tailscale set --accept-dns 开启 MagicDNS;恢复 accept-dns
一直走中继,延迟高 打洞失败 $ tailscale netcheck 看 UDP 与映射类型 放行 UDP 41641;换网络试
ping 通但端口连不上 对端服务只监听本机回环 对端 $ ss -tlnp 服务改监听 0.0.0.0;或用 serve 暴露
ssh 免密进不去 未开 SSH,或 ACL 没放行 $ tailscale status、控制台 ACL --ssh;补 ACL 规则
登录链接打不开 浏览器代理拦截回调 换浏览器或无代理网络 用 auth key 安装后再 tailscale up --auth-key
设备名重复 多台机器用了同一个主机名 $ tailscale status 看同名条目 用 --hostname 改成唯一名字

六、为什么这样能成

控制面只发密钥和地址,流量点对点走。 设备上线时从控制面拿到公钥与地址,之后两端用 WireGuard 直接通信,数据不经过 Tailscale 的服务器。

打洞失败时有中继兜底。 DERP 是专门为中继搭的转发网络,流量仍然端到端加密。看到 via DERP 说明打洞没成功,速度会慢于直连但可用。

MagicDNS 用一个固定地址做解析入口。 客户端把 MagicDNS 的固定地址加进 DNS 列表,名字查询发到这里,由控制面返回 tailnet 内部地址。

七、边界与替代

  • 不负责全流量出口:让所有流量从某台设备出去要用出口节点,见子网路由与出口节点。
  • 不替代堡垒机审计:Tailscale 提供身份与 ACL,操作日志与录屏需要另外的审计手段。
  • 同一台机器别装多套组网工具:多个虚拟网卡与 DNS 接管容易互相打架。
  • 别把 tailnet 当完全可信:加入的设备都能发起连接,权限要靠 ACL 收紧。

八、官方资料

核实日期:2026-10-21。