## page was renamed from DNS/1/返答 <> 項目も分類が必要になった。-- ToshinoriMaeno <> ---- <> 長くなったので、分割を考える。-- ToshinoriMaeno <> = DNS/問合せ = [[DNS/問合せ]] リゾルバーはどういうquery(問合せ)を送りだすのだろう。 そして、返答(response)をどう処理しているのだろう。 [[DNS/毒盛]] を避けるためになにをしているのだろう。 = DNS/返答 = リゾルバーにとって重要なのはゾーンサーバーからの返答です。 == ゾーンサーバーからの返答 == query(たずね、尋ね、とい、問、問い合わせ、照会)に対して、 [[DNS/ゾーンサーバ]] が返す返答を理解することが基本です。 [[DNS/RFC/1035/4|形式]] (DNS/RFC/1035/4) [[DNS/1/queries]] 返答コード [[/RCODE]] [[/分類]] [[/返答しないサーバー]]もあります。 [[/timed_out]] とは一定時間内に返事が返ってこないことだ。 . サーバーが動作していないか、返事が受け取れないか。 [[/返答中のレコード]] == DJB の分類 == DBJは(正常な)DNS返答を5種に分けていましたが、NXDomain はRCODEが違うので、見分けらる。[[/DJB]]  またdelegationもaa offのはずなので、見分けられる。CNAME 返答では事情が異なる。 ということで残るは3種になるのだが。-- ToshinoriMaeno <> [[/minimal-responses]] == header == [[DNS/返答/header]] === 返答コード === 重要なのは:[[DNS/1/RCODE]] が 0 と 3 の場合です。(0: NOERROR, 3: NXDOMAIN)   SERVFAILも関係する。(特にCNAMEの場合) -- ToshinoriMaeno <> == よっつの節 == 返答の[[/header]]部分に重要な情報がある。([[DNS/1/messages]]) . The four sections are: {{{ Question Carries the query name and other query parameters. Answer Carries RRs which directly answer the query. Authority Carries RRs which describe other authoritative servers. May optionally carry the SOA RR for the authoritative data in the answer section. Additional Carries RRs which may be helpful in using the RRs in the other sections. }}} == 返答の用途 == RFC 1034にゾーンサーバからの返答の用途についての説明がある。 . 形式の規定がRFC 1035にあるかと思ったが見つからない。 実際にどう使われているかの調査から、こんな使い方をするのだろうという話になっているようだ。 -- ToshinoriMaeno <> [[/DJB]]は'''5つのDNS返答'''に分類している。これらはただの分類ではない。  書かれた順序にも意味がある。 . http://djbdns.qmail.jp/djbdns/notes/type.html == NXDomain 返答 == NXDOMAIN (RCODE NXDomain, AA flag, -> SOAあり) [[/NXDOMAIN]]返答 . 以下の場合もあることが分かっている。-- ToshinoriMaeno <> . Answer Sectionがあって、CNAMEレコードがあり、Authoritiy Section にSOAがない。 つまり、CNAME返答があっても、NoErrorではない場合があるということ。 https://serverfault.com/questions/157775/can-a-valid-cname-response-contain-an-nxdomain-status {{{ There's an ongoing debate in the IETF "DNSEXT" Working Group about the correct response to a query when the target of the CNAME does not exist and in other unusual circumstances. In this case I believe the response is definitely incorrect. }}} https://www.ietf.org/mail-archive/web/dnsext/current/msg11940.html {{{ Refocusing on Ed Lewis initial question, regarding the RCODE. One server is giving NXDOMAIN, the other NOERROR. Given the fact that CNAME records where followed, the status code should not be switched to NXDOMAIN. This is conform the server algorithm in RFC2672. }}} NXDOMAINを返すべきではない。とある。 == NoError 返答の分類 == NoError返答は四つに区別される。排他的である。(問い合わせ名に関して:[[DNS/RFC/2181/s10]] 1. CNAMEであった。(問い合わせタイプではないとき) 1. answerあり (AA flag, Answer Seciton; CNAME typeの問い合わせを含む) . any type query の返事も含まれるはずだが、詳細は未調査 1. no data (AA flag, +SOA) 1. referral (AA off, + Authoriy Section NS) 最近見かけたもの:  answer, authorityとも空のもの。(本来返事をすべきではないか、SERVFAILを返すような状況) 責任のないゾーンについての問い合わせ。 === NoError返答の意味 === 前野は以下の名前で呼ぶことにした。 1. [[/CNAME返答]] (qtype はCNAMEではないときで、qtypeが一致するレコードはない) 1. [[/有効返答]] (qname, qtype が一致した返答RRSet) CNAME typeのレコードはないはず。 1. [[/NoData返答]] (qnameに一致する名前はあったが、qtypeまで一致するレコードはない。CNAMEでもない。) 1. [[/参照返答]] (あえて、委任返答とは呼ばない) [[DNS/RFC/2181/s10]] 10.1. CNAME resource recordsには以下のようにある。 {{{ + one CNAME record exists, optionally accompanied by SIG, NXT, and KEY RRs, + one or more records exist, none being CNAME records, + the name exists, but has no associated RRs of any type, + the name does not exist at all. }}} 3つのsectionにどういうレコードを入れてよいかは、今後検討する。 -- ToshinoriMaeno <> == CNAMEレコード == 問い合わせ名がCNAMEレコードを持つ場合には上にあるように、 . CNAMEの先(本名)をたどる動作をするサーバーが多い。 このとき、返答コードはCNAMEが指す先の名前によるようだ。 注:毒盛される危険があるので、CNAMEの先に関する返答は全て捨てるのが安全である。 . つまり、answer sectionにCNAMEレコードがあった場合には、そのCNAMEをひとつだけ受け入れる。 . これでも、毒の可能性はあるのだが。-- ToshinoriMaeno <> == RFCに従わない運用サーバからの返答 == 前述の4つにあてはまらない返答もありそうだが、分かっていない。 . CNAMEレコードが存在する場合、2,3,4 ではなく、1 を返答することになっているのだが、 実装によってはCNAME以外のレコードがmatchすると、CNAMEを答えないものがある。(tinydns) [[/処理]] == delegation == [[/delegation]] == 毒盛 == 毒盛を目的とする返答はRFCに規定された形式の返答を返すとはかぎらない。 おかしな返答を受け取ったら、捨てるのが安全策である。 . よくあるのはAnswer Sectionがあるのに、Authority(+Additional) Sectionをもつ返答だ。 == non-recursive server == 再帰検索しないサーバ、権威サーバ、ゾーンサーバ、コンテンツサーバなどとも呼ばれる。 ローカルゾーン(ファイル)だけを使って返事をする。 * RCODE: 0 返事あり、または [[/referral]] (?) というより [[/delegation]] * RCODE: 3 NXDOMAIN これら以外の値のRCODEはエラーを示す。 [[DNS/1/資源レコード/NS/出現場所]]