LOADING...

加载中请稍等...

loading

本教程指导您在 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

  1. https://go.dev/dl/ 下载适合的 Go 安装包(例如 go1.22.4.linux-amd64.tar.gz)。
  2. 解压到 /usr/local
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
  1. 配置环境变量(在 ~/.bashrc~/.profile 中):
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
  1. 使配置生效:
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 解析。

关于我

全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!

关注我,发现更多旧物改造的乐趣与技巧!


头像
汪多多是只猫
失业的运维工程师
热爱开源与分享
微信公众号