自建Tailscale DERP服务
背景及准备工作
背景:懂得都懂。
- 一台 1C1G 以上配置的服务器
- 服务器能开放stun的端口 UDP/3478
- 一个域名
- (可选)SSL证书
- 防火墙放行端口
- iptables/nftables和服务器安全组都要放行以下端口:
- UDP/3478
- TCP/ - 请改为一个你需要的端口
安装Tailscale客户端(提供客户端鉴权)
如果你要搭建的是公共的Tailscale DERP服务,不需要鉴权,这一步可以跳过
curl -fsSL https://tailscale.com/install.sh | sh
安装Golang
请确保不存在旧版Golang
查看最新版本
前往Golang官网查看最新版本号
https://go.dev/doc/install
查看服务器架构
使用 uname 查询架构:
uname -m
安装
下载最新版Golang
wget https://go.dev/dl/go<LATEST>.linux-<ARCH>.tar.gz
解压
sudo tar -C /usr/local -xzf $HOME/go*.tar.gz
添加环境变量
在你的 /etc/profile 添加以下两行:
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
刷新当前环境
source /etc/profile
检查是否生效
go version
安装Derper
mkdir -p /opt
mkdir -p /opt/derper
mkdir -p /usr/local/gopath/bin
# 如果你的服务器在境内,可以为Go配置代理加速
#go env -w GOPROXY=https://goproxy.cn,direct
go install tailscale.com/cmd/derper@main
启停脚本
创建启动脚本
新建 /opt/derper/runderper 文件
如果你需要SSL,把SSL证书上传到 /usr/local/cert 文件夹
证书命名格式为
<DOMAIN>.<SUFFIX>
其实就是你发布这个服务的域名名称
将证书文件后缀改为 crt ,密钥文件后缀改为 key
#!/bin/sh
cd /usr/local/gopath/bin
nohup ./derper -hostname <DOMAIN> -c=derper.conf -a :<PORT> -http-port -1 -certdir /usr/local/cert -certmode manual -verify-clients -stun > console.log 2>&1 &
echo $! > app.pid
如果你不需要SSL,直接写入以下内容
#!/bin/sh
cd /usr/local/gopath/bin
nohup ./derper -hostname <DOMAIN> -c=derper.conf -a :<PORT> manual -verify-clients -stun > console.log 2>&1 &
echo $! > app.pid
如为公共服务,请去掉 -verify-clients 参数
创建停止脚本
新建 /opt/derper/stopderper 文件
#!/bin/sh
kill `cat app.pid`
rm -rf app.pid
赋予执行权限
chmod +x /opt/derper/*
#chmod +x /opt/derper/runderper
#chmod +x /opt/derper/stopderper
创建服务
新建 /etc/systemd/system/derper.service 文件
[Unit]
Description=Derper服务
After=network.target
[Service]
Type=forking
ExecStart=/opt/derper/runderper
ExecStop=/opt/derper/stopderper
[Install]
WantedBy=multi-user.target
设置开机自启并立即启动
systemctl enable --now derper.service
添加到Tailscale
在你的Tailscale管理界面找到 Access Controls (点我直达 )
在其中插入片段,示例如下
{
"acls": [
// ...
],
"ssh": [
// ...
],
// ...
"derpMap": {
"Regions": {
"900": {
"RegionID": 900, // 900以上
"RegionCode": "cni-bj", // 区域代码,会在 `tailscale netcheck` 显示
"RegionName": "中国-北京", // 区域名称,会在 `tailscale netcheck` 显示
"Nodes": [
{
"Name": "1",
"RegionID": 900, // 对应上方ID
"HostName": "xxxxx.xxx", // 填写你的DERP服务域名
"DERPPort": 12345, // 你的DERP服务端口
},
],
},
// 更多DERP节点
},
},
// ...
}
使用 tailscale netcheck 检查,发现多出自建DERP,成功