如何部署 Tailscale Derper
Tailscale 是一个很方便的组网工具,通过它可以将处在不同网络环境,甚至不同国家地区的设备连接到同一个虚拟局域网中。但官方的 DERP 服务器都在国外,如果无法成功打洞,中转延迟会非常高,我们可以在国内(或者离使用地区最近的地方)部署一个或多个 DERP 服务器来降低中转延迟,提高访问速度。
如果你正在自托管 Headscale,自建 DERP 服务器将是必须的。
Headscale 自带了内置 DERP 服务器,但我不建议使用它(如果中转流量过大,可能会影响控制信息正常传输)。
准备工作
你需要准备一台带有公网 IP 的服务器,并在防火墙中开放TCP 80、TCP 443和UDP 3478端口。你还需要准备一个域名,并将域名解析至服务器。
请注意:如果你计划使用中国大陆的服务器,域名还需要完成 ICP 备案。
安装 Golang
在进行下一步前,你需要先在服务器上安装 Golang。具体步骤可以查看 go.dev 上的说明,本文不再阐述。
编译和安装
依次执行以下指令:
git clone https://github.com/tailscale/tailscale.git
cd tailscale
go build cmd/derper
sudo mv derper /usr/sbin/derper
安装系统服务
将以下内容写入 /etc/systemd/system/derper.service:
[Unit]
Description=Derper
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service
[Service]
ExecStart=/usr/sbin/derper --hostname 将这里换成你提前准备的域名 -a :443 -http-port 80 -certmode letsencrypt --certdir /var/lib/derper/certs
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后依次执行命令创建数据文件夹、激活和启动服务:
mkdir -p /var/lib/derper
sudo systemctl daemon-reload
sudo systemctl enable derper
sudo systemctl start derper
配置 Tailscale
1. 修改 ACL
进入 Tailscale 管理后台,选择 Access controls 标签栏,编辑内容:
{
// ...
"grants": [
// ...
],
// ...
// 追加以下信息
"derpMap": {
"Regions": {
"900": {
"RegionID": "900",
"RegionCode": "my_derper",
"RegionName": "My Derper",
"Nodes": [
{
"Name": "My Derper",
"RegionID": "900",
"HostName": "将这里换成你提前准备的域名"
}
]
},
// 禁用官方 DERP 服务器,如果不需要可以不写
"1": null,
"2": null,
"3": null,
"4": null,
"5": null,
"6": null,
"7": null,
"8": null,
"9": null,
"10": null,
"11": null,
"12": null,
"13": null,
"14": null,
"15": null,
"16": null,
"17": null,
"18": null,
"19": null,
// "20": null, # 避免自建的derper挂掉后tailscale无法使用,保留20(Hong Kong)作为备选
"21": null,
"22": null,
"23": null,
"24": null,
"25": null,
"26": null,
"27": null,
"28": null
}
}
}
2. 验证
在已连接 Tailscale 的客户端上执行 tailscale netcheck,查看输出是否包含自建 DERP 服务器:
Report:
* Time: 2025-07-30T15:17:57.176736Z
* UDP: true
* IPv4: yes, 127.0.0.1:114514
* IPv6: no, but OS has support
* MappingVariesByDestIP: true
* PortMapping:
* CaptivePortal: false
* Nearest DERP: My Derper
* DERP latency:
- my_derper: 162ms (My Derper)
设置客户端验证
默认情况下,自建的 DERP 服务器可以被所有知道服务器 IP 的 Tailscale 用户(包括 Headscale 实例)使用,可以设置客户端验证功能来限制只有自己的网络可用。
1. 服务器安装 Tailscale
你需要在服务器上安装 Tailscale,并加入你的网络。具体步骤请参阅 官网,本文不再阐述。
2. 修改配置
在此前的 Systemd 服务配置文件中追加 -verify-clients 参数,修改后的文件大概长这样:
[Unit]
Description=Derper
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service
[Service]
ExecStart=/usr/sbin/derper --hostname 将这里换成你提前准备的域名 -a :443 -http-port 80 -certmode letsencrypt --certdir /var/lib/derper/certs -verify-clients
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后重启服务:
sudo systemctl daemon-reload
sudo systemctl restart derper