目的:为什么要建立 Derp 中转服务器
- 官方给你的公用服务器一般情况下不在大陆,所以
延迟高
- 并且因为是公用的,可能会
拥挤
,导致不稳定
在大陆的情况下,为了降低延迟
,提高带宽
,所以要自建 Derp
Derp 中转服务器介绍
Tailscale 使用的算法很有趣: 所有客户端之间的连接都是先选择 DERP 模式(中继模式),这意味着连接立即就能建立(优先级最低但 100% 能成功的模式),用户不用任何等待。然后开始并行地进行路径发现,通常几秒钟之后,我们就能发现一条更优路径,然后将现有连接透明升级(upgrade)过去,变成点对点连接(直连)
因此, DERP 既是 Tailscale 在 NAT 穿透失败时的保底通信方式(此时的角色与 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 中继教程](https://ouximei.com/wp-content/uploads/2025/01/e5e74fb1c7564863bc3d4dabea360d58-1-1.png)
然后安装 go
语言(这里有一个坑,我没有安装最新版本的 go
, 导致安装 Derp
的时候报错了,解决的办法就是 安装最新的 go
,没关系可以继续往下看我是怎么处理的,你也可以在这里安装最新版的 go
)
wget https://go.dev/dl/go1.23.5.linux-amd64.tar.gz
我这里的云服务器 linux
连不上这个网,所以在本地直接下载了,然后传到服务器上面
![图片[2]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/f9bf2220e731490a9c689a38f23dc11c-1024x794.png)
运行这行代码
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 中继教程](https://ouximei.com/wp-content/uploads/2025/01/6b208e86-f7df-4b4a-a6b5-4b29c3b1ac3e.png)
然后临时添加到环境变量
export PATH=$PATH:/usr/local/go/bin
之后验证一下是否安装成功
go version
![图片[4]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/60d07ab9-4aa2-41a6-b21c-50f3c38bcca0.png)
如果想要永久添加到环境变量中,可以这样做
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 中继教程](https://ouximei.com/wp-content/uploads/2025/01/95cbc44fc2b24efaa0b209deff4ec307-1024x72.png)
可以看到报错信息,让你匹配 go 1.23
,我刚才安装的是1.20.5
,没关系,在安装 go
的最新版本,去官网重新下载一个最新版(我当前的是 2024-1-25
号,最新版为 1.23.5
)
![图片[6]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/9a2dacc0ee264e8691de0dc326e296ea-1024x282.png)
然后安装,注意版本号,要是你当前最新的
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.5.linux-amd64.tar.gz
![图片[7]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/a2c125f6fc2d479fb0791a88736d185c.png)
然后 go version
看一下版本,可以看到安装完之后是直接生效的,不用添加什么环境变量了,因为之前已经永久加过了
![图片[8]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/eb5808bbab334ff7bd26fda5981bd1e2.png)
之后接着用 go
运行下载 Derp
的命令
go install tailscale.com/cmd/derper@latest
这里如果卡住不动的话,去切换一下 go 的镜像源
![图片[9]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/5625035d46cf4ec98e10f29f53f2d69b-1024x651.png)
处理证书文件
安装好之后,我们要解决一下域名的校验问题
看一下这个路径下的证书文件
![图片[10]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/279420fec4f9480ea3647fd74cfe62ff.png)
把框框中的三行代码注释掉
可以简单看一下,这是验证域名的用途,因为我们是没有域名,纯ip,所以这个地方注释掉,不要去校验
然后重新用 go
编译一下,并输出到指定目录
然后,在/root/go/pkg/mod/…省略…/cmd/derper/ 目录下输入下方命令,将derper重新编译,并输出到指定目录/etc/derp/derper
go build -o /etc/derp/derper
接下来回到根目录下,检查是否编译成功
cd /
ls /etc/derp
输出以下代码表示编译成功
![图片[12]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/ccd87f2b6da846fa956a2439771291e8-1024x148.png)
自签一个域名给 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 中继教程](https://ouximei.com/wp-content/uploads/2025/01/9adb236d75a941bf98b0e44f6a0bde40-1024x70.png)
如果你是用 宝塔的话,不仅是云服务器那边需要开启相对应的端口,宝塔的安全也要开启相应端口!
验证 Derp 是否启动
在浏览器中输入https://your ip:33445/
即可
![图片[14]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/41edb4f32f6d40628870de063f64106e-1024x214.png)
像这样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 中继教程](https://ouximei.com/wp-content/uploads/2025/01/2d833868-b190-44f2-998c-5178675bcf11-790x1024.png)
最后检查是否添加Derp中转成功
连接你安装了tailscale的服务器ssh输入以下代码显示为以下图片所示就成功添加了Derp中转
tailscale netcheck
![图片[16]-自建Tailscale的 DERP 中继教程](https://ouximei.com/wp-content/uploads/2025/01/3967bce3-d919-465e-8491-9587ad697437.png)
本文摘自:https://blog.csdn.net/u010263423/article/details/143858848并修改添加了部分内容
- 最新
- 最热
只看作者