自建 Tailscale DERP 中继服务器 海外版

原文地址:大内网战略 (6.5)：自建 Tailscale DERP 中继服务器 海外版
大内网战略 (6)：自建 Tailscale DERP 中继服务器 保姆级教程
作者：凉拖捞佬 Pro

先决条件

有一台在海外的 VPS（我用的是在 RackNerd 购买的乞丐版 VPS）。

已经购买了域名（建议在 namesilo 购买会比较便宜），并且 DNS 解析到了 cloudflare 上。

域名解析到了 VPS 上。不一定要是二级域名（http://xxx.com），可以是三级域名（http://yyy.xxx.com）。

有基础的 linux 操作知识。
注意：Cloudflare 域名解析不要开启代理。如下图：

防火墙设置

首先需要永久放行端口：TCP 56473（可以自己随意修改成自己想要的） 和 UDP 3478（不要修改），并且暂时关闭防火墙（acme 申请 SSL 证书完成后再开回来）。

Linux 常用的防火墙可能有：iptables、UFW 和 VPS 提供的网络安全组，按照自己的情况放行，这里就没有教程了。

申请 SSL 证书

逐步输入以下命令申请 SSL 证书，三种申请证书的方式任选其一，申请失败则更换方式 。用你的域名替换掉命令中的 <你的域名> 字样。

如果你的 VPS 上面跑了 nginx 或者 apache，你需要将命令里面的 --standalone 改为 --nginx 或者 --apache ，或者暂时停止这两个服务。

Copy
sudo -i

curl https://get.acme.sh | sh; apt install socat -y || yum install socat -y; ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

#三种方式任选其中一种，申请失败则更换方式
#申请证书方式1：
~/.acme.sh/acme.sh --issue -d <你的域名> --standalone -k ec-256 --force --insecure
#申请证书方式2：
~/.acme.sh/acme.sh --register-account -m "${RANDOM}@chacuo.net" --server buypass --force --insecure && ~/.acme.sh/acme.sh --issue -d <你的域名> --standalone -k ec-256 --force --insecure --server buypass
#申请证书方式3：
~/.acme.sh/acme.sh --register-account -m "${RANDOM}@chacuo.net" --server zerossl --force --insecure && ~/.acme.sh/acme.sh --issue -d <你的域名> --standalone -k ec-256 --force --insecure --server zerossl

导出证书：

Copy
sudo mkdir /usr/local/cert

~/.acme.sh/acme.sh --install-cert -d <你的域名> --ecc --key-file /usr/local/cert/<你的域名>.key --fullchain-file /usr/local/cert/<你的域名>.crt

安装 Tailscale

Copy
curl -fsSL https://tailscale.com/install.sh | sh

输入 tailscale up，把弹出的网址复制到浏览器中进行授权。

安装 Golang

卸载旧版本

如果你的服务器上有其他软件依赖旧版本的 go，将其升级为新版本可能会发生不可预料的后果，请务必仔细评估与衡量。

旧版本 golang 会极大概率导致 derp 安装失败。如果你运行 go version 显示的是旧版本：

那就要卸载重安；如果显示命令不存在或者是最新版本（怎么看在后面），就可以忽略这步。

卸载：rm -rf /usr/local/go
最好重新启动服务器。

查看最新版本

打开网址 https://go.dev/doc/install
下面截图里显示最新版本是 1.21.1

下载最新版本

Copy
wget https://go.dev/dl/go<最新版本号>.linux-amd64.tar.gz
tar -C /usr/local -xzf go<最新版本号>.linux-amd64.tar.gz

输入vim /etc/profile 并回车，填入以下命令到末尾然后保存并退出：

Copy
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 语言成功。

安装 derper 服务

建立目录：sudo mkdir -p /usr/local/gopath/bin

安装：

Copy
go env -w GOPROXY=https://goproxy.cn,direct
go install tailscale.com/cmd/derper@main

vim /usr/local/gopath/bin/runderper 输入并保存以下内容：(56473 端口修改的记得在这里修改)

Copy
#!/bin/sh
cd /usr/local/gopath/bin
nohup ./derper -hostname <你的域名> -c=derper.conf -a :56473 -http-port -1 -certdir /usr/local/cert -certmode manual -verify-clients -stun > console.log 2>&1 &
echo $! > app.pid

vim /usr/local/gopath/bin/stopderper.sh 输入并保存以下内容：

Copy
#!/bin/sh
kill `cat app.pid`
rm -rf app.pid

赋权：

Copy
chmod +x /usr/local/gopath/bin/runderper
chmod +x /usr/local/gopath/bin/stopderper.sh

输入 vim /etc/systemd/system/derper.service，输入并保存以下内容：

Copy

Description=derper服务
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/gopath/bin/runderper
ExecStop=/usr/local/gopath/bin/stopderper.sh

[Install]
WantedBy=multi-user.target

启动服务

设置开机启动

Copy
systemctl start derper
systemctl enable derper

然后打开网址 https://<你的域名>:56473/，出现以下页面就是部署成功。

添加中继节点

回到 Tailscale 网页控制台， 打开 Access Controls，添加下面代码在ssh前面：

Copy
"derpMap": {
// OmitDefaultRegions 用来忽略官方的中继节点，一般自建后就看不上官方小水管了
"OmitDefaultRegions": true,
"Regions": {
// 这里的 901 从 900 开始随便取数字
"901": {
// RegionID 和上面的相等
"RegionID": 901,
// RegionCode 自己取个易于自己名字
"RegionCode": "RackNerd",
"Nodes": [
{
// Name 保持 1不动
"Name": "1",
// 这个也和 RegionID 一样
"RegionID": 901,
// 域名
"HostName": "<你的域名>",
// 端口号
"DERPPort": 56473,
},
],
},
// 多个服务器添加在下面
"902": {
// RegionID 和上面的相等
"RegionID": 902,
// RegionCode 自己取个易于自己名字
"RegionCode": "xxxx",
"Nodes": [
{
// Name 好像可以改成2我也不是很懂
"Name": "2",
// 这个也和 RegionID 一样
"RegionID": 902,
// 域名
"HostName": "<你的域名>",
// 端口号
"DERPPort": 56473,
},
],
},
// 多个服务器添加在上面
},
},

不要忘记保存。

查看连接节点

在连接设备的 CMD 中输入tailscale netcheck查看连接节
点和延迟。