了解Tailscale很久,但是基本很少用,常用的场景下基本没有办法直联,官方中继延迟太高了。后来突然有一天了解到,tailscale可以自行部署中转服务器derp,于是就打算部署一个来解决延迟太高的问题.
过程中基本是按照官方文档来进行操作,文档本身已经写的很好了,只是正好不是我的母语,tailscale我又没有特别的深入使用,同时又有不少专属名词,导致有点东西理解,因此大概折腾了一周左右,反反复复的折腾,才算是真正的搞好和理解。
下面是具体操作步骤:
-
打开云服务器的防火墙设置,当前教程下需要开启10443(tcp协议),3478(UDP协议), icmp协议的防火墙策略。以上防火墙策略是必须的。
-
在云服务上安装go应用程序,具体参考go官网
-
执行一下命令,安装并编译最新的derper程序。(这个步骤可能在你的tailscale无法连接到这个中继服务器的时候重复执行,以保持与tailscale各个客户端的兼容性)
go install tailscale.com/cmd/derper@latest
-
安装certbot程序(其实就是Let`s Encryept)来获取https证书, 具体安装步骤见certbot官网
-
执行一下命令获取https证书,一切按照默认继续下去即可。具体意思就是单独获取你域名的nginx证书,并保存到指定路径。
sudo certbot certonly --manual --preferred-challenges dns -d <你的域名>
-
上一步获取到https证书之后,会打印出来证书保存的路径。其中fullchain.pem和privkey.pem分别代表你证书的crt和key,在很多地方使用https证书的时候会指定具体的crt和key文件路径。我们通过ln -s命令分别创建privkey.pem的副本,并重命名为.crt和.key的后缀文件。
sudo ln -s <cerbot证书保存路径>/fullchain.pem <cerbot证书保存路径>/<你的域名>.crt sudo ln -s <cerbot证书保存路径>/privkey.pem <cerbot证书保存路径>/<你的域名>.key
-
启动derper程序开启中继服务
sudo <go的bin目录>/derper -a :10443 --http-port=-1 --hostname=<你的域名> -certmode manual -certdir <cerbot证书保存路径> --verify-clients
- -a :10443 指定https服务的监听端口为10443,且监听所有网口
- http-port=-1 不开启http服务
- hostname 指定你的derp中继服务的对外域名
- certmode manual代表手动管理https证书
- certdir 指定手动管理的https证书的具体路径
- –verify-clients 代表需要校验tailscale的客户端,这个可以去掉(第8步无需执行)。但是就意味着你的服务谁都可以使用
-
在云服务器上安装tailscale客户端,并登录授权,具体参考官网。
-
配置tailscale客户端访问策略,通过tailscale管理平台配置, 在文件的最后一个}加入一下内容。
"derpMap": { "OmitDefaultRegions": true, "Regions": { "900": { "RegionID": 900, "RegionCode": "myderp", "Nodes": [ { "Name": "1", "RegionID": 900, "HostName": "<你的域名>", "DERPPort": 10443, }, ], }, }, },
- OmitDefaultRegions代表是否需要禁用默认的中继服务器,因为我都是国内服务器,因此不需要官方的国外中继服务器,所以默认true,禁用
- DERPPort代表你的derp服务的https端口,如需改变需要将本文中所有涉及到10443端口的地方都修改为同一个端口
- derpMap下用户可以自定义的Regions最小开头是900,900-999是用户可以自定义的,不要随便定义。