V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
evemoo
V2EX  ›  宽带症候群

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

  •  
  •   evemoo · 2023-10-31 19:31:50 +08:00 · 1748 次点击
    这是一个创建于 373 天前的主题,其中的信息可能已经有所发展或是发生改变。

    结论:证书链不对
    得从 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 ,搞定!

    7 条回复    2024-10-20 14:59:23 +08:00
    mytsing520
        1
    mytsing520  
       2023-10-31 20:20:41 +08:00
    踩过坑,后面看到 unknown authority 就大概率知道是证书链的问题了
    也可以到 myssl.com 查找证书链
    jswh
        2
    jswh  
       2023-10-31 22:17:03 +08:00
    遇到过一样的问题,怎么都调不好。最后通过添加
    1. OmitDefaultRegions": true,
    2.Nodes 里面添加 "InsecureForTests": true,
    直接强制跳过证书检查了。
    反正自用,无所谓了。
    ferock
        3
    ferock  
       2023-10-31 23:13:18 +08:00 via iPhone
    let 下载的证书,需要再附加中间证书到同一个文本
    yushiro
        4
    yushiro  
       2023-11-01 09:45:21 +08:00 via iPhone
    acme.sh 申请的证书文件,有个名字带 full 的,也遇到证书链问题?
    evemoo
        5
    evemoo  
    OP
       357 天前
    还有另外一个坑:通过 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
        6
    evemoo  
    OP
       352 天前
    再补充一个,如果群晖开了 IPV6 且有公网地址,又会出现节点延迟正常(不出现 can not connect to xxx DERP )但就是无法中转的问题(坑真多啊

    参考: https://github.com/tailscale/tailscale/issues/3110 ,在自建节点添加 "IPv6": "none" 即可
    Ritter
        7
    Ritter  
       18 天前
    @yushiro 终于找到这里来了 原来是要用这个全链证书 更换之后一切都好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:37 · PVG 04:37 · LAX 12:37 · JFK 15:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.