1. DNS/返答/処理

DNS/1/queries DNS/RFC/1034/4.3

エラーではないDNS/返答NoErrorだけである。DNS/返答/RCODE

ただし、問題のないqueryに対してもDNS/返答/NXDOMAINなどが返ることはある。

/レコード処理 DNS/毒盛/CNAME

1.1. NoError返答

NoError返答は四つに分類される。DNS/返答/DJB

  1. CNAMEであった。qtypeはCNAMEではない。(Answer Section)
  2. answerあり。(AA flag, Answer Seciton)
  3. no data (AA flag, +SOA)
  4. referral (AA off, + Authoriy Section NS)

1.1.1. 返答処理試案

毒見の観点から考察する。安全だと考えられるものだけを受け入れる。

Answer Sectionあり(空ではない)の場合:

qtype=ANY は扱わないものとする。

キャッシュ内容を優先すべし。キャッシュされている内容と矛盾する返答は受け入れない。

1.1.2. CNAME返答

Answer Sectionにqtype, qnameに一致するCNAMEレコードがひとつだけある場合が該当する。

すでに、キャッシュにあるCNAMEレコードであれば、受けとったレコードは無視してよい。

1.1.3. 非存在情報を活用せよ

ネガティブキャッシング情報(SOA)は特に重要である。

ゾーンが存在しないはずの名前にNSレコード返答が返れば、偽だと分かる。

なんらかのレコードが存在しないといういう返事があったのなら、CNAME返答は偽である。

-- ToshinoriMaeno 2016-07-15 12:36:54

1.2. NXDomain (RCODE) 返答

Authority SectionにはSOAレコードがひとつある。NSはあっても無視する。

このSOAレコードは毒見に有効である。(NoData も同様)

現存するリゾルバーでそのようなものは見当たらない。

1.2.1. NoError aa off

NoError返答のうちのひとつはDNS/1/delegationであり、aa offのはずだ。 

1.2.2. NoError aa on

Answer Sectionの有無で分ける。

Answer Sectionがある場合: 二種類ある。

  1. query name は CNAME であった。(qtypeはCNAMEではない。)
    • 照会名を変えて、続行する必要がある。
  2. query name, query type に適合する返答があった。
    • 適合する返答(RRSet)を受け取る。
    Authoriy Section(NSレコードなどがある)は無視すべきである。(移転毒の可能性)
    • 毒の可能性がある。 キャッシュされているはずだから、受け取る必要はない。

Answer Section がない場合:DNS/返答/NODATA と呼ばれる。--> Nagative Caching

1.3. Knot resolver

1.3.1. resolve

answer section を処理する前にauthorityを調べている意味が分からない。

DJBも言っているように、返答の種類を判別するのは面倒だ。

1.3.2. process_authority

process_authorityをちょっと書きなおしてみた。

NXDomain: AA offのときだけ、DNS/1/delegationを処理するのが正しい。

NoErrorではAA on を確認して、authority (SOA) を処理する。

1.3.3. delegation

検査不十分な気がする。 ownerが一致していることを見ていなかったので、追加してみた。

不整合を発見したら、その場で打ち切り。

-- ToshinoriMaeno 2016-04-29 02:57:11

どこでどういう検査をするかというのは、全体の構造が見えていないと、決めるのはむずかしい。

NXDOMAINに付随するSOAの処理がおかしい。

-- ToshinoriMaeno 2016-04-29 05:05:44

1.4. co.jp

おかしな動き。

[plan] plan 'co.jp.' type 'A'
kr_zonecut_find_cached cojp
kr_zonecut_find_cached jp
[resl]   ns_fetch_cut ret 0
[resl]   NT check; cojp cut jp
[resl]   peekpkt cojp ret -116
[resl]   zone_cut_check -> ns_fetch_cut = 0
[resl]   => querying: '203.119.40.1' score: 11 zone cut: 'jp.' m12n: 'Co.JP.' type: 'A'
[iter]   AA terminate resolution chain
[iter]   <= rcode: NOERROR
[iter]   <= finalize NXD/NODATA
[ rc ]   stash auth answer 
[ pc ]   => pktcache_stash entry
[ pc ]   => pktcache_stash NXDOMAIN
[ pc ]   => pktcache_stash answer
[ pc ]   => answer cached for TTL=900
[resl]   <= server: '203.119.40.1' rtt: 6 ms
[resl] finished: 4, queries: 1, mempool: 32800 B

[plan] plan 'co.jp.' type 'A'
[ pc ]   => satisfied from cache
[iter]   AA terminate resolution chain
[iter]   <= rcode: NOERROR
[iter]   <= finalize NXD/NODATA
[ pc ]   => pktcache_stash entry
[resl] finished: 4, queries: 1, mempool: 32800 B

MoinQ: DNS/返答/処理 (last edited 2021-06-01 00:24:24 by ToshinoriMaeno)