我之前也试过网上公开的 DERP 节点,但把自己的流量交给陌生人的服务器,心里总不踏实,而且这些节点质量参差不齐,今天能用明天可能就挂了。折腾了一圈,最后发现最靠谱的方案就是自己搭一个。
好消息是,这事儿比想象中简单太多了。
你需要准备什么
- 一台国内 VPS:阿里云、腾讯云、华为云都行,最低配置 1 核 1G 内存就够,一个月十几块钱
- SSH 工具:Windows 用 PowerShell,Mac/Linux 直接用终端
- 5 分钟时间
没错,不需要域名,不需要 SSL 证书,不需要备案。这是这个方案最爽的地方。
第一步:在 VPS 上安装 Tailscale 客户端
SSH 连上你的 VPS 之后,先装 Tailscale:
curl -fsSL https://tailscale.com/install.sh | sh
装完启动并登录:
sudo tailscale up
终端会给你一个链接,复制到浏览器里打开,授权这台 VPS 加入你的 Tailscale 网络。
为什么要先装客户端?因为后面我们要开启 --verify-clients 参数,让 DERP 服务器验证连接的客户端是不是你自己网络里的设备,防止别人白嫖你的中继。
验证一下安装是否成功:
ls /var/run/tailscale/tailscaled.sock
文件存在就说明没问题。
第二步:用 Docker 跑 DERP 服务器
把下面命令里的「你的VPS公网IP」替换成实际 IP,然后直接跑:
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 /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock \
deepfal/tailscale-derp:latest \
./derper \
-hostname 你的VPS公网IP \
-a :36666 \
-certmode manual \
-certdir /ssl \
--verify-clients
几个关键参数说明一下:
-p 0.0.0.0:59443:36666:DERP 服务的主端口,容器内 36666 映射到宿主机 59443-p 0.0.0.0:3478:3478/udp:STUN 协议用的 UDP 端口,帮助设备打洞-v那一行:挂载 Tailscale 的 socket 文件,让 DERP 能验证客户端身份-certmode manual:手动证书模式,实际不用真的配证书,因为 Tailscale 本身就是端到端加密的--verify-clients:只允许你自己网络里的设备使用这个中继
如果 Docker 拉取镜像失败(国内访问 Docker Hub 经常抽风),可以在另一台能正常访问的机器上先拉下来再传过去:
# 在能访问 Docker Hub 的机器上
docker pull deepfal/tailscale-derp:latest
docker save deepfal/tailscale-derp:latest | gzip > tailscale-derp_latest.tar.gz
# 传到 VPS
scp tailscale-derp_latest.tar.gz root@你的VPS_IP:/tmp/
# 在 VPS 上导入
gunzip -c /tmp/tailscale-derp_latest.tar.gz | docker load
第三步:开放防火墙端口
这步踩过坑的人都知道有多重要——容器跑起来了但外面连不进来,十有八九是端口没开。
云服务商控制台:找到安全组或防火墙规则,添加:
| 协议 | 端口 | 来源 | 说明 |
|---|---|---|---|
| TCP | 59443 | 0.0.0.0/0 | DERP 主服务端口 |
| UDP | 3478 | 0.0.0.0/0 | STUN 端口 |
系统防火墙(如果开了的话):
Ubuntu/Debian:
sudo ufw allow 59443/tcp
sudo ufw allow 3478/udp
CentOS/RHEL:
sudo firewall-cmd --permanent --add-port=59443/tcp
sudo firewall-cmd --permanent --add-port=3478/udp
sudo firewall-cmd --reload
第四步:验证服务是否正常
docker logs tailscale-derp
看到 derp server started 或者 listening on :36666 就说明起来了。再跑一下 docker ps | grep tailscale-derp,状态是 Up 就没问题。
第五步:配置 Tailscale 使用你的节点
这是最关键的一步。打开 Tailscale 的 ACL 配置页面,在配置文件中添加 derpMap 字段:
{
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "mycustom",
"RegionName": "My Custom DERP",
"Nodes": [
{
"Name": "mycustom-1",
"RegionID": 900,
"HostName": "你的VPS公网IP",
"DERPPort": 59443,
"InsecureForTests": true
}
]
}
}
}
}
几个注意点:
HostName填你实际的 VPS IPDERPPort填 59443InsecureForTests: true是因为我们用 IP 而不是域名,不验证 SSL 证书。但别担心,Tailscale 的端到端加密是独立的,DERP 只是中转加密数据包,看不到内容OmitDefaultRegions: false保留官方节点作为备份,建议别关
保存后,所有设备会在几秒内自动刷新配置。
第六步:测试
在任意一台 Tailscale 设备上运行:
tailscale netcheck
如果输出里看到你的自定义节点,而且延迟在 10-30ms 左右,就说明部署成功了。对比官方的 tok(东京)动辄 85ms、sin(新加坡)92ms,差距立竿见影。
进阶玩法
防止重启失效:挂载整个 Tailscale 目录而不是单个 socket 文件,这样 Tailscale 客户端重启后 socket 路径变化也不怕:
-v /var/run/tailscale:/var/run/tailscale:ro
多节点负载均衡:如果你有多台 VPS 分布在不同地区,可以在 ACL 配置里添加多个 Region(比如 900 北京、901 广州),Tailscale 会自动选延迟最低的那个。
简单监控:写个脚本丢到 crontab 里,每小时检查一次容器状态:
#!/bin/bash
if ! docker ps | grep -q tailscale-derp; then
echo "DERP container is down! Restarting..."
docker start tailscale-derp
fi
常见问题
InsecureForTests 设为 true 安全吗? 完全安全。这个参数只是跳过 SSL 证书验证,Tailscale 本身的端到端加密不受影响,DERP 服务器只是转发加密数据包,看不到任何内容。
可以只用自建节点吗? 技术上可以,把 OmitDefaultRegions 设为 true。但不建议——你的 VPS 挂了设备之间就彻底断联了,留着官方节点当兜底更稳妥。
换了 VPS IP 怎么办? 重新跑 docker run 命令改一下 hostname,再更新 ACL 配置里的 IP 就行。
为什么用 Docker 而不是直接跑 derper? 方便管理,隔离性好,出问题删了容器重来就行。当然直接编译运行也可以,效果一样。
整套方案下来,一台最便宜的国内 VPS(月费十几块),5 分钟部署时间,换来的是完全可控、稳定可靠、延迟极低的私有中继节点。对于经常需要远程访问开发环境、管理多台服务器的独立开发者来说,这笔投入的性价比极高。如果你已经在用 Tailscale 但还在忍受时不时的高延迟,现在就可以动手试试。