群晖部署 derp 中继服务器的一个坑: x509: certificate signed by unknown authority

2023-10-31 19:31:50 +08:00
 evemoo

结论:证书链不对
得从 https://whatsmychaincert.com/?<your_domain_here>:14433 获取可用于转发流量的证书。
发文记录一下折腾一下午的结果,避免后来人踩坑。

问题

绝大部分教程都差不多,从 acme.sh 申请证书然后启动 tailscale (这里直接用套件,不用重复映射 tailscaled.sock)

derp 部分也差不多,直接 docker 或者 go install 跑起来

docker run -d \
    --restart=always \
    --name derper \
    -p 14433:14433 \
    -p 3478:3478/udp \
    -v /volume1/docker/derper:/app/certs \
    -v /volume1/@appdata/Tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock  \
    -e DERP_CERT_MODE=manual \
    -e DERP_ADDR=:14433 \
    -e DERP_DOMAIN=<your_domain_here> \
    -e DERP_VERIFY_CLIENTS=true \
    fredliang/derper:latest

然后很大概率遇到:

magicsock: [0xc0025c05a0] derp.Recv(derp-903): derphttp.Client.Recv connect to region 903 (Nas): x509: certificate signed by unknown authority

即便你移除验证:DERP_VERIFY_CLIENTS=false ,强制添加 "OmitDefaultRegions": true 参数也无法通过 derp 服务器中继流量,具体体现在 tailscale ping <node> 超时。

	"derpMap": {
		// "OmitDefaultRegions": true,
		"Regions": {
			"903": {
				"RegionID":   903,
				"RegionCode": "Nas",
				"RegionName": "Guangzhou",
				"Nodes": [
					{
						"Name":     "Nas",
						"RegionID": 903,
						"DERPPort": 14433,
						"HostName": <your_domain_here>",
					},
				],
			},
		},
	},

百思不得其解,翻 issue 区还能见到境内未备案域名会遇到 TLS 阻断的问题。
终于翻到这个: https://forum.tailscale.com/t/ipados-unable-to-connect-to-custom-derp-tls-bad-certificate/1107/8 ,搞定!

1786 次点击
所在节点    宽带症候群
7 条回复
mytsing520
2023-10-31 20:20:41 +08:00
踩过坑,后面看到 unknown authority 就大概率知道是证书链的问题了
也可以到 myssl.com 查找证书链
jswh
2023-10-31 22:17:03 +08:00
遇到过一样的问题,怎么都调不好。最后通过添加
1. OmitDefaultRegions": true,
2.Nodes 里面添加 "InsecureForTests": true,
直接强制跳过证书检查了。
反正自用,无所谓了。
ferock
2023-10-31 23:13:18 +08:00
let 下载的证书,需要再附加中间证书到同一个文本
yushiro
2023-11-01 09:45:21 +08:00
acme.sh 申请的证书文件,有个名字带 full 的,也遇到证书链问题?
evemoo
2023-11-16 10:35:02 +08:00
还有另外一个坑:通过 docker 部署 fredliang/derper ,即便访问域名显示正常、stun 服务器能通,但是其他需要中转的客户端就是连不上

tailscale ping pi -> timeout

而通过 go 安装的形式启动的则一切正常

#!/bin/bash
killall derper
sleep 1
derper -c /volume1/docker/derper/derper.conf -certmode manual -certdir /volume1/docker/derper/ -hostname <your_domain> -a :14433 -http-port -1 -verify-clients


只要 NAS 上面在有 tailscaled 服务即可,不需要挂载 sock
将脚本加入到定时任务,每天凌晨重启一次即可,目前已稳定运行一个月
evemoo
2023-11-21 20:45:52 +08:00
再补充一个,如果群晖开了 IPV6 且有公网地址,又会出现节点延迟正常(不出现 can not connect to xxx DERP )但就是无法中转的问题(坑真多啊

参考: https://github.com/tailscale/tailscale/issues/3110 ,在自建节点添加 "IPv6": "none" 即可
Ritter
34 天前
@yushiro 终于找到这里来了 原来是要用这个全链证书 更换之后一切都好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/987222

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX