部署私有 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
。
总结
关于中继协议等等更多知识,请查看原始文章