Traefik对接PowerDNS配置DNS挑战获取通配符证书超时报错求助
Traefik DNS挑战获取通配符证书超时问题
问题描述
我在尝试配置Traefik的DNS挑战功能以获取通配符证书时遇到故障,对应环境变量配置如下:
environment: - TRAEFIK_ENTRYPOINTS_HTTP=true - TRAEFIK_ENTRYPOINTS_HTTP_ADDRESS=:80 - TRAEFIK_ENTRYPOINTS_HTTPS=true - TRAEFIK_ENTRYPOINTS_HTTPS_ADDRESS=:443 - TRAEFIK_ENTRYPOINTS_HTTPS_HTTP_TLS=true - TRAEFIK_ENTRYPOINTS_HTTPS_HTTP_TLS_CERTRESOLVER=default - TRAEFIK_ENTRYPOINTS_HTTPS_HTTP_TLS_DOMAINS_0_MAIN=mydomain.net - TRAEFIK_ENTRYPOINTS_HTTPS_HTTP_TLS_DOMAINS_0_SANS=*.mydomain.net - TRAEFIK_PROVIDERS_DOCKER=true - TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT=true - TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_EMAIL=info@mydomain.net - TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_DNSCHALLENGE=true - TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_DNSCHALLENGE_PROVIDER=pdns - TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_DNSCHALLENGE_RESOLVERS=8.8.8.8:53 - TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_DNSCHALLENGE_DELAYBEFORECHECK=15 - TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_STORAGE=/data/acme.json - PDNS_API_URL=http://192.168.123.10:8081/ - PDNS_API_KEY=pdns-api-key
程序运行输出的错误日志如下:
time="2021-09-06T08:53:39+02:00" level=error msg="Unable to obtain ACME certificate for domains \"mydomain.net,*.mydomain.net\" : unable to generate a certificate for the domains [mydomain.net *.mydomain.net]: error: one or more domains had a problem:\n[*.mydomain.net] time limit exceeded: last error: read udp 192.168.160.2:38270->195.141.155.147:53: i/o timeout\n[mydomain.net] time limit exceeded: last error: read udp 192.168.160.2:49936->195.141.155.147:53: i/o timeout\n" providerName=default.acme
我已尝试增大DELAYBEFORECHECK参数、自定义设置RESOLVERS解析器,均未解决问题。经核实ACME挑战的TXT记录已正确创建在PowerDNS中。
排查解决方法
首先确认问题核心:错误日志显示Traefik实际使用的DNS服务器为195.141.155.147,而非你配置的8.8.8.8,说明自定义解析器配置未生效,且该DNS服务器网络不可达导致超时。可按以下步骤排查:
- 修正DNS解析器配置格式
Traefik v2+ 中dnsChallenge.resolvers为数组类型,环境变量配置需要添加索引后缀,原配置缺少_0标识,修改为如下格式即可生效:
- TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_DNSCHALLENGE_RESOLVERS_0=8.8.8.8:53
如果需要配置多个解析器,依次添加_1、_2后缀即可。
- 验证容器DNS网络连通性
进入Traefik容器内部手动测试DNS查询,确认网络可达:
# 进入Traefik容器 docker exec -it <你的Traefik容器名> sh # 测试公共DNS连通性 nslookup _acme-challenge.mydomain.net 8.8.8.8 # 测试内网PowerDNS连通性 nslookup _acme-challenge.mydomain.net 192.168.123.10
如果nslookup返回超时,先排查容器所在主机的防火墙、出口安全组是否允许UDP 53端口出网。
- 调整解析器为内网PowerDNS(可选)
如果你的PowerDNS为内网DNS服务,公网DNS无法直接查询到最新记录,可直接将解析器指定为PowerDNS地址,避免公网同步延迟:
- TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_DNSCHALLENGE_RESOLVERS_0=192.168.123.10:53
同时可将DELAYBEFORECHECK调整为30-60秒,给PowerDNS留出足够的记录同步时间。
- 跳过传播检查(可选)
如果确认TXT记录已正确写入PowerDNS,可添加以下配置跳过Traefik的DNS传播检查,直接发起ACME校验请求:
- TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_DNSCHALLENGE_DISABLEPROPAGATIONCHECK=true
该配置需要配合足够的DELAYBEFORECHECK参数使用,避免ACME服务端查询时记录还未生成。
内容的提问来源于stack exchange,提问作者Halil
相关产品推荐
相关产品推荐

