本文档介绍如何在 Alpine Linux 和 Debian 系统上部署 Tailscale DERP 服务器。
/opt/derper/ ├── derper # DERP 服务器可执行文件 ├── certs/ # SSL 证书目录 │ ├── your-domain.crt │ └── your-domain.key └── log/ # 日志目录 ├── derper.log └── derper.err
| 参数 | 说明 | 示例 |
|---|---|---|
--hostname | 服务器主机名或 IP | your.server.ip |
--certmode | 证书模式 | manual |
--certdir | 证书目录 | /opt/derper/certs |
--a | DERP 服务监听地址 | :15566 |
--stun-port | STUN 端口 | 15567 |
--http-port | HTTP 端口(-1 表示禁用) | -1 |
--verify-clients | 是否验证客户端 | false |
--verify-client-url | 客户端验证 URL | https://verify.example.com |
--verify-client-url-fail-open | 验证失败时是否允许连接 | false |
./derper \ --hostname=your.server.ip \ --certmode=manual \ --certdir=./certs \ --a=:15566 \ --stun-port=15567 \ --http-port=-1 \ --verify-clients=false \ --verify-client-url=https://verify.example.com \ --verify-client-url-fail-open=false
后台运行:
nohup ./derper \ --hostname=your.server.ip \ --certmode=manual \ --certdir=./certs \ --a=:15566 \ --stun-port=15567 \ --http-port=-1 \ --verify-clients=false \ --verify-client-url=https://verify.example.com \ --verify-client-url-fail-open=false \ > derper.log 2>&1 &
vi /etc/init.d/derper
写入以下内容:
#!/sbin/openrc-run
name="derper"
description="Tailscale DERP Server"
command="/opt/derper/derper"
command_args="--hostname=your.server.ip --certmode=manual --certdir=/opt/derper/certs --a=:15566 --stun-port=15567 --http-port=-1 --verify-clients=false --verify-client-url=https://verify.example.com --verify-client-url-fail-open=false"
command_background="yes"
pidfile="/run/${RC_SVCNAME}.pid"
output_log="/opt/derper/log/derper.log"
error_log="/opt/derper/log/derper.err"
depend() {
need net
}
# 添加执行权限
chmod +x /etc/init.d/derper
# 启动服务
rc-service derper start
# 设置开机自启
rc-update add derper default
# 查看状态
rc-service derper status
# 停止服务
rc-service derper stop
# 重启服务
rc-service derper restart
vim /etc/systemd/system/derper.service
写入以下内容:
[Unit]
Description=Tailscale DERP Server
After=network.target
Documentation=https://tailscale.com/
[Service]
WorkingDirectory=/opt/derper
ExecStart=/opt/derper/derper \
--hostname=your.server.ip \
--certmode=manual \
--certdir=/opt/derper/certs \
--a=:15566 \
--stun-port=15567 \
--http-port=-1 \
--verify-clients=false \
--verify-client-url=https://verify.example.com \
--verify-client-url-fail-open=false
Restart=always
RestartSec=5
User=root
StandardOutput=append:/opt/derper/log/derper.log
StandardError=append:/opt/derper/log/derper.err
[Install]
WantedBy=multi-user.target
# 重新加载配置
systemctl daemon-reload
# 启动服务
systemctl start derper
# 设置开机自启
systemctl enable derper
# 查看服务状态
systemctl status derper
# 停止服务
systemctl stop derper
# 重启服务
systemctl restart derper
# 查看实时日志
journalctl -u derper -f
使用 --certmode=manual 时:
<hostname>.crt - SSL 证书文件<hostname>.key - SSL 私钥文件例如,如果 --hostname=derp.example.com:
/opt/derper/certs/ ├── derp.example.com.crt └── derp.example.com.key
注意:自签名证书需要在客户端信任该证书,否则建议使用正规 CA 签发的证书。
确保以下端口已开放:
| 端口 | 协议 | 说明 |
|---|---|---|
| 15566 | TCP | DERP 服务端口 |
| 15567 | UDP | STUN 端口 |
iptables -A INPUT -p tcp --dport 15566 -j ACCEPT iptables -A INPUT -p udp --dport 15567 -j ACCEPT
ufw allow 15566/tcp ufw allow 15567/udp
使用 --verify-client-url 可以在不将 DERP 服务器添加为 Tailscale 节点的情况下验证客户端。
参考项目:tailscale-derp-client-verifier
在信任的 Tailscale 节点上获取节点列表,并同步到 DERP 服务器:
# 导出节点公钥列表
tailscale status --json | jq '[recurse | objects | with_entries(select(.key == "PublicKey")) | .[]] | sort' > nodes.json
将 nodes.json 同步到 DERP 服务器(可通过 S3、rclone、scp 等方式)。
在 DERP 服务器上运行 tailscale-derp-client-verifier:
本地文件模式:
./tailscale-derp-client-verifier -path /path/to/nodes.json
S3 存储模式:
# .env 文件
S3_ACCESS_KEY_ID=your_access_key
S3_SECRET_ACCESS_KEY=your_secret_key
S3_ENDPOINT=https://s3.example.com
S3_REGION=us-east-1
S3_BUCKET=your_bucket
S3_FILE=nodes.json
S3_FORCE_PATH_STYLE=true
# 运行
source .env && ./tailscale-derp-client-verifier
验证服务默认监听 http://127.0.0.1:3000。
./derper \ --hostname=your.server.ip \ --certmode=manual \ --certdir=/opt/derper/certs \ --a=:15566 \ --stun-port=15567 \ --http-port=-1 \ --verify-clients=false \ --verify-client-url=http://127.0.0.1:3000 \ --verify-client-url-fail-open=false
| 参数 | 说明 |
|---|---|
--verify-clients=false | 不使用内置验证(需要 DERP 服务器加入 Tailscale 网络) |
--verify-client-url | 外部验证服务地址 |
--verify-client-url-fail-open=false | 验证失败时拒绝连接(安全模式) |