了解DERP协议的原理


DERP 是一个开源的、高性能的、基于 UDP 的 NAT 穿透解决方案,它可以帮助你在内网环境中搭建一个 VPN 服务。

Tailscale 的 DERP 协议(Detoured Encrypted Routing Protocol)本质上是一个中继机制,用来解决点对点(P2P)通信无法直接建立的问题。它的作用是 帮你的设备绕过防火墙和 NAT,确保它们能相互通信。相当于一个 “智能快递中转站”,当设备间无法直连时,它能自动选择最优路径转发加密流量。

了解DERP协议的原理


DERP 协议三大关键单:中继兜底 + 全程加密 + 智能优先直连

假设你有两台设备,它们装了 Tailscale,想直接通信。如果它们都在公网(IP),那就可以直接建立连接,速度快,延迟低。但很多情况下,你的设备 A 和 B 可能都在内网里。这时候,它们之间没有直接的公网 IP,无法直接通信,就像两个人被关在不同的房间里,各自的门都是锁着的。

Tailscale 先尝试用 STUN(穿透 NAT 的技术) 让 A 和 B 直接连通,如果成功了,设备之间就能 P2P 直接传输数据,速度很快。如果 STUN 失败,比如不允许 UDP 通过等限制。这时候,Tailscale 会启用 DERP 服务器,让数据绕个远路:A 把数据发到离自己最近的 DERP 服务器,DERP 服务器再把数据转发给 B。

  • 为什么需要 DERP?

设备直连就像快递送货上门,但现实中常遇到 “门牌号被挡住”(NAT/防火墙)。此时 DERP 就像中转站:当两个设备无法直接打通(比如公司网络严格限制 UDP),就会通过 DERP 服务器中转数据。

  • 如何选最快路径?

Tailscale 客户端会自动测试全球 DERP 节点的延迟(例如北京用户可能连到上海的节点),优先选择延迟最低的作为 “主中转站”称为 DERP,整个过程无需手动干预。官方节点多在海外,国内访问延迟高。自建 DERP 服务器后,设备间通信会优先走这个”本地中转站”,延迟大幅降低。

  • 如何流量保证安全?

所有中转流量都经过加密,且通过公钥识别设备身份。相当于快递站只认特定加密标签的包裹,其他人无法冒领。中继服务器只负责转发加密后的二进制数据,无法窥探内容,类似 “快递员看不到密封包裹里的东西”。

  • 为什么用 HTTP 协议?

因为很多网络对 UDP 端口限制严格,但 HTTP(尤其是443端口)基本畅通。DERP 把加密流量伪装成普通网页流量,轻松绕过防火墙。


STUN:基于 UDP 的轻量级协议

STUN(Session Traversal Utilities for NAT)是一个 基于 UDP 的轻量级协议,也是一种用于穿透 NAT 的协议,它允许两个位于不同 NAT 环境下的设备建立直接的 UDP 连接。用于:让设备发现自己的 公网 IP 和端口;让两个 NAT 后的设备尝试 P2P 直连

  • STUN 的工作流程

首先,客户端(A)使用 UDP 发送 STUN 绑定请求到 STUN 服务器的 3478 端口(消息格式遵循 STUN 标准)。然后,STUN 服务器返回响应,返回 客户端的公网 IP 和端口,帮助设备判断 NAT 类型。设备 A 知道公网 IP 后,通知设备 B。然后,设备 A 和 B 互相发 UDP 数据包,尝试 P2P 直连。如果 NAT 允许,连接建立;否则,必须使用 TURN/DERP 服务器中继数据。

  • NAT 穿透的工作原理
# 1.STUN+UDP打洞
适用于 Full Cone NAT、Restricted Cone NAT,大多数家庭路由器支持。

# 2.TURN服务器(中继)
适用于 Symmetric NAT,当 UDP 打洞失败时使用。

# 3.UPnP/NAT-PMP(端口映射)
适用于 支持 UPnP/NAT-PMP 的路由器,家庭网络常见。

# 4.HolePunching+Relay(打洞+中继混合)
现代工具(Tailscale、ZeroTier)通常 先尝试 UDP 打洞,如果失败就 自动切换到中继

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !