Dec 19, 2020 DNS 温泉番外編in大阪 (大阪?)
http://www.e-ontap.com/dns/amagasaki2020-neg/
RFC 8499 DNS Terminology / JPRS 訳より
NXDOMAIN: このRCODEは、"名前エラー [...] このコードは、問い合わせで参照されたドメイン名が存在しないことを意味する"という記述で[RFC1035]のセクション4.1.1の中に初出している。[RFC2308]は、Name Error(名前エラー)の同義語としてNXDOMAINを規定した。
NODATA: "指定されたクラスの名前としては正当だが、指定されたタイプのレコードが存在しないことを示す疑似RCODE。NODATA応答は、回答からの推論を必要とする"([RFC2308]のセクション1から引用)。"NODATAは、RCODEがNOERRORに設定されており、かつ回答部に関連する情報を何も持たないことで提示される。権威部はSOAレコードを含む。SOAレコードが無ければNSレコードは存在しない"([RFC2308]のセクション2.2から引用)。
RFC 8499 DNS Terminology / JPRS 訳より
NXDOMAIN: このRCODEは、"名前エラー [...] このコードは、問い合わせで参照されたドメイン名が存在しないことを意味する"という記述で[RFC1035]のセクション4.1.1の中に初出している。[RFC2308]は、Name Error(名前エラー)の同義語としてNXDOMAINを規定した。
~% drill -o rd wwww.e-ontap.com @ns.e-ontap.com ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 49053 ;; flags: qr aa ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; wwww.e-ontap.com. IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION: e-ontap.com. 2560 IN SOA ns.e-ontap.com. hostmaster.e-ontap.com. 1607761683 16384 2048 1048576 2560 ;; ADDITIONAL SECTION:
RFC 8499 DNS Terminology / JPRS 訳より
NODATA: "指定されたクラスの名前としては正当だが、指定されたタイプのレコードが存在しないことを示す疑似RCODE。NODATA応答は、回答からの推論を必要とする"([RFC2308]のセクション1から引用)。"NODATAは、RCODEがNOERRORに設定されており、かつ回答部に関連する情報を何も持たないことで提示される。権威部はSOAレコードを含む。SOAレコードが無ければNSレコードは存在しない"([RFC2308]のセクション2.2から引用)。
~% drill -o rd aaaa www.e-ontap.com @ns.e-ontap.com ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 45117 ;; flags: qr aa ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; www.e-ontap.com. IN AAAA ;; ANSWER SECTION: ;; AUTHORITY SECTION: e-ontap.com. 2560 IN SOA ns.e-ontap.com. hostmaster.e-ontap.com. 1607761683 16384 2048 1048576 2560 ;; ADDITIONAL SECTION:
RFC 8499 DNS Terminology / JPRS 訳より
NODATA: ... SOA レコードが権威部に存在すること、または NS レコードが権威部に存在しないこと等を手がかりに、NODATA 応答と参照応答を区別することは可能である。
> drill -o rd a www.e-ontap.com @a.gtld-servers.net ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 3504 ;; flags: qr ; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;; www.e-ontap.com. IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION: e-ontap.com. 172800 IN NS ns.e-ontap.com. e-ontap.com. 172800 IN NS ns2.e-ontap.com. ;; ADDITIONAL SECTION: ns.e-ontap.com. 172800 IN A 14.192.44.1 ns2.e-ontap.com.172800 IN A 49.212.106.253
RCODE Response code - this 4 bit field is set as part of
responses. The values have the following
interpretation:
0 No error condition
1 Format error - The name server was
unable to interpret the query.
2 Server failure - The name server was
unable to process this query due to a
problem with the name server.
3 Name Error - Meaningful only for
responses from an authoritative name
server, this code signifies that the
domain name referenced in the query does
not exist.
4 Not Implemented - The name server does
not support the requested kind of query.
5 Refused - The name server refuses to
perform the specified operation for
policy reasons. For example, a name
server may not wish to provide the
information to the particular requester,
or a name server may not wish to perform
a particular operation (e.g., zone
transfer) for particular data.
6-15 Reserved for future use.
過去3つの定義
2つめはマスターゾーンファイルの中でだけ意味がある。セカンダリへ転送されたデータは明示的な TTL が生成される。別な方法が使われるべきであり RFC 1035 ではマスターファイルフォーマットがディレクティブとして
$TTL <:TTL> [comment]
を含むよう拡張された。
このディレクティブ以降に現れる明示的な TTL を持たない RR には $TTL の TTL が設定される。
残った現在の意味は否定応答の TTL であり、SOA minimum フィールドの新しい定義だ。
権威サーバが否定回答を作成するとき TTL を指定しなければいけない。
Authority Section に SOA レコードをいれる。その TTL は SOA の minimum フィールドと SOA レコードの TTL の小さい方が選ばれる。キャッシュの TTL は減算されて 0 になったら回答に使用してはいけない。
SOA レコードのない否定応答はキャッシュされるべきではない。
キャッシュ時間には制限を設けるべきだ。1 - 3 時間をデフォルトとするのが賢明だ。1日を越えると問題が多いことがわかっている。
(Unbound のデフォルトは cache-max-negative-ttl: 3600)
~% dnsq soa city.amagasaki.hyogo.jp iris-n01.pref.hyogo.lg.jp 6 city.amagasaki.hyogo.jp: 148 bytes, 1+1+2+0 records, response, authoritative, noerror query: 6 city.amagasaki.hyogo.jp answer: city.amagasaki.hyogo.jp 300 SOA iris-n01.pref.hyogo.lg.jp postmaster.city.amagasaki.hyogo.jp\ 2019091701 10800 1800 6048008 86400 authority: city.amagasaki.hyogo.jp 300 NS iris-n01.pref.hyogo.lg.jp authority: city.amagasaki.hyogo.jp 300 NS iris-z01.pref.hyogo.lg.jp ~% dnsq a wwww.city.amagasaki.hyogo.jp iris-n01.pref.hyogo.lg.jp 1 wwww.city.amagasaki.hyogo.jp: 116 bytes, 1+0+1+0 records, response, authoritative, nxdomain query: 1 wwww.city.amagasaki.hyogo.jp authority: city.amagasaki.hyogo.jp 300 SOA iris-n01.pref.hyogo.lg.jp postmaster.city.amagasaki.hyogo.jp\ 2019091701 10800 1800 6048008 86400
権威サーバの応答
~% dnsq soa amashin.co.jp a1-35.akam.net. 6 amashin.co.jp: 219 bytes, 1+1+6+0 records, response, authoritative, noerror query: 6 amashin.co.jp answer: amashin.co.jp 28800 SOA a9-66.akam.net hostmaster.akamai.com 1560762823 43200 7200 604800 7200 ~% dnsq a wwww.amashin.co.jp a1-35.akam.net. 1 wwww.amashin.co.jp: 107 bytes, 1+0+1+0 records, response, authoritative, noerror query: 1 wwww.amashin.co.jp authority: amashin.co.jp 7200 SOA a9-66.akam.net hostmaster.akamai.com 1560762823 43200 7200 604800 7200
空だったキャッシュサーバ (cache-max-negative-ttl: 3600 な Unbound) からの応答
~% dnsqr a wwww.amashin.co.jp 1 wwww.amashin.co.jp: 107 bytes, 1+0+1+0 records, response, noerror query: 1 wwww.amashin.co.jp authority: amashin.co.jp 3600 SOA a9-66.akam.net hostmaster.akamai.com 1560762823 43200 7200 604800 7200
否定回答のキャッシュを答える際に、減算された TTL を持つ SOA を Authority Section に付加しなければいけない。(NXDOMAIN や NODATA が正しく timeout するように)
(つまりキャッシュが多段になるから浸透が遅いというような話は妄言)
(TTL を示せない) 他の否定応答のキャッシングをカバーする RFC はない。ループ回避の必要あり。
Server Failure は 2 つに分類される。
いずれの場合もリゾルバは server failure 応答をキャッシュしてもよい。その場合、5 分を超えてキャッシュしてはいけない (MUST NOT)。<query name, type, class, server IP address> の組みでキャッシュしなければいけない(MUST)。
120秒以内にサーバが応答しなかったらそれをキャッシュしても良い(MAY)。
例: ICMP unreachable, TCP resets, その他 IP スタックのエラー
リゾルバーは、サーバーのサービス不能通知をキャッシュしてもよい(MAY)。
5 分以上停止とみなしてはいけない (MUST NOT)。
トランスポート層でサーバ停止が検出されたときは IP アドレスで、それ以外の場合は <query name, type, class, server IP address> の組みでキャッシュしなければいけない(MUST)。
NXDOMAINに関する警告: NXDOMAIN は 照会ドメインにサブドメインが存在しないことを保証することは RFC 1034 と RFC 1035 から明らかである。
例えば、ns.heaven.af.milに対して NXDOMAIN があったら、 a.ns.heaven.af.mil と b.ns.heaven.af.mil とが存在しないと結論できる。 あるサーバがa.ns.heaven.af.mil と b.ns.heaven.af.mil に対するレコードを持ち、 ns.heaven.af.mil に対するレコードを持たないなら、 NXDOMAINではなく、zero-records (#5) 返答を送る。
『にもかかわらず』、RFC 2308 ではドメインが存在しているときでさえ、 照会名に対してはいかなるタイプのレコードも存在しないことを意味する ことに NXDOMAIN を返事することを認めた。 そこで、相互運用上の破滅を引き起こさぬために、 キャッシュとしては上の推論をしないようにすることが必須である。
下には全く何もない
Abstract This document states clearly that when a DNS resolver receives a response with a response code of NXDOMAIN, it means that the domain name which is thus denied AND ALL THE NAMES UNDER IT do not exist. This document clarifies RFC 1034 and modifies a portion of RFC 2308: it updates both of them.
(JPRS訳) この文書は、DNSリゾルバーがドメイン名不在のレスポンスコードを持つ応答を受信した場合、ないと否定されたドメイン名とその下にあるすべての名前は存在しないということを明確に述べている。
解説: ドメイン名はラベルの木構造なのだから、あるノードが存在しない ("Name Error" or "NXDOMAIN") というなら、そのノードを根とする枝(サブツリー)全体が存在しないってこと。
上記の例 (注: foo.example と bar.foo.example) のように2つの query が 1つですむなどキャッシュの効率化や権威サーバへのトラフック減に資すので DNS 全体のエコシステムの利益になる。
RFC 7816 の QNAME minimization に特に資する。(NXDOMAIN に遭遇したら検索をすぐに終わらせられるから)
"NXDOMAIN cut" は suffix がないことがわかればランダム QNAME 攻撃を緩和するのに役立つかもしれない。(balakrichenan-dafa888)
管理者が suffix に query を投げてやれば、"NXDOMAIN cut" により NXDOMAIN を受け取ったリゾルバは権威サーバへの query の転送をやめるだろう。
Internet Engineering Task Force (IETF) K. Fujiwara
Request for Comments: 8198 JPRS
Updates: 4035 A. Kato
Category: Standards Track Keio/WIDE
ISSN: 2070-1721 W. Kumari
Google
July 2017
Aggressive Use of DNSSEC-Validated Cache
chalie.example.com を引いて以下をキャッシュしたら、以降は alpha と echo の間のドメイン名をすべて NXDOMAIN 応答してよい。
alpha.example.com IN NSEC echo.example.com
Unbound に実装 (デフォルトは #aggressive-nsec: no)
In BIND v9.12 this feature is enabled by default. だそうです
JP も藤原さんを立てて NSEC にするか、NSEC3 でも Opt-Out をやめればこれ適用できるのに。
(注: 私は DNSSEC 自体に反対ですけどね!)
> dig aws.amazon.com ; <<>> DiG 9.9.5 <<>> aws.amazon.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18799 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aws.amazon.com. IN A ;; ANSWER SECTION: aws.amazon.com. 50 IN CNAME aws.amazon.com.cdn.amazon.com. aws.amazon.com.cdn.amazon.com. 55 IN CNAME dr49lng3n1n2s.cloudfront.net. dr49lng3n1n2s.cloudfront.net. 60 IN A 54.230.126.41 ;; Query time: 290 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Feb 16 10:25:28 JST 2019 ;; MSG SIZE rcvd: 123 > dig ns com.cdn.amazon.com ; <<>> DiG 9.9.5 <<>> ns com.cdn.amazon.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61538 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;com.cdn.amazon.com. IN NS ;; Query time: 55 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Feb 16 10:25:45 JST 2019 ;; MSG SIZE rcvd: 36
qname-minimisation-strict: yes な Unbound で www.chukyo-u.ac.jp が引けなかった。
Date: Thu, 5 Oct 2017 13:07:56 +0900 From: "T.Suzuki" To: 情シス Subject: www.chukyo-u.ac.jp 工学部鈴木です。 r1.amazonaws.com と r2.amazonaws.com が elb.amazonaws.com に関して、NXDOMAIN を応答します。これは RFC 1034, RFC 8020 違反であり、DNS キャッシュサーバの実 装によっては www.chukyo-u.ac.jp の名前解決に失敗する可能性があります。 (u1,u2 は NODATA で正しいので 1/2 の確率) 大学として機会損失があるとまずいでしょう。 顧客として改善の申し入れをすると良いでしょう。窓口を教えて頂ければ私が交渉し てもよいです。(いちおう AWS の知り合いの技術者には伝えましたが) ~% dig www.chukyo-u.ac.jp @ns1.hs.ctc.jp ; <<>> DiG 9.9.5 <<>> www.chukyo-u.ac.jp @ns1.hs.ctc.jp ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50893 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.chukyo-u.ac.jp. IN A ;; ANSWER SECTION: www.chukyo-u.ac.jp. 86400 IN CNAME WWW-ELB-EXT-1997305994.ap-northeast-1.elb.amazonaws.com. ;; Query time: 15 msec ;; SERVER: 218.216.179.154#53(218.216.179.154) ;; WHEN: Thu Oct 05 13:00:21 JST 2017 ;; MSG SIZE rcvd: 116 ~% dig WWW-ELB-EXT-1997305994.ap-northeast-1.elb.amazonaws.com @a.gtld-servers.net ; <<>> DiG 9.9.5 <<>> WWW-ELB-EXT-1997305994.ap-northeast-1.elb.amazonaws.com @a.gtld-servers.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1961 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 5 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;WWW-ELB-EXT-1997305994.ap-northeast-1.elb.amazonaws.com. IN A ;; AUTHORITY SECTION: amazonaws.com. 172800 IN NS u1.amazonaws.com. amazonaws.com. 172800 IN NS u2.amazonaws.com. amazonaws.com. 172800 IN NS r1.amazonaws.com. amazonaws.com. 172800 IN NS r2.amazonaws.com. ;; ADDITIONAL SECTION: u1.amazonaws.com. 172800 IN A 156.154.64.10 u2.amazonaws.com. 172800 IN A 156.154.65.10 r1.amazonaws.com. 172800 IN A 205.251.192.27 r2.amazonaws.com. 172800 IN A 205.251.195.199 ;; Query time: 16 msec ;; SERVER: 192.5.6.30#53(192.5.6.30) ;; WHEN: Thu Oct 05 13:00:32 JST 2017 ;; MSG SIZE rcvd: 216 ~% dig WWW-ELB-EXT-1997305994.ap-northeast-1.elb.amazonaws.com @r1.amazonaws.com ; <<>> DiG 9.9.5 <<>> WWW-ELB-EXT-1997305994.ap-northeast-1.elb.amazonaws.com @r1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26587 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;WWW-ELB-EXT-1997305994.ap-northeast-1.elb.amazonaws.com. IN A ;; AUTHORITY SECTION: ap-northeast-1.elb.amazonaws.com. 300 IN NS ns-1325.awsdns-37.org. ap-northeast-1.elb.amazonaws.com. 300 IN NS ns-1683.awsdns-18.co.uk. ap-northeast-1.elb.amazonaws.com. 300 IN NS ns-54.awsdns-06.com. ap-northeast-1.elb.amazonaws.com. 300 IN NS ns-982.awsdns-58.net. ;; Query time: 231 msec ;; SERVER: 205.251.192.27#53(205.251.192.27) ;; WHEN: Thu Oct 05 13:00:43 JST 2017 ;; MSG SIZE rcvd: 220 ~% dig elb.amazonaws.com @r1.amazonaws.com ; <<>> DiG 9.9.5 <<>> elb.amazonaws.com @r1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 10800 ;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;elb.amazonaws.com. IN A ;; AUTHORITY SECTION: amazonaws.com. 3593 IN SOA dns-external-master.amazon.com. hostmaster.amazon.com. ( 2012708585 ; serial 180 ; refresh (3 minutes) 60 ; retry (1 minute) 2592000 ; expire (4 weeks 2 days) 3593 ; minimum (59 minutes 53 seconds) ) ;; Query time: 262 msec ;; SERVER: 205.251.192.27#53(205.251.192.27) ;; WHEN: Thu Oct 05 13:00:52 JST 2017 ;; MSG SIZE rcvd: 120 ~% dig elb.amazonaws.com @u1.amazonaws.com ; <<>> DiG 9.9.5 <<>> elb.amazonaws.com @u1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64248 ;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65235 ;; QUESTION SECTION: ;elb.amazonaws.com. IN A ;; AUTHORITY SECTION: amazonaws.com. 3593 IN SOA pdns1.ultradns.net. hostmaster.amazon.com. ( 2014061348 ; serial 180 ; refresh (3 minutes) 60 ; retry (1 minute) 2592000 ; expire (4 weeks 2 days) 3593 ; minimum (59 minutes 53 seconds) ) ;; Query time: 19 msec ;; SERVER: 156.154.64.10#53(156.154.64.10) ;; WHEN: Thu Oct 05 13:00:56 JST 2017 ;; MSG SIZE rcvd: 11 -- T.Suzuki
Date: Fri, 20 Oct 2017 この度は回答までお時間を要しまして誠に申し訳ございませんでした。 本事象について、調査結果をご報告致します。 歴史的な背景により、現在 r1/r2.amaozonaws.com. については、 empty non-terminal のドメインについて NOERROR ではなく NXDOMAIN を返す挙動となっております。 この問題については担当チームも把握しており、 AWS のロードマップとして修正を予定しております。 なお、大変恐縮ではございますが、今後の予定の確定した情報があるわけではなく、具体的な修正時期につい てはご案内できかねますことをご理解賜りたく存じます。 お客様のご期待に添う回答とならず大変恐縮ではございますが、上記についてご理解いただければ幸いでござ います。
~% dig any elb.amazonaws.com @r2.amazonaws.com +noall +ans ;; Truncated, retrying in TCP mode. ; <<>> DiG 9.9.5 <<>> any elb.amazonaws.com @r2.amazonaws.com +noall +ans ;; global options: +cmd elb.amazonaws.com. 300 IN TXT "RFC7816 - do not remove"
(実装には手を入れず TXT で ENT でなくしたわけね / RFC7816 は Query Name Minimisation)
~% drill a cname.small-is-beautiful.jp @ns.small-is-beautiful.jp ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 3580 ;; flags: qr aa rd ; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; cname.small-is-beautiful.jp. IN A ;; ANSWER SECTION: cname.small-is-beautiful.jp. 60 IN CNAME www-elb-ext-1997305994.ap-northeast-1.elb.amazonaws.com. ;; AUTHORITY SECTION: amazonaws.com. 600 IN SOA ns.amazonaws.com. tss.e-ontap.com. 2019080501 3600 600 86400 600
Section 1 says: "QNAME" - the name in the query section of an answer, or where this resolves to a CNAME, or CNAME chain, the data field of the last CNAME. It should say: "QNAME" - the name in the query section (RFC 1034, section 3.7.1).
Warning: if there is a chain of CNAME (or DNAME), the name that does not exist is the last of the chain ([RFC6604]) and not the QNAME. The NXDOMAIN stored in the cache is for the denied name, not always for the QNAME.
警告: CNAME (や DNAME) の連鎖がある場合、存在しないのは連鎖の最後の名前であって QNAME ではない。キャッシュに登録される NXDOMAIN は "denied name" であって、いつも QNAME というわけではない。
こいつは偽者だ!
~% drill -o rd a cname.small-is-beautiful.jp @ns.small-is-beautiful.jp ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 53591 ;; flags: qr aa ; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; cname.small-is-beautiful.jp. IN A ;; ANSWER SECTION: cname.small-is-beautiful.jp. 60 IN CNAME www-elb-ext-1997305994.ap-northeast-1.elb.amazonaws.com. ;; AUTHORITY SECTION: amazonaws.com. 600 IN SOA ns.amazonaws.com. tss.e-ontap.com. 2019080501 3600 600 86400 600
大丈夫、まっとうなキャッシュは騙されない。(RFC 2181 に引き直せと書いてある)
~% drill a cname.small-is-beautiful.jp @1.1.1.1 ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 33653 ;; flags: qr rd ra ; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; cname.small-is-beautiful.jp. IN A ;; ANSWER SECTION: cname.small-is-beautiful.jp. 60 IN CNAME www-elb-ext-1997305994.ap-northeast-1.elb.amazonaws.com. www-elb-ext-1997305994.ap-northeast-1.elb.amazonaws.com. 60 IN A 54.168.8.41 www-elb-ext-1997305994.ap-northeast-1.elb.amazonaws.com. 60 IN A 52.193.237.25(まっとうじゃなかったら...)
ここからは私もまるで納得できない話...
これが Unbound で SERVFAIL になる。さあ何がおかしい?
INSECURE Delegation じゃないですか。なぜこれで SERVFAIL?
RRSIG jp.sharp/CNAME alg 8, id 26718: The Signers Name field of the RRSIG RR (sharp) does not match the name of the zone containing the RRset (jp.sharp).
そういうことです。
jp.sharp の委譲先に sharp ゾーンがあるのおかしいでしょ!
;; ANSWER SECTION: jp.sharp. 300 IN CNAME ualsharp.hs.llnwd.net. ;; AUTHORITY SECTION: sharp. 600 IN NS ns1.sharp.co.jp. sharp. 600 IN NS tg1.sharp.co.jp. ;; ADDITIONAL SECTION: ns1.sharp.co.jp. 43200 IN A 61.214.248.154 tg1.sharp.co.jp. 60 IN A 61.214.248.155
とはいえ、INSECURE Delegation (DS 無し) ...
~% dig insecure.mufj.jp +noall +comm +ans ; <<>> DiG 9.9.5 <<>> insecure.mufj.jp +noall +comm +ans ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 1635 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232署名検証を無効 (+cd) にすると、、、
~% dig insecure.mufj.jp +noall +comm +ans +cd +dnssec ; <<>> DiG 9.9.5 <<>> insecure.mufj.jp +noall +comm +ans +cd +dnssec ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15469 ;; flags: qr rd ra cd; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 1232 ;; ANSWER SECTION: insecure.mufj.jp. 14 IN CNAME www.e-ontap.com. insecure.mufj.jp. 14 IN RRSIG CNAME 13 3 60 20371231000000 20201028093430 18023 mufj.jp. kA3AHm1HEiJW/Uoq+UuNZWXAEpB1Mjig7xZuSZZ6uM0IUWqud/cPPGvT 8WcU+9YqIWhWPVsJE5w0RwC+w5RuXw== www.e-ontap.com. 1754 IN A 49.212.171.172
no valid signatures だそうです。
[1607769102] unbound[23095:0] info: verify rrset insecure.mufj.jp. CNAME IN [1607769102] unbound[23095:0] debug: verify sig 18023 13 [1607769102] unbound[23095:0] debug: verify: could not find appropriate key [1607769102] unbound[23095:0] debug: rrset failed to verify: no valid signatures [1607769102] unbound[23095:0] debug: verify result: sec_status_bogus [1607769102] unbound[23095:0] info: validator: response has failed ANSWER rrset: insecure.mufj.jp. CNAME IN [1607769102] unbound[23095:0] info: Validate: message contains bad rrsets
なんで検証するんですか? (DS 無いのですが)
バグなんですか? 仕様なんですか?
でもこんな設定、SERVFAIL で良いと思うのですけどね。 (偽 mufj.jp (sharp) ゾーンだと考えれば納得が行く / だとすると Unbound 以外の多くの実装が騙されていることに)
DNSSEC さっぱりわかりません。誰か教えて!
(2022.7.18 再確認)
# drill hoge.gov.mufj.jp ;; ->>HEADER<<- opcode: QUERY, rcode: SERVFAIL, id: 32719 ;; flags: qr rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; hoge.gov.mufj.jp. IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION:(ENT の下の NXDOMAIN が SERVFAIL になる場合がある / BIND + dnssec-signzone だと SERVFAIL にならず毒入れ可)
簡単な結論はこちら
"The short answer is: DO NOT USE THE NSEC3 OPT-OUT BIT." (Viktor Dukhovni)
... JPRS さんにも再考頂きたいですね。
% dnsq txt hoge.sub.mufj.jp ns.sub.mufj.jp 16 hoge.sub.mufj.jp: 107 bytes, 1+0+2+0 records, response, authoritative, nxdomain query: 16 hoge.sub.mufj.jp authority: sub.mufj.jp 120 SOA ns.sub.mufj.jp admin.e-ontap.com 1544157204 1200 900 3600000 120 authority: sub.mufj.jp 120 NS ns.e-ontap.com
またいつかどこかの温泉で...