自建 Tailscale DERP

Tailscale DERP 是 Tailscale 网络中的流量中继组件,主要用于复杂网络环境下、P2P 直连打洞失败时的流量转发。

但在国内网络环境中,官方提供的 DERP 节点往往存在延迟高、速度慢,甚至几乎不可用的情况。因此,自建私有 DERP 服务器就很有必要了。它可以在 P2P 无法成功直连时,为 Tailscale 提供低延迟、高可用的中继能力,显著改善实际使用体验。

本文介绍如何使用 Docker 搭建一个支持 --verify-clients 的 Tailscale DERP 服务器,并通过补丁实现免域名接入,适合国内环境直接落地。

环境准备

开始之前,请先确认以下条件:

实现思路

本文使用的镜像为 deepfal/tailscale-derp,它基于上游 DERPer 源码构建,并移除了域名强校验限制,适合通过 IP + 端口 + --verify-clients 的方式部署和接入。

镜像说明

这是一个去除了域名校验限制的 DERP 补丁镜像,可直接用于免域名部署场景。

补丁目的

实现原理

提示:该补丁放宽了 TLS 握手阶段的 SNI 严格匹配。建议始终开启 --verify-clients,并在可信网络环境和正确证书配置下使用。

镜像标签

自动同步状态

搭建步骤

1. 安装并启动 Tailscale 客户端

先在宿主机上安装并启动 Tailscale。不同操作系统的安装方式略有差异,可参考 Tailscale 官方文档

启动后,Tailscale 会在 /var/run/tailscale 目录下创建 tailscaled.sock 套接字文件,供 DERP 容器调用。

2. 拉取 Docker 镜像

执行以下命令拉取镜像:

docker pull deepfal/tailscale-derp:latest

3. 启动 DERP 容器

docker run -d \
--name tailscale-derp \
--restart unless-stopped \
-p 0.0.0.0:59443:36666 \
-p 0.0.0.0:3478:3478/udp \
-v /run/tailscale:/var/run/tailscale:ro \
deepfal/tailscale-derp:latest \
./derper \
-hostname derp.deepfal.cn \
-a :36666 \
-certmode manual \
-certdir /ssl \
--verify-clients

参数说明

4. 验证 DERP 服务状态

容器启动后,可以通过以下命令查看运行日志:

docker logs tailscale-derp

如果日志中出现类似 DERP server started 的信息,说明服务已正常启动。

5. 在 Tailscale 后台添加自建 DERP 节点

在 Tailscale 后台的 DERP 配置中加入你的自建节点信息,如下所示:

{
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"910": {
"RegionID": 910,
"RegionCode": "自建节点(名称)",
"Nodes": [
{
"Name": "910",
"RegionID": 910,
"HostName": "宿主机IP",
"InsecureForTests": true,
"DERPPort": 59443
}
],
"RegionName": "自建节点(名称)"
}
}
}
}

将其中的 宿主机IP 替换为你服务器的实际公网 IP。

添加完成后,可以立即使用 tailscale netcheck 检查该 DERP 节点是否在线。

注意事项

参考资料