logo
0
0
WeChat Login
chore: 添加 tailscale-derp-client-verifier 作为备份

DERP Server 部署指南

本文档介绍如何在 Alpine Linux 和 Debian 系统上部署 Tailscale DERP 服务器。

目录结构

/opt/derper/
├── derper              # DERP 服务器可执行文件
├── certs/              # SSL 证书目录
│   ├── your-domain.crt
│   └── your-domain.key
└── log/                # 日志目录
    ├── derper.log
    └── derper.err

参数说明

参数说明示例
--hostname服务器主机名或 IPyour.server.ip
--certmode证书模式manual
--certdir证书目录/opt/derper/certs
--aDERP 服务监听地址:15566
--stun-portSTUN 端口15567
--http-portHTTP 端口(-1 表示禁用)-1
--verify-clients是否验证客户端false
--verify-client-url客户端验证 URLhttps://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 &

Alpine Linux (OpenRC)

创建服务脚本

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

Debian (Systemd)

创建服务文件

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 时:

  • 如果证书目录为空:DERP 服务器会自动生成自签名证书
  • 如果已有证书:需放置以下文件
    • <hostname>.crt - SSL 证书文件
    • <hostname>.key - SSL 私钥文件

例如,如果 --hostname=derp.example.com

/opt/derper/certs/
├── derp.example.com.crt
└── derp.example.com.key

注意:自签名证书需要在客户端信任该证书,否则建议使用正规 CA 签发的证书。

防火墙配置

确保以下端口已开放:

端口协议说明
15566TCPDERP 服务端口
15567UDPSTUN 端口

Alpine Linux (iptables)

iptables -A INPUT -p tcp --dport 15566 -j ACCEPT
iptables -A INPUT -p udp --dport 15567 -j ACCEPT

Debian (ufw)

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

步骤三:配置 DERP 服务器

./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验证失败时拒绝连接(安全模式)

参考链接

About

No description, topics, or website provided.
Language
Go100%