Generated by Answer me with HTML 0.5.5 · 2026-10-22 02:23 · ★ Star on GitHub

DERP 跨境组网

一台建、两台建,分别长什么样

sourceTailscale 官方文档 + 宿主机端口实测

Lead: 一对设备只有一条会话。走中继,双向都走中继。跨境永远只有一段,区别只在这一段落在哪台机器上。

A

先说你可能卡在哪

三个地方容易想反:

  • 以为设备与 DERP 之间走 WireGuard/UDP。实际是 HTTPS,跑在 TCP 上。
  • 以为去程回程各走各的。实际一对设备只有一个载体。
  • 以为多建一台就更稳。实际两台各算一个 region 会翻车。
B

你的三台机器

墙内墙外中继TLS 8443 跨境TLS 8443 跨境转发反连,同一条国外段直连手机DERPNASB建站机A线路机
端口 现在谁占 derper 要不要
80 Caddy,ACME 续签 不用碰
443 Caddy 或 Xray 不用碰
8443 两台都空着 就用它
3478 UDP 空着 建议关掉
  • A:CN2 GIA,跑代理。Caddy 占 80,Xray 占 443。
  • B:建站机,也是 Hermes 宿主机。Caddy 占 80 和 443。
  • NAS:墙内,有公网 IP 但封 80/443。它只需要出站。
C

只建一台:放 A 还是放 B

放 A,跨境段吃到 CN2 GIA。

墙内墙外TLS 8443 跨境TLS 8443 跨境国外段直连反连走同一条手机A线路机NASB建站机

放 B,跨境段直达圣何塞。

墙内墙外TLS 8443 跨境TLS 8443 跨境不参与手机B建站机NASA线路机
  • 放 A:线路最好。代价是 A 上多一个 tailscaled。
  • 放 B:最省事。B 是终点也是中继,它的 DERP 连接走 loopback。
  • 放 B 的风险在线路。Leaseweb 到国内的走向没有优化。
  • A 与 B 都在国外,之间直连,这一段几乎不花钱。
D

两台都建:两种做法

官方文档原话:device-a connects to the DERP server that device-b is already using。

发起方连的是接收方的家。所以两家不同,路径就不同。

各算一个 region,正反走两条中继。

正向,连 B 的 region反向,连 A 的 region落地NASB建站机A线路机

同一个 region 加 mesh,两台互转一跳。

同一个 region,互相 mesh就近接入就近接入只转一跳NASA线路机手机B建站机
  • 两个 region:正反各用一条中继。带宽翻倍,延迟不对称。
  • 同 region:两台要用 --mesh-with 和 --mesh-psk 互连。
  • 同 region 的代价:两台之间要有稳定 TCP,两台都装 tailscaled。
  • 三台设备的规模,双中继的收益接近零。
E

四种做法对一眼

做法 跨境段 双向 判断
只建 A CN2 GIA 对称 质量最好
只建 B 圣何塞直连 对称 最省事
两台两 region 各走一边 不对称 别这样
两台同 region mesh 就近节点 对称 复杂收益低
F

三级回落能做到几级

A 不可达B 也不可达设备启动,按延迟选home走 A 的 8443同 region 转 B没有中继
  • A 与 B 要在同一个 region,并且互相 mesh。
  • 两台必须都装 tailscaled。derper 的 --mesh-with 指向对方。
  • 第一步是按延迟选,不是按你写的顺序选。
  • 第二步是同 region 内换节点,官方文档明确支持。
  • 第三步取决于有没有保留官方 region,这是唯一的取舍点。

官方 map 里没有任何优先级字段。DERPNode 只有 HostName、IPv4、IPv6、CertName、DERPPort、STUNPort、STUNOnly、InsecureForTests。

所以「A 优先、B 次之」只能靠 A 的延迟真的更低。CN2 GIA 通常成立,但不是你能指定的。

G

随时开关行不行

tailscaled 和 derper 是两个独立进程。装一个不装另一个没问题。

systemctl stop derper 不影响 B 自己的节点身份。B 还在网内,只是不再转发。

但停掉之后会不会断,取决于 map:

map 配法 开着 derper 关掉 derper
只留自建 region 强制走自建 无 region 可退,直连被挡即断
自建加官方 region 按延迟自选,可能不用你 自动回落官方
只留官方 region derper 白跑 无影响

结论:想做优雅开关,就不能强制只走自建。这是一对矛盾。

还有两个耦合点:

  • --verify-clients 要查本机 tailscaled。停掉 tailscaled 留着 derper,验证会失败。
  • B 的家只有自己时,关掉 derper 后它会一直重试死掉的 region。
H

要堵的四个坑

  • 直连优先。连接先试 UDP,通了就降级成裸 WireGuard。在路由器封 NAS 出站 UDP 41641。
  • 单条 TCP 复用。每个客户端只有一条 TLS 连接,所有 peer 挤在上面,会队头阻塞。
  • 大流量别走中继。官方对 DERP 的定性是可靠,但 QoS 有限。
  • peer relay 救不了。它监听 UDP 端口,拿不到 TCP 伪装。
I

落地顺序与参数

是否要,关掉就断不要,可随时开关装 tailscaledtailscale ping 测延迟能接受?保持官方 region加 derper 8443要强制走自建?剔除官方 region保留官方 region
第一步 · 只装节点,先跑通bash
ls /dev/net/tun        # 没有就先 modprobe tuncurl -fsSL https://tailscale.com/install.sh | shtailscale up# 容器是 host 网络,装完即可直连 NAS 的 100.x
第二步 · 可选,再加中继bash
derper --hostname derp.example.com \  --certmode manual --certdir /etc/derp-certs \  --a :8443 --http-port=-1 --stun=false --verify-clients
  • --http-port=-1 必加。derper 默认要绑 80,Caddy 已经占着。

  • 两台同 region 时再加 --mesh-with 对方域名 --mesh-psk-file <文件>。

  • PSK 文件里必须是 64 位小写十六进制。

  • 证书复用 Caddy 已签的文件。Caddy 续期后要重启 derper。

  • --verify-clients 必加。不加就是公开中继,别人能白嫖带宽。

  • 不要放在反代后面。它靠源地址识别客户端。

  • 出现容器网络异常时,给 tailscaled 加 --netfilter-mode=nodivert。

J

带走一句

一句话

会话只有一条,中继是双向的。建一台还是两台,看跨境那一段落哪儿;两台拆成两个 region,只会自己打自己。

下一步取决于一件事:

第一步先做什么?

哪块没看懂直接问我。