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 标签栏,编辑内容:
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 参数,修改后的文件大概长这样:
然后重启服务: