Dnsmasq

dnsmasq 為 DNSSEC 驗證返回 (false) “虛假”結果

  • April 10, 2018

我正在使用名為dnsmasq(version 2.72-3+deb8u1) 的 DNSSEC 驗證 DNS-Resolver 執行本地 Debian 8.1 安裝。

如果它無法驗證啟用 DNSSEC 的域,我將其設置為返回 a SERVFAIL,即如果域具有 DNSSEC 條目,它必須正確驗證才能轉發到客戶端。

今天在瀏覽時,我想訪問IETF相當有名的站點,但我不能,因為無法解析域。我檢查了命令行來驗證這一點,我確實得到了一個SERVFAIL. 我檢查了Google 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

現在我不確定該域是否暫時配置錯誤,或者我的連接是否被篡改,或者我的 DNS 伺服器是否配置錯誤,即使到目前為止所有其他域都執行良好,包括“ietf.org”(沒有 www)。

如果有人可以幫助我追踪問題,我將不勝感激。

這是由於 CloudFlare(IETF 的 CDN 提供商)選擇 ECDSAP256SHA256 作為他們的簽名算法。Dnsmasq 從 2.69 開始實施 ECDSA,但是直到 2015 年 3 月發布的 2.73,它才被破壞並沒有修復。因此,您需要更新的 dnsmasq 或修補版本才能正確解決它。

從2.73 部分的 dnsmasq更改日誌:

Fix broken DNSSEC validation of ECDSA signatures.

來自 Cloudflare DS 記錄集:

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

13 是算法類型。DNSSEC 中每個允許的算法都有一個指定的編號。算法 13 是使用 SHA-256 的具有 P-256 曲線的 ECDSA。

最後dig +trace ds www.ietf.org包括通過 Cloudflare 的 CNAME 記錄。

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

引用自:https://serverfault.com/questions/720293