Tailscale 延迟优化:DERP 中继选择、路径 MTU 与性能调优深度解析

Tailscale 是一种基于 WireGuard 的零信任网络工具,通过其独特的 DERP(Designated Encrypted Relay for Packets)中继机制和先进的 NAT 穿越技术,实现设备间的低延迟、安全连接。本文深入剖析 Tailscale 的延迟优化策略,包括 DERP 中继架构与选择算法、延迟测量工具、路径 MTU(PMTU)发现问题、WireGuard 握手开销、STUN/DSCP 配置,以及实用优化清单。通过这些技术细节,帮助网络工程师和开发者优化 Tailscale 部署性能。

DERP 中继架构与选择算法

DERP 中继架构概述

DERP 是 Tailscale 的加密 TCP 中继服务器网络,全球部署在多个地区(如美国 Ashburn、Chicago、欧洲 Frankfurt、亚洲 Singapore、Hong Kong 等),支持 IPv4 和 IPv6 双栈。DERP 服务器的主要作用包括:

  • NAT 穿越协商:使用 STUN 协议帮助客户端发现公网 IP 和端口。
  • 连接建立:优先尝试直连(P2P),失败时作为 fallback 转发已加密的 WireGuard 数据包。
  • 不对称路由:发送方使用最近的 DERP,接收方使用其最近的 DERP,避免单点瓶颈。

DERP 与传统 TURN 服务器不同,它紧密集成 Tailscale 控制平面,使用 HTTPS(TCP 443)流传输 WireGuard 密钥加密的数据,确保中继服务器无法解密流量。

D E R P | S | y A F S d s r i n h a n e b n g y u k a r f p n u o , r r t e C , , h i L T c o o a n k g d y o o o n | | R 2 e 3 g 1 2 2 4 i , , 2 4 n 5 3 , 6 1 I 2 D 2 5 |

客户端从协调服务器获取 DERP 地图(derpmap),地图包含所有服务器的地址和权重。

选择算法:STUN 与 ICE 集成

Tailscale 使用 STUN(RFC 5389)和 ICE(RFC 8445)进行中继选择:

  1. STUN 探测:客户端向所有 DERP 服务器发送 STUN 请求,服务器响应观察到的公网 IP:端口。用于 NAT 类型检测(Full Cone、Restricted Cone、Port-Restricted Cone、Symmetric NAT)。
  2. 延迟测量:计算往返延迟(RTT),选择最近的“home DERP”。
  3. ICE 候选收集:生成主机候选(本地 IP)、STUN 反射候选(公网 IP:端口)、中继候选(DERP)。
  4. 优先级排序:优先直连 UDP(P2P),次选中继。Symmetric NAT 常 fallback 到 DERP。

算法伪代码:

h o m e h _ o d m e e r _ p d e = r p U a D r P g m h i o n l ( e d e p r u p n _ c s h e i r n v g e r s , 使 R T T D ( E u R d P p _ s t u n _ p r o b e ( d e r p ) ) )

延迟测量:tailscale netcheck

tailscale netcheck 是诊断网络条件的核心工具,输出 UDP 支持、IPv4/IPv6、公网 IP、NAT 类型、DERP 延迟等。

示例输出:

` $ = U I I M H P D P ` = D P P a a o E r ` t = P v v p i r R n f s e b a : 4 6 p r t P y r i f a i N : : i P M c a n e s l e n i a l - - - r h s t 2 2 g n p a 1 3 1 r c w y 0 0 V n p t e a o e 3 0 a i i e ( ( ( d l r s . 1 r n n n 1 2 2 e k 0 : i g g c ) ) 2 D . d e : : y : : 4 E n c 1 b s ) R e o 1 8 B n ( 2 1 : P t n 3 : y o m 5 2 : c d . : D y n s 0 1 h i 1 1 e e e ) 8 n e t : : s s : 0 y c i x x t c k o x x I - n x x P 1 s x x : x x ( = 1 = ) = n o
使 # # W T # # # i a # # r i M I # ` e * * * l T P - P G C s U N V v M - M u G c A P 6 T e M T a N a T C / U v T U r F A l / C e U d r T e ( G r a / A N y g W A = m * S T 5 e * N / s M n A M G ` T t T T C U a * U P V t * ) P 1 i 1 | N 4 o 2 2 n 8 1 | 0 0 | 4 * 0 1 | 1 * I 0 | 2 ` 5 P 8 1 - 0 v 1 0 2 - 0 6 M 3 8 j T 5 0 s - M M U | 0 o T T n 8 U D U | | ` 0 F < | D 1 W o 1 2 i n 2 8 P r ' 8 0 - M e t 0 m T J G t U u u F u m a r = b n V r a 1 o e P d g 2 g t N m 8 r c M e 0 a h T n m e U t s c k I P D C E P R U P S y m m e t r i c N A T M a p p i n g V a r i e s B y D e s t I P = y e s

检查当前 MTU

ip link show tailscale0

Tailscale up 时设置 MTU

sudo tailscale up –mtu=1280

系统级 PMTU 发现(Linux)

echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc sysctl -w net.ipv4.tcp_mtu_probing=1

WireGuard 接口手动调整

sudo ip link set dev tailscale0 mtu 1280

# W # T # i # a r i W e * * * T l i G T a s r u a i c e a i l a G r l s l u d * * s c e a * * c a r a l d l e e N D o S i S C s * T P e * U _ D 使 N D I i D / i K f E D f f R D S f i P E C S e R P e - P r H R v e T 2 l T C l o m d a e n N P A o 2 T i ^ n n t 1 0 0 2 - 0 W 2 m i 0 s r 0 e m G s u a + r d 1 1 2 C S 6 V o I P

启用 DSCP(Linux)

sudo tailscale up –dscp=46 # CS6

STUN 服务器自定义(高级)

export TS_DERP_URL=https://your-derp-map.json tailscale up

检查状态

tailscale status –json | jq ‘.Self.DSCP’

D # # - - - - - - - S # # C P [ [ [ [ [ [ [ P e T W H t N T D e a h o a A a E 穿 n M D r s i a w i T i R 3 e T S U t D l t l l P 5 t U C R D a E s T s T s 0 Q c P e P t R c i a c r c M 0 o h 1 l u P a s i a a a a S e 2 a 4 s l l l v l p c 8 y 1 R e S s e e e ] k 0 6 T T c r ( 4 T D U a n s C h 1 E N l e a L t / R ? e t l I t 3 P ] c p T 4 1 ( W h I R s a 7 0 S h o e m e : i 8 0 e t r c p f / l m r t k k r e / s s v p s ] o r l c e s ] ( v e o a | r : ( h e n g l | | s / h t m c i e | ] / t t e e n ` | 3 ( t t p n ] . t 0 h a p s t ( t / a ` ` ` ` t m t i s : s h a i t - t w a s t l : ] t i l a - a a i p s ( t l s i d i t l s c t h p s c l s l c n : a t a t s c a s c s h e / l a i t : a l c p c t / e i l p / l e a = a t t . l s s / e l 4 l a p a c s c : t . n e 6 e i o i o c a / a c e ` l l l m a l / i o t u u s i s / l e t l m c p p c c c d e . a s / h a y a o . c i c d e l l c c o l a e c - - e d e s m s l r k m a e . m c e p ` t d s r c r d a . m u v t p o e b o l c a = e a M m f l c e o p 1 r t a / e o s . m 2 t u p d r g c d 8 i s o e r d e 0 s ` c n h e m f ` e s c o f c a - / e w e b s u r r / - r l l e e s t e r t l f t a n g e ) | a | | e u i c / f y r n l e n e ` e - s / a r | n p c t t e c r a a - n P | e l i t c 2 t e l r e Q P d o - s a / o e c w c t S r o o a e a D d p l r l r i E i - ) k e s l R + < r s s - a s P 2 5 e e ) c l c / 0 - 0 c r l - a N % 1 m t v i i l A 0 s / e # m e T % r r n p - e s e r c R l ) t o l | T a c v i T y h e ) e m c e k n ) t s - p t - 1 )