dnsmasq 为 DNSSEC 验证返回(假)“虚假”结果

com*_*eak 3 dnssec dnsmasq debian-jessie

我正在使用名为dnsmasq(version 2.72-3+deb8u1)的 DNSSEC 验证 DNS 解析器运行本地 Debian 8.1 安装。

我将它设置SERVFAIL为在无法验证启用 DNSSEC 的域时返回 a ,即如果域具有 DNSSEC 条目,则它必须正确验证才能转发到客户端。

当我今天浏览时,我想访问IETF相当有名的站点,但我无法访问,因为无法解析域。我检查了命令行以验证这一点,我确实得到了一个SERVFAIL. 我检查了谷歌 DNS 服务器(8.8.8.8),SERVFAIL但没有得到 IP 地址。

之后,我为每个 dns 请求启用日志记录并检查结果。看来我的感觉是对的,DNSSEC 验证失败了,尽管它从 DNS 转发器得到了与我从 Google 得到的相同的响应。

这里是 my 的相应行syslog

Sep  5 13:27:13 dnsmasq: query[A] www.ietf.org from 192.168.1.10
Sep  5 13:27:13 dnsmasq: forwarded www.ietf.org to 81.3.21.188
Sep  5 13:27:13 dnsmasq: forwarded www.ietf.org to 178.63.73.246
Sep  5 13:27:13 dnsmasq: dnssec-query[DNSKEY] ietf.org to 81.3.21.188
Sep  5 13:27:13 dnsmasq: dnssec-query[DS] ietf.org to 81.3.21.188
Sep  5 13:27:13 dnsmasq: dnssec-query[DNSKEY] org to 81.3.21.188
Sep  5 13:27:13 dnsmasq: dnssec-query[DS] org to 81.3.21.188
Sep  5 13:27:13 dnsmasq: dnssec-query[DNSKEY] . to 81.3.21.188
Sep  5 13:27:13 dnsmasq: reply . is DNSKEY keytag 1518
Sep  5 13:27:13 dnsmasq: reply . is DNSKEY keytag 19036
Sep  5 13:27:13 dnsmasq: reply org is DS keytag 21366
Sep  5 13:27:13 dnsmasq: reply org is DS keytag 21366
Sep  5 13:27:13 dnsmasq: reply org is DNSKEY keytag 19629
Sep  5 13:27:13 dnsmasq: reply org is DNSKEY keytag 21366
Sep  5 13:27:13 dnsmasq: reply org is DNSKEY keytag 9795
Sep  5 13:27:13 dnsmasq: reply org is DNSKEY keytag 12023
Sep  5 13:27:13 dnsmasq: reply ietf.org is DS keytag 45586
Sep  5 13:27:13 dnsmasq: reply ietf.org is DS keytag 45586
Sep  5 13:27:13 dnsmasq: reply ietf.org is DNSKEY keytag 45586
Sep  5 13:27:13 dnsmasq: reply ietf.org is DNSKEY keytag 40452
Sep  5 13:27:13 dnsmasq: dnssec-query[DNSKEY] cloudflare-dnssec.net to 81.3.21.188
Sep  5 13:27:13 dnsmasq: dnssec-query[DS] cloudflare-dnssec.net to 81.3.21.188
Sep  5 13:27:13 dnsmasq: dnssec-query[DNSKEY] net to 81.3.21.188
Sep  5 13:27:13 dnsmasq: dnssec-query[DS] net to 81.3.21.188
Sep  5 13:27:13 dnsmasq: reply net is DS keytag 35886
Sep  5 13:27:13 dnsmasq: reply net is DNSKEY keytag 45464
Sep  5 13:27:13 dnsmasq: reply net is DNSKEY keytag 35886
Sep  5 13:27:13 dnsmasq: reply cloudflare-dnssec.net is DS keytag 537
Sep  5 13:27:13 dnsmasq: reply cloudflare-dnssec.net is BOGUS DNSKEY
Sep  5 13:27:13 dnsmasq: validation result is BOGUS
Sep  5 13:27:13 dnsmasq: reply www.ietf.org is <CNAME>
Sep  5 13:27:13 dnsmasq: reply www.ietf.org.cdn.cloudflare-dnssec.net is 104.20.0.85
Sep  5 13:27:13 dnsmasq: reply www.ietf.org.cdn.cloudflare-dnssec.net is 104.20.1.85
Run Code Online (Sandbox Code Playgroud)

现在我不确定域是暂时配置错误还是我的连接被篡改或者我的 DNS 服务器配置错误,即使到目前为止所有其他域都运行良好,包括“ietf.org”(没有 www)。

如果有人可以帮助我追踪问题,我将不胜感激。

小智 5

这是由于 CloudFlare(IETF 的 CDN 提供商)选择 ECDSAP256SHA256 作为其签名算法。Dnsmasq 从 2.69 开始实施 ECDSA,但是它被破坏并且直到 2015 年 3 月发布的 2.73 才被修复。因此,您需要更新的 dnsmasq 或修补版本才能正确解决它。

来自2.73 部分的 dnsmasq更改日志

Fix broken DNSSEC validation of ECDSA signatures.
Run Code Online (Sandbox Code Playgroud)

来自 Cloudflare DS 记录集:

cloudflare.net。86400 在 DS 2371 13 2 90F710A107DA51ED78125D30A68704CF3C0308AFD01BFCD7057D4BD0 3B62C68B

13 是算法类型。DNSSEC 中每个允许的算法都有一个指定的编号。算法 13 是 ECDSA,具有使用 SHA-256 的 P-256 曲线。

最后dig +trace ds www.ietf.org包括通过 Cloudflare 的 CNAME 记录。

www.ietf.org。1800 IN CNAME www.ietf.org.cdn.cloudflare-dnssec.net。