前置准备

域名解析:确保 dp.abc.com 已经解析到你服务器的公网 IP。

端口放开:确保所需要的端口防火墙已放开,本文使用了两个端口 8443/tcp3478/udp

准备证书文件

重命名证书: 为了让程序能自动识别,证书文件名必须严格对应你的域名。请将你的证书重命名为:

  • dp.abc.com.crt

  • dp.abc.com.key

上传到服务器: 部署目录是 /opt/docker/derper。建立一个 certs 文件夹并将文件放进去。

mkdir -p /opt/docker/derper/certs
# 将你的两个文件上传到 /opt/docker/derper/certs/ 目录下

上传后,目录结构应该是这样的:

/opt/docker/derper/
├── certs/
│   ├── dp.abc.com.crt
│   └── dp.abc.com.key
└── docker-compose.yml (稍后创建)

编写 Docker Compose

services:
  derper:
    image: fredliang/derper:latest
    container_name: derper
    restart: always
    ports:
      # HTTPS 端口 (TCP)
      - "8443:443"
      # STUN 端口 (UDP)
      - "3478:3478/udp"
    environment:
      - DERP_DOMAIN=dp.abc.com
      - DERP_ADDR=:443
      - DERP_CERT_MODE=manual  # 手动模式
      - DERP_VERIFY_CLIENTS=false # 取消鉴权
    volumes:
      # 挂载证书目录到容器内部
      - ./certs:/app/certs

      # -------------------------------------------------------
      # 【按需使用】挂载 NPM 的证书文件
      # 注意:这里使用 NPM 申请的泛域名证书,当 NPM 自动续签证书后只需要重启 derper 容器即可
      # 注意:请将映射路径替换为 NPM 下泛域名证书的真实路径
      # -------------------------------------------------------
      # 映射公钥 (fullchain.pem -> dp.abc.com.crt)
      - /opt/nginx-proxy-manager/letsencrypt/live/npm-1/fullchain.pem:/app/certs/dp.abc.com.crt:ro
      # 映射私钥 (privkey.pem -> dp.abc.com.key)
      - /opt/nginx-proxy-manager/letsencrypt/live/npm-1/privkey.pem:/app/certs/dp.abc.com.key:ro

启动容器:

docker compose up -d

验证服务是否正常

在浏览器中访问 https://dp.abc.com:8443

  • 你应该能看到一段简单的文字,类似 DERP 或者 Tailscale DERP Server

  • 如果看到这个页面,说明 HTTPS (TCP) 链路是通的。

在 Tailscale 控制台添加 ACL

登录 Tailscale Admin Console

进入 Access Controls

在 JSON 配置中添加 derpMap 部分

{
  // ... 其他配置 ...

  "derpMap": {
    "OmitDefaultRegions": false, // 是否忽略官方节点,建议 false,仅作补充
    "Regions": {
      "900": { // RegionID,建议选 900-999 之间的数字
        "RegionID": 900,
        "RegionCode": "MyDerp",
        "RegionName": "Aliyun Config",
        "Nodes": [
          {
            "Name": "900a",
            "RegionID": 900,
            "HostName": "dp.abc.com",
            "IPv4": "你的公网IP", // 可选,建议填上以防 DNS 解析慢
            "DERPPort": 8443 //
          }
        ]
      }
    }
  }
}

最终测试

在任意一台连接了 Tailscale 的客户端上(例如你的 PC),运行命令:

tailscale netcheck

查看输出结果,寻找 Region 900(或者你设定的 ID)。

  • 你应该能看到类似于 Latency: xx ms 的数据。

  • 如果显示具体的延迟数字,说明 TCP 连接成功。