☰
Tailscale部署derp服务器
2026/10/18 1:17:29 网站建设 项目流程

Tailscale部署derp服务器

操作系统要求: ubuntu22.04 ubuntu24.04 ubuntu20.04均可,OpencloudOS9.4也可以(理论上其它使用yum的系统也可以),只是其它系统未测试,
开放网络端口: udp: 3478(必须) tcp: 43587(自定义的https端口), ping端口

系统更新

aptupdate&&aptupgrade

derp服务器升级可以使用(拉取最新版本)

goinstalltailscale.com/cmd/derper@latest

查看当前derp服务器的版本

~/go/bin/derper-version

也可以直接去缓存目录看看下载的是哪个版本

ls~/go/pkg/mod/tailscale.com@*/

本地检查tailscale可用的节点

tailscale netcheck

如下图(自建上海节点):

下载GO

安装依赖

aptinstall-ywgetgitopensslcurl

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

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

解压 “go” 压缩包

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

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

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

添加环境变量

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

安装tailscale derper

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

goenv-wGO111MODULE=on goenv-wGOPROXY=https://goproxy.cn,direct

使用go模块拉取 “tailscale derper”

goinstalltailscale.com/cmd/derper@main

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

cd/root/go/pkg/mod/


再次访问

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


编辑cert.go文件

vicert.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/
crt格式的证书

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

pem格式的证书(用此方法生成的crt证书好像不被derp识别,待验证与解决,暂使用crt格式的证书)

openssl req-x509-newkeyrsa:4096-sha256-days3650-nodes-keyout/etc/derp/derp.域名.key-out/etc/derp/derp.域名.xyz.pem-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/目录下

到证书目录备份原证书文件

mvderp.域名.xyz.crt derp.域名.xyz.crt.bakmvderp.域名.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":{// 这里的901从900开始随便取数字"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-fsSLhttps://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


如上图,显示udp的3478与tcp的43587处于正常监听状态,就是正常启动了
可以使用 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

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

opencloudos系统安装

下载GO

安装依赖

yuminstall-ywgetgitopensslcurl

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

wgethttps://go.dev/dl/go1.25.1.linux-amd64.tar.gz

其它步骤可以使用上面的,全部通用

自动证书更换方法

本教程使用docker部署的allinssl方案实现自动更换证书
系统使用ubuntu2404服务器,ubuntu用户名(root用户未开启远程登陆),需要sudo授权,ssh链接服务器


由于allinssl只支持pem格式的证书,因此有后置命令,
第一行命令移动生成的tmp目录中的证书文件到/etc/derp目录
第二行命令重命名pem格式的文件为crt格式
第三四行为重启derp服务,使旧证书更换为新证书服务
申请证书使用域名服务商的API,目录allinssl支持大部分服务商的API,如下图

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询