本文主要是针对之前 【主要转载】自托管 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
,说明一切配置成功!
致谢
感谢以下项目的优秀开源和启发:
- @S4kur4 - Derp-China
- @tijjjy - Tailscale-DERP-Docker
如有疑问欢迎留言讨论,愿你用上飞一般的 Tailscale 连接速度!
如需我帮你生成带目录的 Markdown 文档或部署至你博客平台,请告诉我~
Comments | 1 条评论
测试