Edgeone + DNSPOD + 局域网内 Traefik 的自动 TLS 配置踩坑
Edgeone + DNSPOD + 局域网内 Traefik 的自动 TLS 配置踩坑 内网 DNS 劫持导致权威区识别错误 报错信息如下: <br /> > zone cc. not found in dnspod for domain \_acme-challenge.crs.ivanli.cc. <br /> 我的域名是 ivanli.cc ,Traefik 在...
Edgeone + DNSPOD + 局域网内 Traefik 的自动 TLS 配置踩坑
内网 DNS 劫持导致权威区识别错误
报错信息如下:
zone cc. not found in dnspod for domain _acme-challenge.crs.ivanli.cc.
我的域名是 ivanli.cc ,Traefik 在 dns01.FindZoneByFqdn("_acme-challenge.crs.ivanli.cc") 时,需要通过真实 NS/SOA 链条推断出“哪个 zone 是权威区”;
但是由于在服务器所在网络内使用了 Fake IP,劫持的 DNS 返回了奇怪/错误的 SOA,导致它判断权威区是 cc. 而不是 ivanli.cc.
解决方案要么想办法绕过 Fake-IP,比如在同主机上搭个 DNS 服务,上游走 DoH/DoT,要么和我一样放弃坑了我 N 次的 Fake-IP。之前搞 Cloudflare 的 DNS challenge 已经坑我一次了,现在又坑我 QAQ
这个问题不知道为什么以前没遇到,用了两三年了突然出现。
CDN 通配符 CNAME 影响 ACME
报错信息如下:
zone dnse4.com. not found in dnspod for domain 3j5yxr...ivanli.cc.eo.dnse4.com.
Traefik 的默认行为是支持 CNAME:它看到了 _acme-challenge… -> …eo.dnse4.com,于是认为需要在 dnse4.com 这个 zone 里创 建 TXT。但我们的 API Key 只管理 DNSPod 账号下的 ivanli.cc, dnse4.com 这个域是 Edgeeone 的,并不属于我们账号名下 ,导致匹配不到 zone,直接报错。
解决方法就是在 Traefik 容器环境中显式禁用 lego 的 CNAME 支持:
Environment=LEGO_DISABLE_CNAME_SUPPORT=true