部署私有DERP中继服务器
如果在使用Tailscale的过程中,发现连接或者传输速度比较慢,可以看看这篇文章。
问题点
之前我们介绍了如何用Headscale来替代Tailscale官方的控制服务器,并接入各个平台,但现在有个问题。由于家里带宽没有外网,是通过NAT的方式连接的,而且这个还是最复杂的,因此如果我想要从我的mac访问家里的windows,只能通过一台拥有公网的服务器来做中继。
Tailscale有自己的中继服务器,但是都绕过了国内,所以如果通过Tailscale的话,速度会变得很慢,因为我们需要自建中继服务器。
自建私有DERP服务
为了实现低延迟、高安全性,我们可以参考Tailscale 官方文档自建私有的DERP服务器。有两种部署模式,一种是基于域名,另外一种不需要域名,可以直接使用IP,不过推荐大家使用域名,因此我这里不会介绍IP的方法。
原文是直接使用docker,而我是直接在服务器下安装的
安装golang环境
Tailscale项目使用的golang环境比较新,部署自定义derper服务要求golang版本1.16以上。推荐尽可能安装最新的版本。
|
|
更改环境变量
|
|
|
|
保存退出后,执行生效命令
|
|
检查golang是否安装成功
|
|
安装derper服务
设置go代理,并安装
|
|
检查
|
|
在安装路径下编写启动脚本,由于443端口已经被nginx使用,这个就指定了10443,为准了,
|
|
|
|
- -hostname:域名
- -c:配置文件
- -a:指定端口
- -http-port:-1为不使用http端口
- -certdir:存放证书的文件夹`
然后给文件授予可执行权限
|
|
编写停止脚本
|
|
|
|
然后给文件授予可执行权限
|
|
在/data/cert
放入ssl证书,一定要放入derper.hikoutei.cn.crt
和derper.hikoutei.cn.key
的证书文件。
添加服务脚本
|
|
|
|
启动服务并设置开机启动
|
|
至此derper就部署完毕,接下来配置Headscale来使用自定义的的derp服务器了
|
|
|
|
- regions:下面的每一个对象表示一个可用区,可用区必须是数字,每个可用区里面可设置多个DERP节点,即
nodes
- 每个可用区的
regionid
不能重复 - 每个
node
的name
不能重复 regionname
一般用来描述可用区,regioncode
一般设置成可用区的缩写ipv4
字段不是必须的,如果你的域名可以通过公网解析到你的DERP服务器地址,这里可以不填。如果你使用了一个二级域名,而这个域名你并没有在公共DNS server中添加相关的解析记录,那么这里就需要指定IP(前提是你的证书包含了这个二级域名,这个很好支持,搞个泛域名证书就行了
接下来还需要修改Headscale的配置文件
|
|
|
|
修改完配置后,重启headscale服务
|
|
在Tailscale客户端上使用以下命令查看目前可以使用的DERP服务器
|
|
tailscale netcheck
只检测3478/udp
的端口, 就算netcheck显示能连,也不一定代表10443端口可以转发流量。最简单的办法是直接打开DERP服务器的 URL:https://xxxx:10443,如果看到如下页面,且地址栏的SSL证书标签显示正常可用,那才是真没问题了
防止DERP被白嫖
默认情况下DERP服务器是可以被白嫖的,只要别人知道了你的DERP服务器的地址和端口,就可以为他所用。如果你的服务器是个小水管,用的人多了可能会把你撑爆,因此我们需要修改配置来防止被白嫖。
特别声明:只有使用域名的方式才可以通过认证防止被白嫖,使用纯 IP 的方式无法防白嫖,你只能小心翼翼地隐藏好你的 IP 和端口,不能让别人知道
只需要做两件事情:
- 在 DERP 服务器上安装 Tailscale。
第一步需要在 DERP 服务所在的主机上安装 Tailscale 客户端,启动 tailscaled 进程。
- derper 启动时加上参数
--verify-clients
。
总结
关于中继协议等等更多知识,请查看原始文章