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. 登录并确认设备上线¶
浏览器打开链接,用实验室账号登录。回到终端后查状态:
看到这个就算成: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(可选)¶
开启后从另一台已登录设备执行 ssh <设备名>,走 tailnet 身份认证,不需要拷贝密钥。谁能连哪台机器由 ACL 决定,配置方法见设备、标签与 ACL。
看到这个就算成:tailscale status 中该设备显示 SSH 可用,跨机 ssh <设备名> 直接进。
7. 不需要 MagicDNS 时关掉¶
这条只影响本机是否把 DNS 交给 Tailscale,不影响其他设备。
看到这个就算成:本机 DNS 配置里不再出现 MagicDNS 的固定地址。
四、做完怎么确认¶
tailscale status里目标设备在线。- 两台机器用设备名互相 ping 通。
- 能说出当前链路是直连还是中继。
- 清楚本机 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 收紧。
八、官方资料¶
- 安装:https://tailscale.com/download
- 快速开始:https://tailscale.com/kb/1017/install
- 命令参考:https://tailscale.com/kb/1080/cli
- MagicDNS:https://tailscale.com/kb/1081/magicdns
- 直连与中继原理:https://tailscale.com/kb/1236/how-tailscale-works
核实日期:2026-10-21。