Tailscale 排障与安全¶
一、这页讲什么¶
「连不上了」有五种完全不同的原因:设备没上线、打洞失败、路由没批准、DNS 解析不到、ACL 挡住。逐个试浪费很多时间。
这一页给出固定的排查顺序,以及一套默认收紧的安全约定。
读完能做到:用三条命令定位到具体哪一层出问题;按清单检查 tailnet 的安全面。
二、开始之前¶
| 项 | 内容 |
|---|---|
| 版本与日期 | Tailscale 1.9x;2026-10-21 核实 |
| 预计耗时 | 15 分钟 |
| 前置 | 会看 tailscale status 输出;见组网与直连 |
| 风险级别 | 低:以只读排查为主 |
三、动手做¶
1. 先看状态¶
$ tailscale status
100.x.y.z lab-server publieople@ linux active; direct 203.0.113.7:41641
100.x.a.b workstation publieople@ windows idle, tx 4.1 kB rx 2.2 kB
三件事一眼可读:设备是否在线、链路是 direct 还是 DERP、本机用的是哪个版本。
两端版本差太多时行为会有差异,排查前先对齐版本。
看到这个就算成:能说出目标设备在线与否、走的是直连还是中继。
2. 看网络状况¶
$ tailscale netcheck
* UDP: true
* IPv4: yes, 203.0.113.7:41641
* MappingVariesByDestIP: false
* Nearest DERP: Tokyo
* DERP latency: tok: 42ms, sfo: 130ms
UDP 为 false 说明出站 UDP 被封,直连会一直失败;MappingVariesByDestIP: true 表示处在对称 NAT 后面,打洞成功率低。
看到这个就算成:知道本机 UDP 是否可用、NAT 类型与最近中继。
3. 逐层定位¶
| 层 | 命令 | 判断 |
|---|---|---|
| 设备 | tailscale status |
目标是否 online |
| 链路 | tailscale ping <设备> |
出现 direct 或 via DERP |
| 端口 | curl -m 5 http://<设备>:<端口>/ |
连通、拒绝、超时分别是三种问题 |
| 路由 | ip route |
子网流量是否有对应条目 |
| 解析 | tailscale status --json 里的 DNSName |
名字与实际设备是否一致 |
看到这个就算成:能把问题归到五层里的某一层,而不是笼统地说网络不通。
4. 检查端口与防火墙¶
| 用途 | 端口 | 方向 |
|---|---|---|
| 直连打洞 | 41641/UDP | 出站(建议同时放行入站) |
| STUN 探测 | 3478/UDP | 出站 |
| 中继兜底 | 443/TCP | 出站 |
| 控制面 | 443/TCP | 出站 |
多数情况只需要出站可达。直连成功率低的网络里,可以在防火墙上放行入站 41641/UDP。
看到这个就算成:netcheck 的 UDP 为 true,且 ping 能看到 direct。
5. 处理密钥与登录¶
- 设备密钥到期后会显示需要重新认证,控制台可见到期时间;
- 长期设备在控制台关闭密钥到期,见设备、标签与 ACL;
- 大量部署用 auth key,避免逐台点浏览器登录;
- 离开实验室的设备及时移除,别留在清单里。
看到这个就算成:每台设备都有明确的归属与到期策略。
6. 安全自查清单¶
- 管理员数量收敛到需要的几个人;
- 服务器打上
tag:server,ACL 只放行必要端口; - 长期设备的密钥到期已关闭,其余保持默认;
- funnel 条目为零,或每个都有明确的关闭时间;
- 设备清单里没有陌生的、来历不明的条目;
- 控制台开了双因素认证。
看到这个就算成:六项都能给出明确答案,而不是「大概是吧」。
四、做完怎么确认¶
- 能按五层顺序定位一次真实故障。
netcheck与status的输出能解释清楚。- 安全清单过了一遍,发现的问题都有处理人。
- 知道哪些设备不该出现在 tailnet 里。
五、卡住了怎么排查¶
| 症状 | 多半是 | 先验证 | 处理 |
|---|---|---|---|
| 设备一直 offline | 客户端停了,或密钥过期 | $ tailscale status、控制台到期时间 |
重启服务;重新登录或关闭到期 |
| 延迟 200ms 以上且稳定 | 走的是中继 | $ tailscale ping |
修直连:放行 41641、换网络 |
| 延迟忽高忽低 | 链路抖动或中继切换 | 连续 $ tailscale ping |
检查本地网络;避免高峰 |
| 大包不通、小包通 | MTU 问题 | $ ping -M do -s 1400 <设备> |
调整上游 MTU;反馈给网络负责人 |
| 域名解析到旧地址 | 设备改名或重装 | $ tailscale status --json |
用新名字;清理旧设备 |
| 某端口时通时不通 | ACL 命中不稳定或服务重启 | 控制台 ACL 测试器 | 收紧规则;看服务日志 |
| 突然全部设备断连 | tailnet 级别变更(ACL、到期、账单) | 控制台变更记录与公告 | 回滚变更;联系管理员 |
六、为什么这样能成¶
分层排查能把猜测变成证据。 每一层都有独立命令,某层通过就可以排除这一层,剩下的范围迅速收窄。
中继是可用性兜底,速度不是中继的目标。 出现 via DERP 说明互通没问题,只是绕路,优化方向是打通直连。
ACL 与身份决定安全面。 组网工具本身加密传输,真正的风险来自「谁能进这个网」和「进来后能碰什么」。
七、边界与替代¶
- 不做网络质量监控:长期延迟与丢包要另外的监控手段,见监控与备份。
- 不替代安全审计:日志、告警与账号审计是独立工作。
- 别在故障时改 ACL:先定位再改,避免把排查线索一起改掉。
- 公开暴露一律走审批:funnel 不是内部工具,用完必须关。
八、官方资料¶
- 故障排查:https://tailscale.com/kb/1023/troubleshooting
- 防火墙端口:https://tailscale.com/kb/1082/firewall-ports
- 密钥到期:https://tailscale.com/kb/1028/key-expiry
- 命令参考:https://tailscale.com/kb/1080/cli
核实日期:2026-10-21。