自部署Tailscale DERP中继服务器实践分享
在我的个人网络规划中,tailscale的核心地位越来越突出,其作用也非常明显,所以在查阅部分资料,并了解了相关应用后我最终决定自建DERP中继服务器。提高在国内网络环境下的服务质量,进而提高个人网络综合可用性。
环境介绍
云服务商:Huawei CLoud
主机架构:x86-64
操作系统:Debian11.1
tailscale版本:1.62.0
目标环境
Golang 版本:1.22.1(当前官网最新版)
tailscale DERPer服务器
操作步骤
安装Tailscale客户端
安装Tailscale客户端,并完成绑定,参考以往文章tailscale的安装配置和使用 | 光溯星河 (tsio.top)
这里注意,安装完成后不要启动tailscale,或完成绑定后关闭tailscale,因为我出现了tailscale导致的无法联网问题,不知道是不是华为云规则的问题,后续再仔细排查
安装Golang环境
参考文章:Linux 下安装 Golang(适用于1.18及以上版本)_linux 安装golang-CSDN博客
下载Golang,前往官方Release页面挑选适合自己的版本,下载到合适位置
解压文件到
/usr/local
目录下
wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz
打开/etc/profile,严格大小写在文末添加如下配置
#golang env config
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
保存并退出后,执行
source /etc/profile
,使配置修改生效使用go version命令验证是否成功安装
安装derper服务
su进入超级用户权限执行以下任务
配置go代理并安装tailscale derper
go env -w GOPROXY=https://goproxy.cn,direct
go install tailscale.com/cmd/derper@main
进入
~/go/pkg/mod/[tailscale]/cmd/derper
文件夹内执行go编译
go build -o /etc/derp/derper
编译完成后,在该目录下修改cert.go文件,注释以下代码
然后再次编译
执行
ls /etc/derp
如果显示derper目录则安装成功
注册为系统服务
生成ssl证书,注意修改为自己的域名
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.test.com.key -out /etc/derp/derp.test.com.crt -subj "/CN=derp.test.com" -addext "subjectAltName=DNS:derp.test.com"
编写derper的配置文件
sudo nano /etc/systemd/system/derper.service
将以下内容写入到derper.service文件中
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/derper -hostname derp.test.com -a :<端口> -http-port 33446 -certmode manual -certdir /etc/derp --verify-clients
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
注意修改域名和-a后的端口。
放行云服务器相关端口
tailscale直连端口:TCP 41641
derp端口:TCP 与上方文件-a端口保持一致
derp stun端口:UDP 3478
启动tailscale
sudo tailscale up 将tailscale启动
处理iptables端口规则,解决无法连接外网问题
iptables -L --line-numbers #查看当前规则
iptables -D INPUT <num> #删除num对于的入站规则,本例为1
再输入 iptables -L --line-numbers 就会发现ts-input的规则被删掉了
此时再ping接外网网站就能正常连接了。
启动服务并设置自启规则
sudo systemctl start derper
sudo systemctl enable derper
访问域名+端口看到以下页面表示服务正常运行:
Tailscale Admin后台修改derp服务器
登录后台,进入Access Controls,在ssh前添加如下配置:
"derpMap": {
// OmitDefaultRegions 用来忽略官方的中继节点
"OmitDefaultRegions": true,
"Regions": {
// 这里的 901 从 900 开始随便取数字
"901": {
// RegionID 和上面的相等
"RegionID": 901,
// RegionCode 自己取个易于自己名字
"RegionCode": "HWCloud-DERP",
"Nodes": [
{
// Name 保持 1不动
"Name": "1",
// 这个也和 RegionID 一样
"RegionID": 901,
// 域名
"HostName": "derp.test.com",
// 端口号
"DERPPort": <端口>,
},
],
},
},
},
检验
回到终端设备,执行tailscale check
,如果DERP latency中显示了刚刚添加的服务器则说明配置添加成功。