Tailscale部署derp服务器
下载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
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
使用go模块拉取 “tailscale derper”
go install tailscale.com/cmd/derper@main
进入安装目录修改证书文件
再次访问
编辑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
设置自签域名证书
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 加密通信等多种场景。
备份原证书文件
mv /tmp/derp.域名.xyz.key /tmp/derp.域名.xyz.crt /etc/derp/
再重启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

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网络中
- 修改DERP服务,开启连接验证
编辑derp.service
最后面增加--verify-clients 注意空格,增加后保存即可
重新加载DERP服务
systemctl daemon-reload
systemctl restart derp
可以使用 ss -tuln 或者netstat -tuln
-t 表示显示TCP端口
-u 表示显示UDP端口
-l 表示显示正在监听的端口
-n 表示不解析服务名,直接显示端口号
什么是DERP
如果DERP证书到期,可以直接编辑/etc/derp/目录下的key与crt文件内容
vi模式下,可以直接输入 :1,$d (清空保存的全部内容) 注意不要按i进入编辑模式,修改完成后重启服务,
重启derp服务
systemctl restart derp