在已部署的 Tailscale 网络中添加 DERP 私有节点可以显著提升网络性能和安全性(未必,可能需要防范中间人攻击)。 本文将描述如何在不使用域名和 SSL 证书的情况下,仅依赖一枚公网IP地址,在现有 Tailscale 网络中添加一个 DERP 节点。
什么是 DERP?
DERP 是 Tailscale 使用的中继协议,用于在 NAT 打洞失败时帮助节点之间相互通信。 私有 DERP 服务器可以提供更好的隐私保护和更低的延迟。
前提条件
- 一台具有公网 IP 地址的服务器或 VPS,或者随便什么他妈的云,只要有公网 IP 地址就可以的。
- 基本的命令行操作能力的人。
- 你的私有网络,已经可以通过 Tailscale 的公共服务进行互联互通,确保你的 Tailscale 网络已经可以正常使用。
- 安装好的 Golang 环境,可以进行 Go 程序编译
部署步骤
1. 将用于部署 DERP 服务的 VPS 加入到 Tailscale 网络
确保你新采购的服务器或 VPS 资源,已经接入到你的 Tailscale 网络,这样做有助于直接开启 DERP 的认证模式。
2. 下载和编译安装 DERPER
(1)首先从 Go PKG 上 install DERPER 的源码
go install tailscale.com/cmd/derper@latest
(2)然后进入文件夹 ~/go/pkg/mod/[tailscale]/cmd/derper, 修改文件 vim cert.go 删掉验证相关内容:
if hi.ServerName != m.hostname {
return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
}
# 这部分代码注释掉
(3)编译 DERPER: go build -o /etc/derp/derper
3. 给 DERPER 做一个开机自启动服务,使用 SystemD
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/derper -hostname derp.mylab.internal -a :10333 -certmode manual -certdir /etc/derp --verify-clients
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
保存到 /etc/systemd/system/derp.service
4. 创建自签名证书给 DERPER 使用
使用如下命令行创建一组公钥和私钥:
openssl req -x509 -newkey rsa:4096 -sha256 -days 365 -nodes -keyout /etc/derp/derp.mylab.internal.key -out /etc/derp/derp.mylab.internal.crt -subj "/CN=derp.mylab.internal" -addext "subjectAltName=DNS:derp.mylab.internal"
#里面参数根据自己需求改改
5. 启动DERP服务器
使用以下命令启动DERP服务器:
systemctl restart derp
systemctl enable derp
6. 配置 Tailscale 以使用私有 DERP 服务器
打开 Tailscale Admin Console, 点击 Access Controls, 把一下内容复制在ssh上面:
"derpMap": {
"OmitDefaultRegions": true, // 如果为true,即不使用 Tailscale 的默认 DERP 节点
"Regions": {
"900": { // 可以是任意大于 900 的数字
"RegionID": 900, // 同上
"RegionCode": "myDerp",
"Nodes": [
{
"Name": "1",
"RegionID": 900, // 同上
"HostName": "xxx.xxx.xxx.xxx", // 你的 IP
"DERPPort": 12345, // 你的 port
"InsecureForTests": true, // 必须为 true,以跳过证书验证 # 这里其实不安全,防不住基于SSL证书的中间人攻击
},
],
},
},
},
# 其中主要注意的就是 HOSTNAME 要指定为 VPS 的公网 IP 地址,还有端口号要对应上
验证设置
要验证 DERP 服务器是否正常工作,可以在 Tailscale 网络中的任何设备上运行:
tailscale netcheck
如果工作正常,应该能看到您的自定义 DERP 服务器被列出并可用,并且不会提示什么错误。
资料参考: Tailscale 不需要域名和SSL证书,自建DERP中继服务 tailscale自建derp中继可以不用域名和不用443端口吗 FR: support using self-signed ip-only certificate in custom DERP server #11776 Custom DERP Servers 无需域名,自建 Tailscale Derp 节点