自建Tailscale的 DERP 中继教程

目的:为什么要建立 Derp 中转服务器

  • 官方给你的公用服务器一般情况下不在大陆,所以延迟高
  • 并且因为是公用的,可能会 拥挤,导致 不稳定

在大陆的情况下,为了降低延迟提高带宽,所以要自建 Derp

Derp 中转服务器介绍
Tailscale 使用的算法很有趣: 所有客户端之间的连接都是先选择 DERP 模式(中继模式),这意味着连接立即就能建立(优先级最低但 100% 能成功的模式),用户不用任何等待。然后开始并行地进行路径发现,通常几秒钟之后,我们就能发现一条更优路径,然后将现有连接透明升级(upgrade)过去,变成点对点连接(直连)

因此, DERP 既是 TailscaleNAT 穿透失败时的保底通信方式(此时的角色与 TURN 类似),也是在其他一些场景下帮助我们完成 NAT 穿透的旁路信道。换句话说,它既是我们的保底方式,也是有更好的穿透链路时,帮助我们进行连接升级(upgrade to a peer-to-peer connection)的基础设施。

Tailscale 官方内置了很多 DERP 服务器,分步在全球各地,惟独不包含中国大陆,原因你懂得。这就导致了一旦流量通过 DERP 服务器进行中继,延时就会非常高。而且官方提供的 DERP 服务器是万人骑,存在安全隐患

安装 Go 环境

根据官方安装手册,需要先安装 go

先更新软件包列表,然后升级已安装的软件包

apt update && apt upgrade

等了大半年终于安完了,然后安装所需的软件,包括 wget、 git、 openssl、 curl

apt install -y wget git openssl curl
图片[1]-自建Tailscale的 DERP 中继教程

然后安装 go 语言(这里有一个坑,我没有安装最新版本的 go, 导致安装 Derp 的时候报错了,解决的办法就是 安装最新的 go,没关系可以继续往下看我是怎么处理的,你也可以在这里安装最新版的 go

wget https://go.dev/dl/go1.23.5.linux-amd64.tar.gz

我这里的云服务器 linux 连不上这个网,所以在本地直接下载了,然后传到服务器上面

然后参考 go 官方的安装手册

图片[2]-自建Tailscale的 DERP 中继教程

运行这行代码

rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.5.linux-amd64.tar.gz 

这里的 go1.23.5.linux-amd64.tar.gz 需要写成你下载的 go 版本

图片[3]-自建Tailscale的 DERP 中继教程

然后临时添加到环境变量

export PATH=$PATH:/usr/local/go/bin

之后验证一下是否安装成功

go version
图片[4]-自建Tailscale的 DERP 中继教程

如果想要永久添加到环境变量中,可以这样做

echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /etc/profile

解释一下上面的操作:

  • 虽然 export 命令和 source 命令都涉及修改 PATH,但它们的作用范围和持久性不同。
  • export 只对当前 shell 会话有效。
  • echo 命令将 export 命令写入配置文件,使其永久生效。
  • source 命令则使配置文件中的更改立即生效。

通过 Go 安装 Derp

安装 Derp 的时候报错了 (安装的最新版可跳过)

图片[5]-自建Tailscale的 DERP 中继教程

可以看到报错信息,让你匹配 go 1.23,我刚才安装的是1.20.5,没关系,在安装 go 的最新版本,去官网重新下载一个最新版(我当前的是 2024-1-25 号,最新版为 1.23.5

图片[6]-自建Tailscale的 DERP 中继教程

然后安装,注意版本号,要是你当前最新的

rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.5.linux-amd64.tar.gz 
图片[7]-自建Tailscale的 DERP 中继教程

然后 go version 看一下版本,可以看到安装完之后是直接生效的,不用添加什么环境变量了,因为之前已经永久加过了

图片[8]-自建Tailscale的 DERP 中继教程

之后接着用 go 运行下载 Derp 的命令

go install tailscale.com/cmd/derper@latest

这里如果卡住不动的话,去切换一下 go 的镜像源

图片[9]-自建Tailscale的 DERP 中继教程

处理证书文件

安装好之后,我们要解决一下域名的校验问题

看一下这个路径下的证书文件

图片[10]-自建Tailscale的 DERP 中继教程

把框框中的三行代码注释掉

可以简单看一下,这是验证域名的用途,因为我们是没有域名,纯ip,所以这个地方注释掉,不要去校验

图片[11]-自建Tailscale的 DERP 中继教程

然后重新用 go 编译一下,并输出到指定目录

然后,在/root/go/pkg/mod/…省略…/cmd/derper/ 目录下输入下方命令,将derper重新编译,并输出到指定目录/etc/derp/derper

go build -o /etc/derp/derper

接下来回到根目录下,检查是否编译成功

cd /
ls /etc/derp

输出以下代码表示编译成功

图片[12]-自建Tailscale的 DERP 中继教程

自签一个域名给 Derp

接着我们用命令自签一个 Https 的域名 derp.myself.com

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.myself.com.key -out /etc/derp/derp.myself.com.crt -subj "/CN=derp.myself.com" -addext "subjectAltName=DNS:derp.myself.com"

接下来在ssh使用以下命令(一行一行输入)

cat > /etc/systemd/system/derp.service <<EOF
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/derper -hostname derp.myself.com -a :33445 -http-port 33446 -certmode manual -certdir /etc/derp --verify-clients
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOF

把云服务的 tcp 33445 (HTTPS 需要)和 udp 的 3478 (STUN需要)的端口打开

然后输入如下命令,打开自启,以及立即启动 Derp 服务

systemctl start derp:立即启动 derp 服务

systemctl enable derp:启用 derp 服务,使其在系统启动时自动启动。

图片[13]-自建Tailscale的 DERP 中继教程

如果你是用 宝塔的话,不仅是云服务器那边需要开启相对应的端口,宝塔的安全也要开启相应端口!

验证 Derp 是否启动

在浏览器中输入https://your ip:33445/ 即可

图片[14]-自建Tailscale的 DERP 中继教程

像这样Derp就启动成功

接下来在tailscale控制台中添加Derp中转

点击此处进入控制台

选框内添加以下内容(在IPv4一栏填入你的服务器IP)

	"derpMap": {
		"OmitDefaultRegions": true,
		"Regions": {
			"901": {
				"RegionID":   901,
				"RegionCode": "Myself",
				"RegionName": "Myself Derper",
				"Nodes": [
					{
						"Name":             "901a",
						"RegionID":         901,
						"DERPPort":         33445,
						"IPv4":             "youripv4",
						"InsecureForTests": true,
					},
				],
			},
		},
	},
图片[15]-自建Tailscale的 DERP 中继教程

最后检查是否添加Derp中转成功

连接你安装了tailscale的服务器ssh输入以下代码显示为以下图片所示就成功添加了Derp中转

tailscale netcheck
图片[16]-自建Tailscale的 DERP 中继教程

本文摘自:https://blog.csdn.net/u010263423/article/details/143858848并修改添加了部分内容

© 版权声明
THE END
喜欢就支持一下吧
点赞22 分享
评论 共1条

请登录后发表评论