云计算百科
云计算领域专业知识百科平台

Tailscale部署derp服务器

Tailscale部署derp服务器

操作系统要求: ubuntu22.04 ubuntu24.04 ubuntu20.04均可,其它系统未测试 开放网络端口: udp: 3478(必须) tcp: 43587(自定义的https端口), ping端口

系统更新

apt update && apt upgrade

本地检查tailscale可用的节点

tailscale netcheck

如下图(自建上海节点): 在这里插入图片描述

下载GO

安装依赖

apt install -y wget git openssl curl

拉取 “go” 压缩包(官网地址: https://go.dev/dl/ )

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

解压 “go” 压缩包

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

查看 “go” 版本信息(验证是否安装成功 )

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

添加环境变量

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

安装tailscale derper

设置go代理+安装国内加速下载(中国最可靠的 Go 模块代理,官网:https://goproxy.cn/),

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

使用go模块拉取 “tailscale derper”

go install tailscale.com/cmd/derper@main

进入安装目录修改证书文件

cd /root/go/pkg/mod/

在这里插入图片描述 再次访问

cd tailscale.com@v1.71.0-pre.0.20240730203925-949b15d85837/cmd/derper

在这里插入图片描述 编辑cert.go文件

vi cert.go

在这里插入图片描述 在这里插入图片描述 删除红框的代码再保存 在这里插入图片描述

cd /go/pkg/mod/tailscale.com@v1.71.0-pre.0.20240730203925-949b15d85837/cmd/derper

在此目录开始编译derper

go build -o /etc/derp/derper

验证是否编译成功

先cd到根目录

cd

再执行下面验证代码 (显示derper说明配制成功)

ls /etc/derp

在这里插入图片描述 设置自签域名证书 设置域名信息,域名可以自定义也可以使用自己的域名 生成私有证书文件,证书的默认目录为 /etc/derp/

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

这条命令使用 OpenSSL 生成了一个自签名的 X.509 证书和相应的 RSA 私钥,具体参数解释如下:

  • openssl req -x509: 这条命令的 req 部分通常用于生成证书签名请求(CSR),但加上 -x509 选项后,它会直接生成一个自签名的证书,而不是 CSR。
  • newkey rsa:4096: 这个选项指示 OpenSSL 生成一个新的 RSA 私钥,密钥长度为 4096 位。这是一个相对安全的密钥长度,适用于需要较高安全性的场景。
  • sha256: 指定使用 SHA-256 哈希算法对证书进行签名。SHA-256 是目前广泛使用的哈希算法之一,提供了比 SHA-1 更高的安全性。
  • days 3650: 设置证书的有效期为 3650 天,即大约 10 年。请注意,自签名证书的有效期可以根据需要设置,但通常不建议设置过长,以免证书丢失或泄露后造成长期风险。
  • nodes: 这个选项告诉 OpenSSL 在生成私钥时不需要密码保护(即没有密码短语)。这对于自动化脚本或服务很有用,但请注意,这可能会降低安全性。
  • keyout /etc/derp/derp.域名.xyz.key: 指定私钥文件的保存位置和文件名。在这个例子中,私钥将被保存在 /etc/derp/derp.域名.xyz.key。
  • out /etc/derp/derp.域名.xyz.crt: 指定生成的证书文件的保存位置和文件名。在这个例子中,证书将被保存在 /etc/derp/derp.域名.xyz.crt。
  • subj “/CN=derp.域名.xyz”: 直接在命令行中指定证书的主题(subject)信息,这里只设置了通用名称(CN)为 derp.域名.xyz。通常,证书的主题信息还包括其他字段,如组织(O)、组织单位(OU)等,但在这个例子中只设置了 CN。
  • addext “subjectAltName=DNS:derp.域名.xyz”: 这个选项用于向证书添加额外的扩展信息,这里添加的是 subjectAltName 扩展,其值为 DNS:derp.域名.xyz。这个扩展允许证书指定除了 CN 之外的其他域名或 IP地址,对于 HTTPS 服务器尤其重要,因为它允许服务器使用同一个证书为多个域名提供服务(如果证书和域名都经过正确配置)。

综上所述,这条命令生成了一个私钥文件和一个自签名的证书文件,私钥长度为 4096 位,证书有效期为 10 年,使用 SHA-256 算法签名,并直接指定了证书的主题信息和一个额外的 subjectAltName 扩展。这个证书和私钥可以用于 HTTPS 服务器、SSL/TLS 加密通信等多种场景。

以上步骤生成证书后可以替换为自己的域名证书

上传证书文件到服务器的tmp目录,默认生成的证书文件位于 /etc/derp/目录下 在这里插入图片描述

备份原证书文件

mv derp.域名.xyz.crt derp.域名.xyz.crt.bak
mv derp.域名.xyz.key derp.域名.xyz.key.bak

移动tmp目录中的证书文件到 /etc/derp/目录中

mv /tmp/derp.域名.xyz.key /tmp/derp.域名.xyz.crt /etc/derp/

再重启derp服务,使新证书生效

systemctl daemon-reload
systemctl restart derp

配置DERP 将下面的代码复制到记事本里,端口修改为 “43587”,可随机使用,自己随便想一个

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.域名.xyz -a :43587 -http-port 43588 -certmode manual -certdir /etc/derp
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOF

启用DERP

重新加载DERP服务 systemctl daemon-reload 重启DERP服务 systemctl restart derp 设置开机自启 systemctl enable derp

检查DERP服务器状态 浏览器访问:云服务器的IP地址+端口号(“自己改的端口”)

在这里插入图片描述 ACL配置 进入tailscale网页端 进入ACL界面添加以下代码

"derpMap": {
// OmitDefaultRegions 用来忽略官方的中继节点,一般自建后就看不上官方小水管了,false为启用官方节点,true为不启用官方节点
"OmitDefaultRegions": false,
"Regions": {
// 这里的 901900 开始随便取数字
"901": {
// RegionID 和上面的相等
"RegionID": 901,
// RegionCode 自己取个易于自己名字
"RegionCode": "shg",
"RegionName": "ShangHai",
"Nodes": [
{
// Name 保持 1不动
"Name": "1",
// 这个也和 RegionID 一样
"RegionID": 901,
// 域名
"HostName": "derp.域名.xyz",
"IPv4": "*.*.*.*",
// 端口号
"DERPPort": 43587,
},
],
},
},
},

以上方法搭建好后可以任意人使用,下面的方法为添加为自己使用的白名单derp服务器

防白嫖设置

如果服务器IP地址和端口泄露了 那么是可以被别人白嫖的,为了防止白嫖

在云服务器上安装tailscale客户端并加入到tailscale网络中

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

安装步骤参考官网的安装的方法

修改DERP服务,开启连接验证

编辑derp.service

vim /etc/systemd/system/derp.service

在这里插入图片描述 最后面增加–verify-clients 注意空格,增加后保存即可 在这里插入图片描述 重新加载DERP服务

systemctl daemon-reload

重启DERP服务

systemctl restart derp

查看服务器监听端口

ss -tuln

在这里插入图片描述 可以使用 ss -tuln 或者netstat -tuln

-t 表示显示TCP端口 -u 表示显示UDP端口 -l 表示显示正在监听的端口 -n 表示不解析服务名,直接显示端口号

什么是DERP

DERP 即 Detoured Encrypted Routing Protocol,这是 Tailscale 自研的一个协议,它是一个通用目的包中继协议,运行在 HTTP 之上,而大部分网络都是允许 HTTP 通信的。 它根据目的公钥(destination’s public key)来中继加密的流量(encrypted payloads)。 Tailscale 会自动选择离目标节点最近的 DERP server 来中继流量。

Tailscale 使用的算法很有趣: 所有客户端之间的连接都是先选择 DERP 模式(中继模式),这意味着连接立即就能建立(优先级最低但 100% 能成功的模式),用户不用任何等待。然后开始并行地进行路径发现,通常几秒钟之后,我们就能发现一条更优路径,然后将现有连接透明升级(upgrade)过去,变成点对点连接(直连)。因此, DERP 既是 Tailscale 在 NAT 穿透失败时的保底通信方式(此时的角色与 TURN 类似),也是在其他一些场景下帮助我们完成 NAT 穿透的旁路信道。换句话说,它既是我们的保底方式,也是有更好的穿透链路时,帮助我们进行连接升级(upgrade to a peer-to-peer connection)的基础设施。

来源: http://www.junyao.tech/posts/18297f50.html

测试tailscale是否经过DERP服务器作为中继 在这里插入图片描述 如果DERP证书到期,可以直接编辑/etc/derp/目录下的key与crt文件内容

vi模式下,可以直接输入 :1,$d (清空保存的全部内容) 注意不要按i进入编辑模式,修改完成后重启服务 在这里插入图片描述 重启derp服务

systemctl restart derp

刷新网站即可查询到证书是否更新

赞(0)
未经允许不得转载:网硕互联帮助中心 » Tailscale部署derp服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!