给tailscale搭建derper服务器
前言:tailscale是一个非常不错的组网工具,不过其节点服务器最近的也要80ms上下,因此自建derper节点是一个不错的选择。本文选择cloudflare作为dns服务提供商,acme.sh来申请域名证书并自动续期。
参考了这篇知乎文章
0.前置条件
一台debian服务器
基本上其他linux系统也行,这里持久化运行使用的systemd,另外请使用root用户来操作,如果使用其他用户在执行下面的命令时需加上sudo
一个域名
默认使用ssl加密,所以需要用到域名
1.安装go语言环境
首先卸载旧版本(如果存在)
rm -rf /usr/local/go
下载二进制文件
可以自己到https://go.dev/dl/选取版本
wget https://go.dev/dl/go1.22.3.linux-amd64.tar.gz
解压安装
同样的,如果安装了其他版本自行替换一下命令的版本就好
tar -C /usr/local -xzf ./go1.22.3.linux-amd64.tar.gz
配置环境(之前配置过就不用管)
sh -c 'echo "export GOROOT=/usr/local/go\nexport GOPATH=/usr/local/gopath\nexport GOBIN=\$GOPATH/bin\nexport PATH=\$PATH:\$GOROOT/bin\nexport PATH=\$PATH:\$GOPATH/bin" >> /etc/profile'
也可以自己把下面这段编辑进/etc/proflie
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
如果输出如下截图内容即代表go语言环境安装完成
2.安装derper
创建目录
mkdir -p /usr/local/gopath/bin
编译安装
国内环境需要配置代理 go env -w GOPROXY=https://goproxy.cn,direct
go install tailscale.com/cmd/derper@latest
验证
derper --version
3.申请证书
安装acme.sh
curl https://get.acme.sh | sh -s [email protected]
[email protected]
替换为你自己的邮箱
切换CA提供商(默认的zerossl也可以,习惯改用letsencrypt)
acme.sh --set-default-ca --server letsencrypt
如果命令执行失败可以执行source ~/.bashrc
更新环境
获取dns api使用权限申请证书
参考acme.sh官方wiki,这里使用cf提供的全局权限,可能有一定的安全风险,选择安全的环境使用
export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4"
export CF_Email="[email protected]"
申请证书
替换为自己的域名
acme.sh --issue --dns dns_cf -d derp.example.com -d *.derp.example.com
证书安装
创建证书目录
mkdir /usr/local/cert
安装
acme.sh --install-cert -d derp.example.com \
--key-file /usr/local/cert/derp.example.com.key \
--fullchain-file /usr/local/cert/derp.example.com.crt
4.使用systemd运行derper
创建derper.service
cat > /etc/systemd/system/derper.service << EOF
[Unit]
Description = derper server
After=network-online.target
Requires=network-online.target
[Service]
Type = simple
ExecStart = /usr/local/gopath/bin/derper -hostname derp.example.com -c=/usr/local/gopath/bin/derper.conf -a :8972 -http-port -1 -certdir /usr/local/cert -certmode manual -verify-clients -stun -stun-port 6783
Restart=on-failure
RestartSec=60
[Install]
WantedBy = multi-user.target
EOF
其中8972是tcp端口,6783是udp端口,都需要自行开放,端口支持自定义,-stun-port 6783
可以去掉,默认端口为3478,上面的代码更改好后直接复制到命令行窗口中执行就行
启动并设置开机自启
systemctl start derper
systemctl enable derper
停止服务并关闭自启
systemctl stop derper
systemctl disable derper
查看运行状态
systemctl status derper
查看日志输出,-f为实时刷新,替换-r则显示倒序
journalctl -u derper -f
5.tailscale控制台添加节点
登录后顶栏选择Access Controls
"derpMap": {
// OmitDefaultRegions 用来忽略官方的中继节点
"OmitDefaultRegions": true,
"Regions": {
// 这里的 901 从 900 开始随便取数字
"901": {
// RegionID 和上面的相等
"RegionID": 901,
// RegionCode 自己取个易于自己名字
"RegionCode": "qcloud",
"RegionName": "上海",
"Nodes": [
{
// Name 多个服务器最好取不同数字,同一个RegionCode的Name不能一样
"Name": "1",
// 这个也和 RegionID 一样
"RegionID": 901,
// 域名
"HostName": "<你的域名>",
// 端口号
"DERPPort": 8972
// STUN端口号没有自定义就不用填写
"STUNPort": 6783
}
]
}
}
}
6.检查连接状态
tailscale netcheck