自建 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 节点是否在线。

注意事项

参考资料