自建TailScale Derper的一点人生的经验

前言

TailScale是一个很优秀的组网服务,特别适合拓展家里的局域网,让你在外面也可以访问家中的内网设备。基于WG 的底层设计也使得TailScale有更好的性能和安全性,但是TailScale的工作机制是先使用Relay节点(Derper)建立连接,再尝试进行打洞直连。由于我国特殊国情,一方面IPv4大部分处于NAT之后,导致连接大部分依赖Derper中转,另一方面Derper并没有国内的节点,导致连接的延迟很高。好在TailScale提供了一个Alpha版本的自建Derper指南(链接),但是要求必须开放443端口,对国内的VPS很不友好。但是经过测试与审阅源码,发现443并非必须,且仍可以利用客户端验证设备。要求如下:

  • 需要域名绑定IP
  • 需要HTTPS证书(如果自签证书,要保证连接到VPS的节点均信任此证书)
  • 开放端口(不必须443)

搭建方法

  1. 安装最新版Go(版本至少要1.16以上才能执行go install +url@version 命令,且Derper的代码只在最新版Golang下测试)
  2. 直接按照官方版指南安装官方最新版本Derper
  3. 为自己的域名签发HTTPS证书,需要 hostname.crt 与hostname.key 保存在同一目录
  4. 使用下面的语句执行启动Derper命令:
sudo derper --a :10080 --http-port -1 --certmode manual --certdir ./certDir --hostname HOSTNAME --verify-clients
# 假设SSL端口为10080 关闭http-port(-1) 将证书模式设置为手动(非443不可自动获取证书) 
# 指定证书的目录在certDir下,指定域名为 HOSTNAME,并开启客户端验证
  1. 最后记得加入本Derper节点到各客户端配置文件,如果使用官方版本,在Admin Console的ACL部分编辑即可,同步到各个节点可能要花费一部分时间。

客户端验证

在开启Derper的命令中加入 —verify-clients Flag可开启客户端验证功能,开启后只有账号下的设备可以接入本DERP。开启此功能的要求是:

  1. 必须有域名和证书绑定
  2. Derper节点也要运行TailScale并登录账号,接入用户的校验是通过调用本机的TailScale应用暴露的API来完成的。
Edit with markdown