本教程指导您在 VPS 上自建 Tailscale DERP 中继服务,包含 Go 环境安装、derper 编译/安装、自签名证书生成、derpMap 配置及 systemd 服务化示例,帮助提升无法 P2P 直连设备的连接稳定性。
简介
通过部署专属 DERP,您可以显著降低延迟、提升连接速度,并为无法 P2P 直连的设备提供稳定可靠的备用通道。本文涵盖环境准备、安装、证书配置、Tailscale 控制台设置与 systemd 服务化。
1. 安装 Tailscale(可选,用于测试)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
2. 安装 Golang
- 从 https://go.dev/dl/ 下载适合的 Go 安装包(例如
go1.22.4.linux-amd64.tar.gz)。 - 解压到
/usr/local:
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
- 配置环境变量(在
~/.bashrc或~/.profile中):
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
- 使配置生效:
source ~/.bashrc
3. 安装 derper 可执行文件
go install tailscale.com/cmd/derper@latest
# 安装完成后(示例),将可执行文件移动到系统路径
cp "$HOME/go/bin/derper" /usr/bin/
4. 生成自签名 SSL 证书(使用 IP 时)
mkdir -p /home/user/derp
cd /home/user/derp
DERP_IP="154.222.24.65" # 替换为你的 VPS 公网 IP
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout "${DERP_IP}.key" -out "${DERP_IP}.crt" \
-subj "/CN=${DERP_IP}" \
-addext "subjectAltName=IP:${DERP_IP}"
提示:如果使用域名,建议改用 Let’s Encrypt(
certmode letsencrypt),无需手动生成证书。
5. 启动 derper 服务(示例)
假设 HTTPS(DERP)端口为 10001,STUN 端口 10002,可用如下命令启动:
derper -a :10001 \
-http-port -1 \
-stun \
-stun-port 10002 \
-hostname 154.222.24.65 \
-certmode manual \
-certdir /home/user/derp \
-verify-client
常用参数说明(节选):
-a :PORT:监听地址与端口。-http-port -1:禁用 HTTP,仅启用 HTTPS。-stun/-stun-port:启用 STUN 服务与端口。-hostname:证书中的主机名或 IP。-certmode manual|letsencrypt:证书获取模式。-verify-clients:通过本地 tailscaled 验证客户端(推荐)。
6. 在 Tailscale 控制台添加 DERP 配置(derpMap)
编辑 Tailscale 控制台中的 ACL JSON,向 derpMap 添加自定义区域。例如:
"randomizeClientPort": true,
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "MY-VPS",
"RegionName": "My Custom VPS DERP",
"Nodes": [
{
"Name": "vps-node-01",
"RegionID": 900,
"HostName": "154.222.24.65",
"DERPPort": 10001,
"IPv4": "154.222.24.65",
"InsecureForTests": true,
"STUNPort": 10002
}
]
}
}
}
注意:若使用 IP 或自签名证书,
InsecureForTests需设为true,但这会降低安全性,仅在测试或受控环境使用。
保存后,可在任一客户端运行:
tailscale netcheck
确认输出中包含自定义 DERP 区域。
7. systemd 服务化(示例)
创建 systemd 服务文件 /etc/systemd/system/derp.service:
[Unit]
Description=Tailscale Private DERP Relay
After=network.target
[Service]
User=root
Restart=always
RestartSec=5
StartLimitInterval=0
ExecStart=/usr/bin/derper -a :10001 -http-port -1 -stun -stun-port 10002 -hostname 154.222.24.65 -certmode manual -certdir /home/user/derp -verify-client
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now derp.service
sudo systemctl status derp.service
sudo journalctl -u derp.service -f
验证与故障排查
- 检查端口是否开放(服务器防火墙/云主机安全组)。
- 使用
tailscale netcheck验证客户端连接。 - 若使用自签名证书,确保客户端或控制台配置允许该证书(或在测试时使用
InsecureForTests)。 - 查看 systemd 日志:
journalctl -u derp.service -n 200
参考与延伸
- Tailscale 官方文档与 derper 源码:
https://tailscale.com - 若需要使用 Let’s Encrypt,请把
-certmode改为letsencrypt并配置域名与 DNS 解析。
关于我
全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!
关注我,发现更多旧物改造的乐趣与技巧!