自建 Tailscale DERP 中继服务器完整指南
引言:为什么需要自建 DERP?
Tailscale 是一款基于 WireGuard 的零配置 VPN 工具,它能让你的设备组成一个虚拟局域网。但在使用过程中,你可能会遇到以下问题:
- 连接速度慢:官方 DERP 服务器都在海外,国内连接延迟高达 200-500ms
- 稳定性差:高峰时段官方服务器可能拥挤,导致连接不稳定
- 隐私顾虑:所有中继流量都经过 Tailscale 官方服务器
- 企业合规:某些企业要求网络流量必须在内网环境
自建 DERP 服务器可以完美解决这些问题:延迟降低到 10-50ms,流量完全自主可控,还能节省官方免费额度的配额。
DERP 原理详解
什么是 DERP?
DERP 全称是 Defined Encrypted Relayed Protocol,即「定义加密中继协议」。它是 Tailscale 设计的一种专用中继协议,用于在设备无法直接 P2P 连接时进行流量中继。
Tailscale 连接建立过程
┌─────────────────────────────────────────────────────────────────────────┐
│ Tailscale 连接建立流程 │
└─────────────────────────────────────────────────────────────────────────┘
1. 注册与认证
┌──────────┐ ┌──────────────┐
│ 设备 A │ ───────────────────▶ │ Tailscale │
│ (北京) │ ◀─────────────────── │ Control │
└──────────┘ 获取网络信息 │ Server │
└──────────────┘
┌──────────┐ │
│ 设备 B │◀─────────────────────────────┘
│ (上海) │ 分发节点信息
└──────────┘
2. NAT 穿透尝试 (STUN/ICE)
┌──────────┐ ┌──────────┐
│ 设备 A │ ═══════════════════▶ │ 设备 B │ 直接连接成功!
│ (北京) │ P2P 直连 │ (上海) │ ✅ 最佳方案
└──────────┘ └──────────┘
3. NAT 穿透失败 → DERP 中继
┌──────────┐ ┌──────────┐
│ 设备 A │ ╳ NAT 限制阻止 │ 设备 B │
│ (北京) │ │ (上海) │
└────┬─────┘ └─────┬────┘
│ │
│ DERP 中继服务器 │
│ ┌────────────────────┐ │
└────▶│ DERP Server │◀─────┘
│ (加密转发流量) │
└────────────────────┘
⚡ 延迟增加
DERP 的工作原理
- 协调阶段:Tailscale 控制服务器协调双方尝试直接连接
- 穿透尝试:使用 STUN/ICE 技术尝试 NAT 穿透
- 回退机制:如果直连失败,自动切换到 DERP 中继
- 持续优化:后台持续尝试直连,成功后自动切换回 P2P
加密机制
🔐 端到端加密
DERP 服务器只能看到加密后的数据,无法解密内容:
- 基于 WireGuard 协议,使用 Noise 协议框架
- 每个连接使用独立的临时密钥
- DERP 服务器只负责转发,无法窃听流量
即使使用官方 DERP 服务器,你的数据也是安全的。但自建服务器能让你:
- 完全掌控网络基础设施
- 确保流量不离开你的网络环境
- 满足企业合规要求
服务器要求
硬件配置
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 1 核 | 2 核+ |
| 内存 | 512MB | 1GB+ |
| 带宽 | 1Mbps | 10Mbps+(取决于用户数) |
| 存储 | 10GB | 20GB+ |
端口要求
⚠️ 重要:必须开放的端口
自建 DERP 服务器需要开放以下端口:
443/TCP- HTTPS 流量(标准端口,推荐)10315/TCP- DERP 协议端口(或你自定义的端口)2367/TCP- STUN 端口(可选,用于 NAT 穿透)
确保云服务商的安全组/防火墙也放行了这些端口。
服务器选择建议
选择服务器时,考虑以下因素:
- 地理位置:选择离你团队最近的机房
- 带宽质量:选择 BGP 多线或优质单线
- 网络稳定性:选择知名云服务商
💡 推荐配置
对于 5-10 人的小团队,国内云服务商的最轻量配置(1核1G)完全足够:
- 阿里云轻量应用服务器 / 腾讯云轻量服务器
- 带宽 3-5Mbps 即可满足日常使用
- 成本约 30-50 元/月
搭建步骤
1 准备服务器环境
首先登录你的服务器,更新系统:
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装必要工具
sudo apt install -y curl wget
2 安装 Tailscale
DERP 服务器需要 Tailscale 来验证客户端身份:
# 一键安装 Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# 启动并登录 Tailscale
sudo tailscale up
# 查看状态
sudo tailscale status
3 下载并编译 derper
DERP 服务器程序是 Tailscale 开源项目的一部分:
# 安装 Go 语言(如果未安装)
sudo apt install -y golang-go
# 设置 Go 环境变量
echo 'export PATH=$PATH:/usr/local/go/bin:~/go/bin' >> ~/.bashrc
source ~/.bashrc
# 编译 derper
go install tailscale.com/cmd/derper@latest
# 查看编译结果
ls -la ~/go/bin/derper
# 移动到系统路径
sudo mv ~/go/bin/derper /usr/local/bin/
sudo chmod +x /usr/local/bin/derper
或者直接下载预编译的二进制:
# 下载最新版本(根据系统架构选择)
# Linux AMD64
wget https://pkgs.tailscale.com/derper/derper-linux-amd64 -O /usr/local/bin/derper
chmod +x /usr/local/bin/derper
# 验证安装
/usr/local/bin/derper --version
4 配置域名和证书
DERP 服务器需要 HTTPS 证书。推荐使用 Let's Encrypt 免费证书:
# 安装 certbot
sudo apt install -y certbot
# 申请证书(替换为你的域名)
sudo certbot certonly --standalone -d derp.yourdomain.com
# 证书路径
# 证书: /etc/letsencrypt/live/derp.yourdomain.com/fullchain.pem
# 私钥: /etc/letsencrypt/live/derp.yourdomain.com/privkey.pem
如果暂时没有域名,也可以使用自签名证书:
# 创建证书目录
sudo mkdir -p /etc/derper/certs
# 生成自签名证书
openssl req -x509 -newkey rsa:4096 -keyout /etc/derper/certs/key.pem \
-out /etc/derper/certs/cert.pem -days 365 -nodes \
-subj "/CN=你的服务器IP"
5 创建 systemd 服务
创建系统服务,让 derper 开机自启:
# 创建服务文件
sudo tee /etc/systemd/system/derper.service > /dev/null << 'EOF'
[Unit]
Description=Tailscale DERP Server
Documentation=https://tailscale.com/kb/1118/custom-derp-servers
After=network.target tailscaled.service
Requires=tailscaled.service
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/derper \
--hostname=derp.yourdomain.com \
--cert-dir=/etc/letsencrypt/live/derp.yourdomain.com \
--verify-clients=true \
--stun=true \
--a=0.0.0.0:10315
Restart=on-failure
RestartSec=5s
# 安全加固
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/derper
[Install]
WantedBy=multi-user.target
EOF
# 创建数据目录
sudo mkdir -p /var/lib/derper
# 重载 systemd
sudo systemctl daemon-reload
# 启动服务
sudo systemctl enable derper
sudo systemctl start derper
# 查看状态
sudo systemctl status derper
6 验证服务
检查 DERP 服务器是否正常运行:
# 检查端口监听
sudo ss -tlnp | grep derper
# 检查日志
sudo journalctl -u derper -f
# 测试 HTTPS 访问(替换为你的域名或 IP)
curl -v https://derp.yourdomain.com:10315/
# 应该看到类似输出:
# <html><body>DERP</body></html>
也可以在浏览器访问 https://derp.yourdomain.com:10315/,应该看到一个简单的 DERP 页面。
配置详解
derper 启动参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
--hostname |
DERP 服务器域名(用于证书) | --hostname=derp.example.com |
--cert-dir |
证书目录路径 | --cert-dir=/etc/letsencrypt/live/derp.example.com |
--a |
监听地址和端口 | --a=0.0.0.0:10315 |
--verify-clients |
验证客户端身份(推荐开启) | --verify-clients=true |
--stun |
启用 STUN 服务 | --stun=true |
--http-port |
HTTP 端口(默认 80) | --http-port=-1(禁用) |
--https-port |
HTTPS 端口(默认 443) | --https-port=10315 |
--mesh-psk-file |
预共享密钥文件(用于 DERP 集群) | --mesh-psk-file=/etc/derper/psk |
verify-clients 的重要性
🔒 安全建议
强烈建议开启 --verify-clients=true:
- 只有你 Tailscale 网络中的设备才能使用 DERP 服务器
- 防止陌生人白嫖你的服务器
- 需要 DERP 服务器也在你的 Tailscale 网络中
证书自动续期
Let's Encrypt 证书有效期 90 天,需要定期续期:
# 测试续期
sudo certbot renew --dry-run
# certbot 会自动添加续期任务
# 查看定时任务
sudo systemctl list-timers | grep certbot
防火墙配置示例
# UFW (Ubuntu)
sudo ufw allow 443/tcp
sudo ufw allow 10315/tcp
sudo ufw allow 2367/tcp
# firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=10315/tcp
sudo firewall-cmd --permanent --add-port=2367/tcp
sudo firewall-cmd --reload
客户端配置
添加自定义 DERP 服务器
有三种方式配置客户端使用你的 DERP 服务器:
方式一:通过管理控制台(推荐)
1. 登录 Tailscale 管理后台:https://login.tailscale.com/
2. 进入 Access Controls 页面
3. 编辑 ACL 文件,添加自定义 DERP 映射:
{
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "myderp",
"RegionName": "My DERP Server",
"Nodes": [
{
"Name": "myderp",
"RegionID": 900,
"HostName": "derp.yourdomain.com",
"DERPPort": 10315,
"STUNPort": 2367,
"STUNOnly": false,
"DERPOnly": false
}
]
}
}
},
// ... 其他 ACL 配置
}
配置说明:
OmitDefaultRegions: true- 禁用官方 DERP 服务器OmitDefaultRegions: false- 保留官方 DERP 服务器(推荐)RegionID- 区域 ID,900+ 为自定义 ID 范围DERPPort- DERP 服务端口STUNPort- STUN 服务端口(-1 表示禁用)
方式二:命令行配置(临时)
# macOS / Linux
sudo tailscale up --derp-map='{"OmitDefaultRegions":true,"Regions":{"900":{"RegionID":900,"RegionCode":"myderp","RegionName":"My DERP","Nodes":[{"Name":"myderp","RegionID":900,"HostName":"derp.yourdomain.com","DERPPort":10315,"STUNPort":2367}]}}}'
# Windows (PowerShell 管理员)
tailscale up --derp-map='{"OmitDefaultRegions":true,"Regions":{"900":{"RegionID":900,"RegionCode":"myderp","RegionName":"My DERP","Nodes":[{"Name":"myderp","RegionID":900,"HostName":"derp.yourdomain.com","DERPPort":10315,"STUNPort":2367}]}}}'
方式三:Headscale 用户
如果你使用 Headscale 自建控制服务器,在配置文件中添加:
# /etc/headscale/config.yaml
derp:
server:
enabled: true
region_id: 900
region_code: "myderp"
region_name: "My DERP Server"
listening_port: 10315
urls:
- https://derp.yourdomain.com:10315/derp
auto_update_enabled: true
update_frequency: 24h
验证配置
# 查看 DERP 服务器状态
tailscale status
# 查看当前使用的 DERP
tailscale netcheck
# 输出示例:
# DERP latency:
# - myderp: 20ms (你的服务器)
# - nyc: 180ms
# - sfo: 220ms
# 查看 DERP 映射
tailscale derpmap
各平台配置说明
macOS
# 使用管理控制台配置最简单
# 或使用命令行(需要 sudo)
sudo tailscale up --derp-map=...
Windows
# 以管理员身份运行 PowerShell
tailscale up --derp-map=...
# 或通过 Tailscale 托盘图标配置
Linux
# 需要 root 权限
sudo tailscale up --derp-map=...
iOS / Android
移动端无法直接配置 DERP 映射,需要通过以下方式:
- 管理控制台:在 ACL 中配置,对所有设备生效
- Headscale:在服务端配置 DERP 映射
与官方 DERP 对比
性能对比
| 指标 | 官方 DERP | 自建 DERP |
|---|---|---|
| 国内延迟 | 200-500ms | 10-50ms |
| 带宽 | 共享(有限制) | 独享(自定) |
| 稳定性 | 取决于网络 | 完全可控 |
| 地理位置 | 海外节点 | 就近部署 |
隐私与安全
| 方面 | 官方 DERP | 自建 DERP |
|---|---|---|
| 数据流经 | Tailscale 服务器 | 你的服务器 |
| 访问控制 | Tailscale 管理 | 完全自主 |
| 审计日志 | 有限 | 完全可控 |
| 合规性 | 数据跨境风险 | 可满足企业合规 |
成本分析
✅ 自建 DERP
- 国内云服务器:30-100 元/月
- 域名:约 50 元/年
- 证书:免费(Let's Encrypt)
- 总成本:约 35-105 元/月
❌ 官方方案
- 个人免费版:100 设备限制
- 企业版:$6/用户/月
- 无国内节点优化
适用场景
🎯 推荐自建 DERP 的场景
- 团队主要在国内,需要低延迟连接
- 对数据隐私有严格要求
- 需要满足企业合规要求
- 大量文件传输需求
- 希望减少对第三方服务的依赖
🎯 推荐使用官方 DERP 的场景
- 个人使用,设备数量少
- 主要在海外,官方节点延迟可接受
- 不想维护额外服务器
- 临时测试或轻量使用
常见问题
Q1:DERP 服务器显示连接但不工作?
检查以下几点:
- 确认证书有效:
curl -v https://derp.yourdomain.com:10315/ - 检查
--verify-clients=true时,DERP 服务器是否在 Tailscale 网络中 - 确认端口未被防火墙阻挡
- 查看 derper 日志:
journalctl -u derper -f
Q2:如何确认当前使用的 DERP 服务器?
# 查看网络状态
tailscale netcheck
# 查看 DERP 延迟
tailscale status
# 查看连接详情
tailscale ping --verbose 其他设备IP
Q3:自建 DERP 会影响 P2P 直连吗?
不会。DERP 只是备用方案:
- Tailscale 会优先尝试 P2P 直连
- 只有在直连失败时才使用 DERP 中继
- 直连成功后会自动切换回 P2P
Q4:如何部署多个 DERP 服务器?
在 ACL 配置中添加多个 Region:
{
"derpMap": {
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "bjderp",
"RegionName": "Beijing DERP",
"Nodes": [{"Name": "bjderp", "RegionID": 900, "HostName": "derp-bj.example.com", "DERPPort": 10315}]
},
"901": {
"RegionID": 901,
"RegionCode": "shderp",
"RegionName": "Shanghai DERP",
"Nodes": [{"Name": "shderp", "RegionID": 901, "HostName": "derp-sh.example.com", "DERPPort": 10315}]
}
}
}
}
Q5:忘记域名续期,证书过期了怎么办?
# 手动续期证书
sudo certbot renew --force-renewal
# 重启 derper 服务
sudo systemctl restart derper
Q6:DERP 服务器可以和中转服务(如 frp)共用吗?
可以,但要注意端口冲突:
- DERP 使用自定义端口(如 10315)
- 其他服务使用不同端口即可
- 确保服务器带宽和性能足够
Q7:如何监控 DERP 服务器状态?
# 使用 Tailscale 内置监控
tailscale derpmap
# 查看服务状态
sudo systemctl status derper
# 实时日志
sudo journalctl -u derper -f
# Prometheus 指标(如果启用)
curl http://localhost:10315/metrics
小结
自建 DERP 服务器虽然需要一些前期配置,但带来的好处是显著的:
- 性能提升:延迟从 200-500ms 降低到 10-50ms
- 隐私保护:流量完全在自己的服务器上
- 成本可控:月成本约 35-105 元
- 完全自主:不依赖第三方服务
📋 快速部署清单
- ✅ 准备一台国内云服务器(推荐阿里云/腾讯云)
- ✅ 购买域名并解析到服务器 IP
- ✅ 开放防火墙端口(443、10315、2367)
- ✅ 安装 Tailscale 并登录
- ✅ 申请 SSL 证书
- ✅ 编译安装 derper
- ✅ 创建 systemd 服务
- ✅ 在 ACL 中配置 DERP 映射
- ✅ 客户端验证连接
完成这些步骤后,你就可以享受低延迟、高隐私的 Tailscale 体验了!