方永、南天紫雲

道亦有道

Tailscale自建DERP服务节点
2023年08月19日

Tailscale 是开源的,也很好用,就是其中转节点(DERP) 都在国外,所以速度还是慢了点。

有台闲置的国内主机,想着利用起来,搭个DERP,加快Tailscale的访问速度。

搭完后发现目前网上搭建DERP的教程过于繁琐,一些关键之处也没有说清楚,于是记录一下过程。

DERP 的工作方式

DERP 提供了中转和STUN两种服务,STUN是可选的,有配置项可以关闭,如果需要开启,就得占用一个UDP端口; 而中转服务的传输层是websocket,只需放在常见的nginx等代理服务之后即可,无需在防火墙开启端口。

建议最好开启STUN,这里观察到的现象是,如果没有开启,在tailscale netcheck里自建节点的 ping 值是不显示的。

安装、配置、运行

  1. 安装
go install tailscale.com/cmd/derper@main
cp ~/go/bin/derper /usr/local/bin
  1. 运行
/usr/local/bin/derper -a=:1234 -stun-port=12345 -c=/var/lib/derper/derper.key
  1. nginx 的部分配置
location / {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:1234;
}

记得配好https

添加DERP节点

在浏览器打开 Tailscale 管理页面,切换到 Access Controls,添加如下配置, "derpMap" 和 "groups", "hosts" 等同一级。

"derpMap": {
		"Regions": {
			"900": {
				"RegionID":   900,
				"RegionCode": "myderp",
				"RegionName": "国内01-shanghai",
				"Nodes": [
					{
						"Name":     "1",
						"RegionID": 900,
						"HostName": "derp.xxx.com",
						"STUNPort": 12345,
					},
				],
			},
		},
	},

验证

添加完DERP后,用 tailscale netcheck 就能看到,等待片刻,或者尝试重启 tailscaled ,Tailscale 就 会自动选取ping值最低的DERP节点。

也可以使用 derpprobe 去验证,若没有报错,说明配置是正确的。

参考

  1. Custom DERP Servers