Tailscale 工作原理深度解析:从 WireGuard 到 NAT 穿透
概述
Tailscale 是基于 WireGuard 协议构建的零信任网状 VPN 网络。它在 WireGuard 的密码学基础之上,封装了自动化 NAT 穿透、DERP 中继、MagicDNS、ACL 访问控制和协调控制平面,使得跨 NAT 的点对点加密连接变得”开箱即用”。本报告深入分析 Tailscale 的核心工作原理,特别聚焦于所有设备都位于 NAT 后面时如何实现连接。
一、WireGuard 协议基础
1.1 核心设计:Cryptokey Routing
WireGuard 的核心概念是 Cryptokey Routing(密钥路由)——将公钥与一组允许通过隧道的 IP 地址关联。每个网络接口拥有一个私钥和一个对等节点列表,每个 peer 拥有一个公钥(WireGuard 官网)。
AllowedIPs 同时扮演路由表(发送方向)和访问控制列表(接收方向)的双重角色(Netmaker),巧妙地将加密、路由和访问控制统一到单一机制中。
1.2 密码学原语
WireGuard 采用”密码学固执”的设计哲学——不提供算法协商灵活性。使用的原语包括 Curve25519(ECDH)、ChaCha20-Poly1305(认证加密)、BLAKE2s(哈希)、HKDF(密钥派生)。握手使用 Noise 协议框架的 Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s 模式,仅需 1-RTT 即可完成(WireGuard 白皮书)。
| 原语 | 用途 |
|---|---|
| Curve25519 | 椭圆曲线 Diffie-Hellman 密钥交换 |
| ChaCha20 | 对称流加密 |
| Poly1305 | 消息认证(完整性验证) |
| BLAKE2s | 密码学哈希 |
| HKDF | 从 ECDH 结果派生密钥 |
1.3 安全特性
- 前向保密(Forward Secrecy):会话密钥从临时密钥派生,握手每隔几分钟自动重新进行密钥轮换
- 抗重放攻击:第一条消息中包含 TAI64N 时间戳,服务端追踪最大时间戳
- 抗 DoS 攻击:第一条握手消息需要认证,服务器不为未认证消息分配状态
- 形式化验证:2019 年 INRIA 使用 CryptoVerif 发布了机器验证证明
1.4 与传统 VPN 的关键差异
| 维度 | WireGuard | OpenVPN | IPSec |
|---|---|---|---|
| 代码量 | ~4,000 行 | ~600,000+ 行 | 庞大 |
| 运行空间 | 内核空间 | 用户空间 | 内核/用户空间 |
| 性能 | 约为 OpenVPN 3x 吞吐量 | 因上下文切换较慢 | 中等 |
| 配置复杂度 | 简洁 | 灵活但复杂 | 非常复杂 |
| 网络切换 | 无缝漫游 | 可能断连 | 可能断连 |
二、Tailscale 架构:控制平面与数据平面分离
2.1 混合集中-分布式模型
Tailscale 将网络操作分为两个平面(Tailscale Docs):
- 控制平面(Control Plane):通过协调服务器(
login.tailscale.com)运行,负责认证、密钥分发、ACL 编译、DNS 配置。几乎不传输实际数据——本质上是一个”公钥的共享投递箱” - 数据平面(Data Plane):在每个设备上运行,采用网状(mesh)拓扑,使用 WireGuard 端到端加密处理实际数据传输
这种设计的关键优势是弹性:即使协调服务器宕机,已建立的连接继续工作,设备密钥存储在本地,网络策略在本地缓存(Tailscale)。
协调服务器的核心职责:
- 设备发现:管理所有 tailnet 设备的注册和发现
- 密钥分发:收集和分发设备公钥
- 认证:通过 OAuth/SSO 身份提供商验证用户身份
- 策略执行:编译并分发 ACL 访问控制策略到各节点
- NAT 穿越协助:管理端点信息,选择最优 DERP 区域
┌─────────────────────────────────────────────────────────────┐
│ Tailscale 整体架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────┐ Noise IK / TLS ┌────────────┐ │
│ │ Node A │◄──────────────────────► │ 协调服务器 │ │
│ │ (tailscaled) │ 控制平面 (公钥、ACL、 │ (login. │ │
│ │ │ DNS、网络映射) │ tailscale │ │
│ │ ┌───────────┐ │ │ .com) │ │
│ │ │LocalBackend│ │ └─────┬──────┘ │
│ │ │ wgengine │ │ │ │
│ │ │ magicsock │ │ Noise IK / TLS ┌─────┴──────┐ │
│ │ │ netstack │ │ │ Node B │ │
│ │ └───────────┘ │ │(tailscaled)│ │
│ └───────┬───────┘ └────────────┘ │
│ │ 数据平面 ▲ │
│ │ (WireGuard 端到端加密) │ │
│ └────────────────────────────────────────┘ │
│ 直连 (UDP) 或 DERP 中继 │
└─────────────────────────────────────────────────────────────┘
2.2 密钥层次结构
Tailscale 使用分层密钥架构(Tailscale Key Management):
- Machine Key:Curve25519 机器私钥,用于与协调服务器的 ECDH 通信
- Node Key:登录时生成的独立 Curve25519 密钥,用于 WireGuard 对等节点配置,默认 180 天过期
- Control Key:控制平面加密通信,使用 Noise IK 协议(X25519 + ChaCha20-Poly1305 + BLAKE2s),通过 WebSocket 升级建立持久加密通道
- Tailnet Lock Key:Ed25519 签名密钥,用于 Tailnet Lock 机制
核心安全原则:私钥永远不会离开其所在节点。 协调服务器仅收集和交换公钥,因此即使协调服务器被入侵,攻击者也无法解密设备间的流量。
2.3 Tailnet Lock:无需信任 Tailscale 基础设施
Tailnet Lock 的核心思想:即使不信任 Tailscale 的基础设施,也能安全使用 Tailscale(Tailscale Blog)。
启用后,新节点的公钥必须由受信任的 Ed25519 签名密钥签名后,才会被其他节点接受。本地管理的 TKA(Tailnet Key Authority)确保控制平面无法在未被检测到的情况下插入未授权节点(Tailscale)。
关键设计:
- 签名密钥由本地管理,控制平面从不看到或存储签名密钥
- 状态变更摘要使用 BLAKE2 生成(类似 Git 的 commit hash)
- 建议每 tailnet 最多 20 个签名节点,每年轮换一次 Tailnet Lock 密钥
- 禁用 Tailnet Lock 需要使用 disablement secret,防止被入侵的控制平面绕过
三、NAT 穿透全流程(核心重点)
这是本报告的核心章节。当所有设备都在 NAT 后面时,Tailscale 通过一系列精巧的技术组合来建立点对点连接。
3.1 NAT 类型与挑战
NAT 设备按映射行为分为两大类(Tailscale Blog):
Easy NAT(Endpoint-Independent Mapping):
- Full Cone、Restricted Cone、Port Restricted Cone NAT
- 同一内部 IP:Port 始终映射到相同的外部 IP:Port
- STUN 发现的地址可靠,UDP 打洞通常可行
- 大多数家用路由器属于此类
Hard NAT(Endpoint-Dependent Mapping / Symmetric NAT):
- 每个到不同目标 IP:Port 的请求产生不同的外部映射
- STUN 发现的地址对其他 peer 无效
- 大多数企业防火墙、CGNAT、云 NAT 网关(AWS/Azure/GCP)属于此类
关键洞察:只要 NAT 的映射行为是 Endpoint-Independent 的,UDP 打洞就能成功。 因为 STUN 服务器告诉我们的外部 IP:Port 对所有目的地都一致,peer 就知道应该向哪里发送数据包。
3.2 STUN:发现公网地址
STUN(Session Traversal Utilities for NAT)的原理非常简单:当 NAT 后面的客户端与互联网服务器通信时,服务器看到的是 NAT 设备创建的公网 IP:Port,服务器将这个地址告诉客户端。
Tailscale 客户端在 UDP 3478 端口向所有 DERP 服务器发送 STUN 请求(Tailscale Docs)。核心判断字段 MappingVariesByDestIP:
false→ Easy NAT,标准 UDP 打洞可行true→ Hard NAT(Symmetric NAT),打洞极其困难
tailscale netcheck 命令可以查看完整的网络连接信息,包括 UDP 可达性、公网 IPv4/IPv6 地址、NAT 映射类型、端口映射协议支持情况。
3.3 UDP 打洞详解
UDP 打洞是建立直连的核心技术。
核心问题:有状态防火墙的死锁
对于 UDP,防火墙规则很简单:只有在之前看到过匹配的出站数据包时,才允许入站 UDP 数据包。这产生了根本性的死锁:双方都必须先发送数据包,但双方又都无法先发送。
解决方案:同时发送(David Anderson, Tailscale Blog)
David Anderson 的关键洞察:
数据包之间不需要有任何关联关系,只要 IP 和端口对得上就行。只要有某个数据包以正确的源地址和目的地址流出,任何看起来像是回复的数据包都会被放行,即使对方从未收到你的数据包!
步骤详解:
- STUN 发现:双方通过 STUN 发现自己的公网 IP:Port
- 协调服务器同步:双方将端点信息上报给协调服务器,再分发给对方
- 同时发送(关键技巧):
- 设备 A 向设备 B 通过 STUN 发现的公网 IP:Port 发送 UDP 包
- 设备 B 向设备 A 通过 STUN 发现的公网 IP:Port 发送 UDP 包
- 两个操作同时进行
- 防火墙打开:双方的防火墙都已经看到了到对方地址的出站流量,回传流量在两侧都被接受
- 保活维持:定期发送 keepalive 包防止 NAT 映射过期(常见超时 30 秒)
多层防火墙的可扩展性:不需要担心两个 peer 之间有多少层防火墙——只要它们是有状态的并允许出站连接,同时发送技术就能穿过任意层数。逻辑只需实现一次,到处都能工作。
约 94% 的 NAT 配置下 UDP 打洞可以成功。
3.4 生日悖论穿透 Symmetric NAT
当遇到 Symmetric NAT(Hard NAT)时,标准 UDP 打洞无法工作。Tailscale 应用生日悖论的数学原理来提高穿透成功率(Tailscale Blog)。
一侧 Hard NAT + 一侧 Easy NAT:
- Hard NAT 一侧打开 256 个端口(通过 256 个 socket 发送数据包)
- Easy NAT 一侧随机探测目标端口
- 以 100 端口/秒探测,约 2 秒即有 50% 成功概率,20 秒内几乎 100%
- David Anderson 开源了概率计算器
双侧 Hard NAT:
- 搜索空间从 ~65,000 膨胀到 ~65,000^2 = ~42 亿
- 需要 170,000 个探测包才能达到 99.9% 成功率
- 以 100 包/秒速率,需要 ~28 分钟
- 会耗尽路由器的整个会话表(如 Juniper SRX 300 最多 64,000 个会话)
- 还会触发入侵检测系统(IDS)告警
- 结论:两个 Hard NAT 后的设备几乎总需要中继
3.5 DERP:加密中继服务器
DERP(Designated Encrypted Relay for Packets)是 Tailscale 创建的中继协议(Tailscale)。Tailscale 没有使用标准的 TURN 协议,因为”TURN 不是一个特别友好的协议,而且互联网上没有开放的 TURN 服务器”。
核心特性:
- 运行在 HTTPS(TCP 443) 上——即使 UDP 被完全封锁也能工作
- 双重用途:
- 数据中继:NAT 穿透失败时的回退通道
- 穿透辅助:帮助升级到 P2P 的侧信道(传递 DISCO 发现消息)
- 不解密流量:DERP 盲目转发已加密的 WireGuard 包,使用 WireGuard 公钥(而非 IP 地址)寻址
- 使用 TCP 的代价:TCP 握手、缓冲区、丢包重传带来额外延迟,存在队头阻塞问题
全球基础设施(截至 2025 年底):
- 28 个 DERP 区域,每区域至少 3 个节点
- 双栈(IPv4+IPv6),可在 IPv4-only 和 IPv6-only 设备间中继
- 区域内节点互相 mesh 连接,数据包只转发一跳
- 区域之间没有路由——降低成本,避免使用云负载均衡器
- 每个客户端根据延迟选择 Home DERP 服务器
每个 DERP 服务器提供三项服务:
| 服务 | 协议 | 端口 |
|---|---|---|
| DERP 中继 | HTTPS (TCP) | 443 |
| 强制门户检测 | HTTP (TCP) | 80 |
| STUN | UDP | 3478 |
3.6 连接升级路径:“先连接,再优化”
Tailscale 与传统 ICE 实现的关键区别在于其连接升级策略。ICE 规范将协议构建为”探测阶段”后跟”通信阶段”,但 Tailscale 认为没必要严格分开(Tailscale Blog)。
- 所有连接立即通过 DERP 开始——连接几乎瞬时建立,零延迟启动
- 路径发现并行运行:收集所有候选端点,通过 DISCO 协议探测
- 通常几秒内升级:找到更优路线后透明切换为直连
- 如果直连失败:流量继续通过 DERP 流动
- 故障回退与重新发现:检测到路径失败时回退到 DERP,重新启动路径发现
从用户角度,连接永远不会失败——总有一条路径可用。内部直连成功率超过 90%。
3.7 DISCO 协议:认证对等发现
DISCO(Discovery Protocol)是 Tailscale 自定义的 NAT 穿透和路径验证协议,运行在 UDP 之上,使用每节点的 disco 密钥进行认证(Go Packages)。
核心消息类型:
| 消息类型 | 用途 |
|---|---|
| CallMeMaybe | 仅通过 DERP 发送,请求接收方尝试打开一条回到发送方的 magicsock 路径 |
| CallMeMaybeVia | 类似 CallMeMaybe,但候选路径通过中间 relay 提供,需要 3 次握手 |
| Ping | 探测路径可达性和延迟,包含发送方的 WireGuard 公钥 |
| Pong | Ping 回复,包含发送方的源 IP:Port(类似 STUN 响应) |
路径选择:收到 Pong 回复后,基于往返延迟(RTT)通过 betterAddr() 函数选择最佳地址。直连路径优先于 CallMeMaybeVia 路径。
3.8 MagicSock:自适应传输层
magicsock 包实现了能在使用中动态切换通信路径的 socket(Go Packages):
- WireGuard 和 DISCO 共享单个 UDP socket——没有端口冲突
magicsock.Conn管理多个 UDP socket,维护到 DERP 中继服务器的连接,追踪 peer 端点- 作为 WireGuard 的 bind 层,拦截和路由所有 WireGuard 流量
- 从 v0.100.0 开始,基于实际延迟测量选择最优路径,而非硬编码优先级
3.9 端口映射协议
Tailscale 的 portmapper 包支持三种端口映射协议(Go Packages):
- UPnP:最广泛支持但最复杂,历史上安全漏洞最多
- NAT-PMP:只做端口转发,实现极简
- PCP:NAT-PMP 的继任者,功能更丰富
不幸的是,很多设备只有一个”UPnP”复选框同时切换三种协议。担心 UPnP 安全性的用户最终会禁用完全安全的替代方案。企业防火墙和云 NAT 几乎不支持这些协议。
3.10 Peer Relays:高性能中继(2025-2026)
2025 年 10 月推出,2026 年 2 月正式 GA(Tailscale Blog):
- 基于 UDP(而非 DERP 的 TCP),使用原生 WireGuard UDP
- 性能接近直连,比 DERP 高出数个数量级
- 用户自管,没有 DERP 的速率限制和公平使用策略
- 每用户免费 2 个 peer relay
- 需要 Tailscale v1.86+
连接优先级:直连 > Peer Relay > DERP
典型应用场景:印度 ISP 由于 IPv4 稀缺大规模采用 CGNAT,通常使用 Symmetric NAT,Peer Relay 提供了比 DERP 显著更好的体验。
四、连接建立全流程
将所有技术串联,Tailscale 的完整连接建立流程如下:
┌──────────────────────────────────────────────────────────────┐
│ Tailscale 连接建立全流程 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. 启动阶段 │
│ ├─ STUN 探测:向所有 DERP 服务器发 STUN 请求 (UDP 3478) │
│ ├─ 发现公网 IP:Port │
│ ├─ 判断 MappingVariesByDestIP (Easy/Hard NAT) │
│ ├─ 探测端口映射协议 (UPnP/NAT-PMP/PCP) │
│ └─ 选择 Home DERP 服务器 │
│ │
│ 2. 连接初始化 │
│ ├─ 通过 DERP 立即建立连接(零延迟启动) │
│ └─ 开始传输数据(通过 DERP 中继) │
│ │
│ 3. 路径发现(并行运行) │
│ ├─ 收集候选端点 (LAN/STUN/端口映射/DERP) │
│ ├─ 通过 DERP 发送 CallMeMaybe │
│ ├─ 向所有候选端点发送 DISCO Ping │
│ ├─ 收集 Pong 回复,测量 RTT │
│ └─ 同时进行 UDP 打洞尝试 │
│ │
│ 4. 路径升级 │
│ ├─ Easy+Easy: 标准 UDP 打洞 → 秒级成功 │
│ ├─ Easy+Hard: 生日悖论探测 → 数秒成功 │
│ ├─ Hard+Hard: 极难成功 → 保持 DERP / Peer Relay │
│ └─ 选择最低延迟路径,透明切换 │
│ │
│ 5. 持续维护 │
│ ├─ 自适应心跳保持 NAT 映射 │
│ ├─ 持续监控路径质量 │
│ ├─ 检测故障 → 回退 DERP → 重新发现 │
│ └─ 监控端口映射 epoch → 路由器重启时自动恢复 │
│ │
└──────────────────────────────────────────────────────────────┘
五、其他核心功能
5.1 MagicDNS
MagicDNS 为 tailnet 中每台设备自动注册稳定、人类可读的 DNS 名称(Tailscale)。
架构实现:
- Tailscale 告诉操作系统 DNS 服务器地址是
100.100.100.100 - 安装路由将该地址的流量回送到 Tailscale 进程
- tailnet 私有名称查询不会离开设备——采用推送式更新,网络映射变更时立即推送到每台设备
- 公共域名查询透明升级为 DNS-over-HTTPS,防止 DNS 请求被篡改或嗅探
- 支持 Split DNS(受限名称服务器),按域名将查询路由到不同服务器
5.2 ACL 访问控制
Tailscale ACL 遵循最小权限和零信任原则(Tailscale):
- 默认拒绝(deny-by-default)
- 方向性(directional):允许 A→B 不意味着 B→A
- 本地执行(locally enforced):规则在每台设备上独立执行,无需协调服务器参与
- 使用 HuJSON 格式定义,支持用户、组(groups)、标签(tags)等选择器
- 标签可拥有其他标签,实现层级化权限管理
- 下一代语法 Grants 提供应用层访问控制能力,ACL 将继续无限期工作但不再接收新功能
5.3 子网路由器与出口节点
- 子网路由器:通过运行 Tailscale 的设备充当网关,允许访问无法直接安装 Tailscale 的内部设备
- 出口节点:将所有非 tailnet 流量通过指定设备路由(通告
0.0.0.0/0和::/0) - 两者均支持高可用部署(多个路由器通告重叠路由)
- 密钥过期时路由保持配置但变得不可达(“fail close”策略),防止流量泄漏
5.4 Tailscale SSH、Taildrop、Funnel
- Tailscale SSH:由 Tailscale 接管端口 22 的 SSH 连接,通过 WireGuard 加密和 node key 认证,无需分发公钥或维护 authorized_keys
- Taildrop:基于 peerapi 的设备间文件共享,通过 P2P 加密链路传输,从不存储在云端
- Tailscale Funnel:将 tailnet 内部服务暴露到公共互联网,通过 TCP 代理和 Funnel relay 建立加密隧道,设备 IP 永不暴露
5.5 Netstack(用户态网络栈)
基于 Google gVisor 的 TCP/IP 栈,完全在用户空间运行。适用于无法创建 TUN 设备的容器环境。在此模式下 tailscaled 作为 SOCKS5/HTTP 代理运行。
六、竞品对比
6.1 核心功能对比
| 功能 | Tailscale | ZeroTier | Nebula | WireGuard 原生 |
|---|---|---|---|---|
| NAT 穿透 | 优秀(DERP+Peer Relays,>90%直连) | 良好(Root Servers) | 良好(Lighthouse) | 无 |
| Mesh 支持 | 全自动 | 全自动 | 全自动 | 手动(O(n^2)复杂度) |
| 底层协议 | WireGuard | 自定义(256-bit ECC) | Noise IX + AES-256-GCM | WireGuard |
| 网络层 | Layer 3 | Layer 2 | Layer 3 | Layer 3 |
| 身份模型 | OAuth/SSO | 设备密钥 | 证书 PKI | 公钥对 |
| 自托管 | 需 Headscale | 完全可自托管 | 完全可自托管 | 完全自主 |
| 开源 | 客户端开源,服务器闭源 | 客户端 MPL-2.0 | 完全开源(MIT) | 完全开源(GPL v2) |
| 配置复杂度 | 极低 | 低 | 较高(需 CA 管理) | 中高 |
| 内存占用 | 可变(>1GB) | ~27MB | ~27MB | 极低 |
6.2 选型建议
- 个人/Homelab:首选 Tailscale(零配置、MagicDNS、免费层 100 设备)
- 中小企业:首选 Tailscale(SSO 集成、ACL、最低运维)
- 需要 L2 网络:ZeroTier(组播、广播支持)
- 零供应商依赖:Nebula(完全开源,Slack 5 万台生产主机验证)
- 最高性能:WireGuard 原生内核模块(~8+ Gbps)
- 公网服务暴露:Cloudflare Tunnel(生产级)、ngrok(API 调试)
6.3 Headscale
Headscale 是 Tailscale 协调服务器的开源自托管替代(BSD 许可),由欧洲航天局的 Juan Font 创建。支持 OIDC、ACL、MagicDNS,但仅支持单 tailnet,缺少 Funnel/Serve 等功能。Tailscale 的一位活跃维护者已加入 Headscale 团队,双方保持兼容性协作。
七、2025-2026 前沿发展
7.1 产品更新
- Peer Relays GA(2026-02):基于 UDP 的高性能中继,支持静态端点和 Prometheus 指标
- LM Link(2026-02):与 LM Studio 合作,加密点对点访问远程 GPU 上的 LLM
- Aperture(2026-03,alpha):AI 网关,集中式 LLM 访问控制和使用追踪
- Border0 收购(2026-03):获得特权访问管理(PAM)能力
- Workload Identity Federation GA(2026-02):使用 OIDC 令牌替代静态凭据,支持 AWS/Azure/GCP/GitHub Actions
- Multi-Tailnet(alpha):组织可在同一身份提供商下创建多个 tailnet
- 可视化策略编辑器 GA:图形界面替代 HuJSON 编辑
- 静态数据加密:客户端状态文件加密存储
7.2 性能优化
- wireguard-go 突破 10Gb/s:通过内核接口卸载和 UDP 分段卸载,用户态 wireguard-go 甚至超越了内核 WireGuard
- FreeBSD PF 补丁:Tailscale 赞助为 PF 添加 Endpoint-Independent Mapping,改善 pfSense/OPNsense 用户的直连率
7.3 未来方向
- 后量子密码学:计划通过 WireGuard PSK + ML-KEM 实现后量子安全
- AI 基础设施:将 Tailscale 定位为 AI agent 访问企业数据的”空中交通管制系统”
- IPO 计划:CEO 确认打算最终 IPO,但”还需数年”
7.4 商业数据
- 超过 10,000 家付费企业客户,ARR 同比增长 >100%
- 14.5 亿美元估值(2025 C 轮,1.6 亿美元融资)
- 客户包括 Instacart、Duolingo、Perplexity、Mistral、Groq、Hugging Face 等
关键数据速查
| 指标 | 数据 |
|---|---|
| 直连成功率 | >90%(典型条件) |
| Easy+Hard NAT 打洞时间 | ~2-20 秒(生日悖论) |
| Hard+Hard NAT 打洞时间 | ~28 分钟(99.9%),实际不可行 |
| UDP 防火墙超时 | 常见值 30 秒 |
| STUN 端口 | UDP 3478 |
| WireGuard 直连端口 | UDP 41641 |
| DERP 端口 | TCP 443 |
| DERP 全球区域 | 28 个,每区域 ≥3 节点 |
| 免费 Peer Relay | 2 个/用户 |
| Node Key 默认过期 | 180 天 |
| 付费企业客户 | >10,000 家 |
| 估值 | 14.5 亿美元(2025 C 轮) |
参考资料
- How NAT traversal works - David Anderson, Tailscale Blog
- How Tailscale works - Tailscale Blog
- NAT Traversal Improvements Part 1 - Tailscale Blog, 2025
- NAT Traversal Improvements Part 2 - Tailscale Blog, 2025
- NAT Traversal Improvements Part 3 - Tailscale Blog, 2025
- Tailscale Key Management - Tailscale Blog
- DERP Servers - Tailscale Docs
- Tailnet Lock Whitepaper - Tailscale Docs
- WireGuard Protocol - WireGuard
- WireGuard Whitepaper - Jason Donenfeld
- Peer Relays GA - Tailscale Blog, 2026
- Headscale - GitHub
- FreeBSD Endpoint-Independent NAT - FreeBSD Status Report
- magicsock package - Go Packages
- disco package - Go Packages
- Control and Data Planes - Tailscale Docs
- Defined Networking Benchmarks - Defined.net Blog
- nat-birthday-paradox calculator - David Anderson, GitHub
- Tailscale Encryption - Tailscale Docs
- Noise protocol package - Go Packages