本文主要是针对之前 【主要转载】自托管 Tailscale Derp 服务器 的补充

随着 Tailscale 的流行,越来越多人希望自建 DERP 中继服务器来优化国内的连接速度。本教程将详细介绍如何通过 Docker 快速部署一个自建 DERP 中继服务器,并通过 Nginx + SSL 实现公网访问和安全性保障。

准备工作

1. 云主机(VPS)

选择国内 VPS,带宽尽量大一些,节点建议选在用户访问集中区域。

2. 域名

本方案要求 DERP 使用域名,因此你需要准备一个域名。备案非强制,可以通过将端口配置为非标准端口(如 442)规避。

3. SSL 证书

推荐使用免费 Let's Encrypt 证书,借助 Certbot 可自动签发、续签。参考教程:

使用 Certbot 为网站签发永久免费的 HTTPS 证书

也可使用宝塔、1Panel 等面板获取 SSL 证书。


构建 Docker 镜像

git clone https://github.com/lansepeach/Derp-China-new.git
cd Derp-China-new
docker build . -t derpinchina:latest

构建过程首次可能稍慢,耐心等待即可。


生成 Tailscale 认证密钥

登录 Tailscale 管理后台,点击 Generate auth key...,生成一个一次性登录密钥并记录下来。


✏️ 修改配置文件

打开项目根目录的 .env 文件,修改如下字段:

TAILSCALE_DERP_HOSTNAME=你的域名
TAILSCALE_AUTH_KEY=刚刚生成的 auth key

启动容器

docker-compose up -d

容器启动后,确认 Tailscale 后台是否识别了 DERP 容器设备,并检查认证 key 是否失效(失效代表连接成功)。

可以通过如下命令测试本地 DERP 服务是否启动成功:

curl http://127.0.0.1:444

正常返回如下 HTML 即可:

<html><body>
<h1>DERP</h1>
<p>
  This is a
  <a href="https://tailscale.com/">Tailscale</a>
  <a href="https://pkg.go.dev/tailscale.com/derp">DERP</a>
  server.
</p>

如未成功,可进入容器手动登录:

docker exec -it tailscale-derp /bin/sh
tailscale login --auth-key="你的key"

安装并配置 Nginx(或其他 Web 服务)

只需反向代理至 127.0.0.1:444。以下是 Nginx 示例配置(监听 442 端口):

upstream @derp {
    server 127.0.0.1:444;
    keepalive 300;
}

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 442 ssl;
    server_name derp.example.com;

    if ($host != 'derp.example.com') {
        return 403;
    }

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    keepalive_timeout 70;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_redirect off;
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_pass http://@derp;
    }
}

Tailscale 添加自定义 DERP

访问 ACL 配置,在 JSON 中添加如下 derpMap

"derpMap": {
  "Regions": {
    "900": {
      "RegionID": 900,
      "RegionCode": "myderpserver",
      "Nodes": [
        {
          "Name": "1",
          "RegionID": 900,
          "DERPPort": 443,
          "HostName": "derp.example.com"
        }
      ]
    }
  }
}

注意:如使用 Nginx 监听的是 442 端口,请将 DERPPort 改为 442。


测试是否接入成功

使用以下命令检查连接情况:

tailscale ping <另一个设备的IP>
tailscale status

如果你看到 DERP 使用的是你的自定义 myderpserver,说明一切配置成功!


致谢

感谢以下项目的优秀开源和启发:


如有疑问欢迎留言讨论,愿你用上飞一般的 Tailscale 连接速度!


如需我帮你生成带目录的 Markdown 文档或部署至你博客平台,请告诉我~

转载请注明原文链接:首页 > 日常 > 自建 Tailscale DERP 中继服务器详细教程(支持 Docker 快速部署)
  • 微信打赏微信打赏

AnHui.HuaiNan

我很感谢那些爱过我的人.