【Tailscale】DERPer中继从源码的搭建及Headscale导入

发布于 / 信息应用 / 0 条评论

DERP是Tailscale的中继服务器,负责交换客户端之间的连接信息和在无法直接连接时负责中继流量。其本身只负责协调和转发,不会解密协议承载的流量,因此使用官方的DERP服务器同样是安全的。但是,由于国内较为特殊的网络环境,官方的节点连接到中国大陆时延迟和稳定性均欠佳,而仅凭Headscale内置的单一节点有时是不满足需求的。

Tailscale Derper同样是一个官方开源软件的一部分,但是网上的教程多使用docker搭建,不是很适合在刁钻的环境下使用🥶,在此把博主的一些探索做一个简单的记录。

注意:这是一篇纯文字的流程记录,未添加详细的配图和说明,需要一定的基础进行实践。


一、编译DERP

DERP中继的docker搭建在互联网上已有大量的教程,并且操作非常简单。但是,docker下的derper镜像中不包含tailscale客户端,如果需要对接入设备进行认证则需要将宿主中的tailscale映射至容器中,反而增加了一些麻烦。实际上,derper程序本身也是一个基于go构建的binary单文件,只是官方未提供预编译包,需要我们自己使用go环境进行编译。

在以上的方法中,我们只是临时使用go环境,无需将其添加至环境变量,在使用后也可直接删除。在此获得derper二进制文件可以直接复制到任意同架构和系统版本的系统中运行,也就是你可以在任意同类的环境编译好后分再发到其他的服务器。


二、安装Tailscale

为了防止derper服务器被其他用户使用,我们需要在服务器上运行tailscale客户端接入自己的tailnet网络,来为开启了--verify-clients的derp提供认证信息。

安装过程不再赘述,但需要特别注意在阿里云的ECS上,MagicDNS使用的100.100.100.100地址与阿里云内网DNS冲突,会导致服务器联网出现问题。可以考虑切换服务器DNS至PublicDNS或修改Tailscale源码解除对该地址的占用。


三、运行DERPer

准备好derper二进制包后,接下来可以进行一些运行的测试工作。在此假设所有文件都位于/home/derp目录下,可以按照以下的方式选择一个合适你使用场景的命令。

搭配NGINX转发可以更好的隐藏服务特征,因此博主均使用第三种配置方式作为演示。对于使用systemd的系统(如debian、ubuntu等),将其修改好写入对应位置后,依次进行以下配置实现授权、启动和开机自启:

文件路径:/etc/systemd/system/derper.service
管理进程:service derper start|stop|status
开机自启:rc-upadte add derper

对于像Alpine一样使用init.drc-local的系统,将其修改好写入对应位置后,依次进行以下配置实现授权、启动和开机自启:

文件路径:/etc/init.d/derper
文件提权:chmod +x /etc/init.d/derper
管理进程:/etc/init.d/derper start|stop|status
开机自启:rc-upadte add derper

NGINX在vhsot和证书配置好后,只需要为/derp路径添加反向代理配置即可,无需对全局进行反向代理(也就是可以做到依附在某个网站上)。如果在headscale的derp.yaml中设定了IP地址则该域名可以不进行DNS解析,具有非常好的隐蔽性。配置好后,直接访问对应的路径会有DERP的提示信息,如果确有需要还可以通过sub_filter去掉。


四、添加DERP

Headscale的搭建可以参考博主之前的文章(点击前往),首先需要在headscale的config.yamlderp字段下取消注释paths:并设置好其下的derp.yaml路径,实现从该文件载入DERP列表。官方有提供derp.yaml的示例(点击前往),按照derper的实际信息进行填写。配置好后,重启headscale服务即可。


五、结语

添加结束后,可在客户端使用tailscale netcheck检查是否添加成功,并获得延迟信息。由于Tailscale客户端以延迟排序选择DERP节点,可能需要暂时移除部分其他DERP节点以对其进行单独测试。当DERP节点不可用时Tailscale客户端会有很明显的报错出现,tailscale status中的relay也会降级至其他节点。

由于博主的需求比较片面,其他未尽的内容和错误欢迎大家在评论区补充和指正~


*原创文章,转载请注明出处

转载原创文章请注明,转载自: Luminous' Home » 【Tailscale】DERPer中继从源码的搭建及Headscale导入

No Comment Found