极低的价格自建 Tailscale DERP Plus

本教程适用于云应用的 Tailscale DERP Plus 服务器应用,您可以研究我的应用镜像并且在普通服务器上部署,普通服务器部署的教程已经烂大街了,我短期内没有攥写计划

自建 DERP 可以保证官方服务器拥堵时依旧可以获得很好的组网体验,但是自建的 DERP 服务是对所有人开放的,这就意味着任何人只要进行一些搜索就能找到你自建的 DERP 服务器并且白嫖你的服务器

通过雨云一键部署

不适用于普通服务器部署

*云应用无法提供 TS 所需的权限,所以无法运行防盗功能,只能使用带 -uf 后缀的版本

术语

  • k8s :全称 kubernetes ,是一个多机容器编排工具,雨云云应用基于此技术栈构建
  • Tailscale :异地组网软件
  • DERP :Tailscale 的中继服务器,由此服务器负责处理客户端间网络握手等
  • ACL :Tailscale 中的访问控制规则,用户规则大于默认规则

准备

首先请登录您的 Tailscale 控制台,选择“Add device”-“Linux server”

在新的页面中按图示勾选“Ephemeral”,可考虑是否勾选“Reusable”

由于 k8s 的特性,不要也不能勾选“Use as exit node”,即使这可以给内网带来很强的灵活性,如果您依然坚持使用,请学习如何通过 ACL 规则配置

各选项的解释(以下各项均为 k8s 环境下特需的设置,普通服务器部署时无任何参考意义):

  • Ephemeral 将加入的设备作为临时设备使用,因为 k8s 在调度 Pods 时的操作是创建新 Pod 后删除旧 Pod ,此时保留旧设备信息没有任何意义
  • Reusable 会将密钥允许重复使用,因为要使用防盗功能,同因上条 k8s 的调度规则,此时不勾选将会导致无法创建新的具有防盗功能的 Pod
  • Auth key expiration 为密钥过期时间,过期时间内都可使用旧的密钥,同因第一条 k8s 的调度规则,在过期时间内都能正常创建具有防盗功能的 Pod

点击最下方的生成脚本按钮后,将 && sudo 符号后面的内容复制下来(此内容包含机密信息,请勿泄露。后续补充:不应该复制 sudo,而是从sudo后进行复制)

回到雨云,填入部署脚本即可

通过雨云一键部署

最后复制下外部服务(DERP)的地址访问测试

我们需要在导航栏前手动加入 https://

出现此页面点击高级-继续访问xxx(不安全)

出现此页面代表搭建完成

之后我们前往 ACL 页面并且选择 JSON editor

查看我们复制访问地址时的 IP 和端口信息,记下来

参考这个模板,替换你的 IP 和端口后添加到 ACL 规则的 derpMap.Regions

			"903": {
				"RegionID":   903, // 自定义一个不重复的 ID ,建议 901-999之间
				"RegionCode": "wp-admin", // 这些名字建议一致,雨云优惠码 wp-admin
				"RegionName": "wp-admin", // 这些名字建议一致,使用优惠码新用户五折优惠+永久折扣+消费返利
				"Nodes": [
					{
						"Name":             "wp-admin", // 这些名字建议一致
						"RegionID":         903, // 和上面的 RegionID 保持一致
						"IPv4":             "xxx", // 上面记下的 IP 地址
						"DERPPort":         12345, // 上面记下的端口
						"InsecureForTests": true,
					},
				],
			},

您可以额外添加以下规则禁用官方 DERP 服务器,如果官方后续添加了新的服务器,依照数字递增进行添加即可

			"1":  null,
			"2":  null,
			"3":  null,
			"4":  null,
			"5":  null,
			"6":  null,
			"7":  null,
			"8":  null,
			"9":  null,
			"10": null,
			"11": null,
			"12": null,
			"13": null,
			"14": null,
			"15": null,
			"16": null,
			"17": null,
			"18": null,
			"19": null,
			"20": null,
			"21": null,
			"22": null,
			"23": null,
			"24": null,
			"25": null,
			"26": null,
			"27": null,
			"28": null,

类似这样:

禁用官方服务器的规则可以加在下面:

保存后就能使用了

打开任意一个加入了组网的 Tailscale 客户端控制台,输入命令检查网络

tailscale netcheck

1 个赞

em,教程质量都非常好

那必须的 :grinning_face:

skyhhjmk/ip_derper_plus: 无需域名的 derper,带防盗

兄弟们点点 star

大佬,按照教程部署成功了,但是容器日志报以下错误:
[INFO ] writing new private key to ‘/app/certs//103.109.20.169.key’
[INFO ] 2025/09/24 08:20:04 no config path specified; using /var/lib/derper/derper.key
[INFO ] 2025/09/24 08:20:04 STUN server listening on [::]:3478
[INFO ] 2025/09/24 08:20:04 derper: serving on :443 with TLS
[INFO ] 2025/09/24 08:20:04 No mesh key configured
[INFO ] 2025/09/24 08:20:12 http: TLS handshake error from 10.0.1.51:46520: remote error: tls: unknown certificate
[INFO ] 2025/09/24 08:20:12 http: TLS handshake error from 10.0.1.51:47823: remote error: tls: unknown certificate
[INFO ] 2025/09/24 08:20:15 http: TLS handshake error from 10.0.1.51:47825: remote error: tls: unknown certificate
[INFO ] 2025/09/24 08:20:15 http: TLS handshake error from 10.0.1.51:47826: remote error: tls: unknown certificate
[INFO ] 2025/09/24 08:20:17 http: TLS handshake error from 10.0.1.51:47829: remote error: tls: unknown certificate

使用tailscale netcheck进行检查,发现drep存在,但是出不来时延:
Report:
* Time: 2025-09-24T08:21:50.6870082Z
* UDP: true
* IPv4: yes, 47.129.246.244:34724
* IPv6: yes, [2406:da18:3b4:a1bc:b773:7a0:6a26:e54d]:48396
* MappingVariesByDestIP: false
* PortMapping:
* CaptivePortal: false
* Nearest DERP: Nuremberg
* DERP latency:
- nue: 219.4ms (Nuremberg)
- hel: 230.9ms (Helsinki)
- iad: 352.6ms (Ashburn)
- leaflow: (leaflow)

请指导下什么原因?谢谢

1 个赞

进容器看一下目录内容:

ls -lah /var/lib/derper/

查看是否有derper.crt文件

检查另一个目录

ls -lah /app/certs/

查看是否有derper.crt文件

@zbigbird

(前往RCA用户群可以很方便的联系到我:1038805236)

进应用看了下,/var/lib/derper/目录下没有derper.crt文件,命令查询输出如下:

# ls -lah /var/lib/derper/
total 4.0K
drwxr-xr-x. 2 root root 24 Sep 24 09:02 .
drwxr-xr-x. 1 root root 20 Sep 24 09:02 ..
-rw-------. 1 root root 93 Sep 24 09:02 derper.key
# ls -lah /app/certs/
total 3.5K
drwxr-xr-x. 2 root root    2 Sep 24 08:37 .
drwxr-xr-x. 1 root root   35 Sep 24 09:02 ..
-rw-r--r--. 1 root root 1.3K Sep 24 09:02 114.66.61.131.crt
-rw-------. 1 root root 1.7K Sep 24 09:02 114.66.61.131.key
# 

这是因为自签名没有成功的原因造成的吗?

该怎么修改呢?折腾了好久 :sweat_smile:

@zbigbird

检查一下云应用的环境变量是怎么设置的

更新日志:
v1.0.1

  • 优化 Dockerfile 环境变量

*该版本后云应用拉取镜像时全部使用固定tag确保稳定性

v1.0.2

  • 修复 bug

请问这步怎么操作,我没有发现哪里可以填入脚本的

我是在云应用里一键部署的,木有发现哪里需要我填入部署脚本的地方,虽然我最后在 ACL 添加了 derp 服务器,但是 netchek 显示我并没有连上这个服务器,我想应该是这个 auth-key 没上传的缘故,所以想问一下,谢谢泥

不带防盗功能无需填入脚本

好得,谢谢泥