简记 TailScale 自建 DERP 服务器流程
你说咕咕咕了快一年的那个项目是不是该提上日程了?
哪个?就是那个,那个……
简记 TailScale 自建 DERP 服务器流程
relay延迟动辄300ms有点难顶。
反正开学期间也挺闲的 虽然要速通三科 折腾了一天就出来了,记录一下。
要不是因为把udp防火墙开成了tcp怎么会卡了一整天呢
Derper 官方文档流程
参考官方文档走流程即可,golang版本1.22可用。
|
|
完成后,derper二进制文件位于./go/bin/derper
。
加入证书
假设使用域名derp.example.com
:
- 证书文件为
derp.example.com.crt
,PEM格式 - 私钥文件为
derp.example.com.key
。
两个文件放在同一目录下备用。
使用acme.sh默认参数申请的证书就可以,不过要改个后缀.cer->.crt
。
配置项总结
-
更改默认https/stun端口号
-
更改默认http端口号/禁用http
-http-port $port
若
$port
为-1,则禁用http。建议禁用。 -
更改默认https端口号
-a :$port
$port
为端口号。 -
更改默认stun端口号
-stun-port $port
$port
为端口号。
-
-
指定域名
-hostname derp.example.com
请注意证书名称应与此处
hostname
后的FQDN
一致,本例中应为derp.example.com.crt
和derp.example.com.key
。 -
指定证书(手动模式)
-certmode manual -certdir /path/to/cert
/path/to/cert
为证书文件所在目录,上文两个文件放在同一目录下备用
的那个目录。 -
仅允许你tailscale网络内的客户端连接
-verify-clients
这个选项要求你的DERP服务端环境内有Tailscale客户端,且已经加入网络。
防火墙放行
请各显神通。但记住stun端口是udp,https端口是tcp。
测试
通过访问https站点测试
https://$FQDN:$https_port
,如https://derp.example.com:443
。
有显示DERP This is a Tailscale DERP server.
即为成功。
通过depprobe测试
|
|
准备map.json
文件。
|
|
完成后转到./go/bin/
,执行下列指令:
|
|
三个good就是OK的。
在Tailscale网络中的设备上使用Tailscale客户端测试
|
|
netcheck中应可以看到新建DERP服务器的延迟,但请注意此处只检测STUN端口是否开放,不保证可用性。
status中可以看到与各个设备之间的连接状态,若成功会在链路上看到relay及你服务器名称。
在Tailscale官网ACL中添加DERP服务器
下文中的900可取900-999之间的任意数字。
第一行被注释掉的意义为禁用官方提供的DERP服务器。若在服务调试过程中且没有备用直连手段,请谨慎开启。
Nodes
节中的InsecureForTests
选项是为了在测试时不验证证书,若证书可用,正式环境中请删除;若自签名,请保留。
|
|
You are good to go!
Enjoy your DERP server!
Optional: 写入systemd服务
请自行替换以$开头的变量。下文中derper_psk_path
只需要目录有权限可写即可,默认值为/var/lib/derper/derper.key
。
|
|
Optional: 反向代理
常规写法即可,但在proxy
节中需要添加下面两行,参考这里。
|
|
且注意proxy_pass后面的地址应为https://
。
web页面套上一层cloudflare似乎是不影响延迟的。