dnsmasq导致caddy更新letsencrypt DNS-01 挑战失败

自从宽带有IPv6,家里的NAS上就跑着caddy来走https代理一些本地服务。caddy能自动申请和维护更新let’s encrypt的证书,非常方便,但是最近发现日志上,caddy无法更新到证书。

/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/Caddyfile -root=/var/tmp
Activating privacy features...
2018/11/23 12:07:22 [INFO][xxxx.ptsang.net] acme: Obtaining bundled SAN certificate
2018/11/23 12:07:23 [INFO][xxxx.ptsang.net] AuthURL: https://acme-v01.api.letsencrypt.org/acme/authz/.
2018/11/23 12:07:23 [INFO][xxxx.ptsang.net] acme: Could not find solver for: http-01
2018/11/23 12:07:23 [INFO][xxxx.ptsang.net] acme: Could not find solver for: tls-sni-01 
2018/11/23 12:07:23 [INFO][xxxx.ptsang.net] acme: Trying to solve DNS-01
[xxxx.ptsang.net] dns cloudflare failed to get certificate: Could not find the start of authority

因为let’s encrypt还不能访问纯IPv6地址的服务器,所以只能按DNS-1 Challenge方式验证。这是使用了caddy的cloudflare DNS插件,问题主要是”Could not find the start of authority”。

caddy是开源的,所以去github找到他的cloudflash校验源码,搜索到这句提示是这里返回的。看了一下逻辑,应该是DNS去查询SOA记录,查到了就返回,查不到就报这个错误。

于是用命令行的dig测试一下,果然没有。。

[email protected]:~$ dig +short SOA ptsang.net

#直接指定外网DNS服务器试试
[email protected]:~$ dig +short SOA ptsang.net @1.1.1.1
duke.ns.cloudflare.com. dns.cloudflare.com. 2029463065 10000 2400 604800 3600

居然是路由器上的DNS问题?检查了下路由器上dnsmasq的配置,发现有一句filterwin2k :

-f, –filterwin2k  Later versions of windows make periodic DNS requests which don’t get sensible answers from the public DNS and can cause problems by triggering dial-on-demand links. This flag turns on an option to filter such requests. The requests blocked are for records of types SOA and SRV, and type ANY where the requested name has underscores, to catch LDAP requests.

从名字看似乎是个有些年头的功能了,说win2000时候会周期性查询外网DNS,而导致自动拨号,所以用这个开关来过滤掉SOA、SRV和含有下划线的域名请求…

Dnsmasq主要是家用路由器上使用,一般环境应用也不会用到这类记录,所以原来开不开都没啥感觉,最近刚好给路由器刷了ROM,这些参数默认带上了。而现在let’s encrypt是需要校验域名的SOA (Start of Authority)记录的,于是踩坑成功… feature变bug。

Caddy一般都是在服务器上用,极少遇到这种情况(用DNS Challenge的应该都是比较小众了)。唯一google到一个类似的问题是在caddy的社区,这个楼的问题是刚刚把域名从linode转移到了cloudflare,SOA记录还被边沿DNS服务器缓存中,所以校验失败…

标签: , , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.