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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值