== kresd/negative-caching == co.jp などにNSレコードが存在しないという情報は  qname minimisationを採用しているKnot resolverではpktcacheにあるらしい。 minimisation時にresolver.cからは  zone_cut_check経由で利用されている。   ns_fetch_cutはなにを見ているのだろうか。 kr_zonecut_find_cachedだけではもったいない。 resolve.c の中、ここらしい。 {{{ static void check_empty_nonterms(struct kr_query *qry, knot_pkt_t *pkt, struct kr_cache_txn *txn, uint32_t timestamp) int ret = kr_cache_peek(txn, KR_CACHE_PKT, target, KNOT_RRTYPE_NS, &entry, ×tamp); if (ret == 0) { /* Either NXDOMAIN or NODATA, start here. */ }}} 確認する必要のない中間ノードを飛ばすのに使っている。 委譲返答を受け取ったときにも、これをそのまま使って、  ノードがNSを持たないことを確認できるならば、毒だと分かる。 (0) cacheになかったら, -2が返ってくるらしい。(未確認ノードとなる) -- ToshinoriMaeno <> == NXDomain/NoError返答 == finalize_answerで Authority section(SOA)を保存しているが、  どこで使われているのだろう。  (qname, cut, SOA owner) の組から、zone cut 不在情報を抽出したい。 毒盛攻撃に対してはqnameそのものを保存するのは効率が悪そう。(判別は難しい) -- ToshinoriMaeno <> == zone cut 不在キャッシュ == 不在を示すSOAレコード: 異なるownerに対して、少数のqnameを保持しておくのでよい。  delegation返答の毒見検査用。間違い名については、最後のqueryだけでも十分だろう。 == anti-poisoning == 委譲NS返答をもらったらzonecut_updateをする。そのときの検査にも使ってくれるといいが、  それにはどこを見るべきなのか。  zonecut init に注目 (negative caching されていないことを確認せよ)  -- ToshinoriMaeno <> $ dig -t ns ad.jp @127.0.0.3 {{{ ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> -t ns ad.jp @127.0.0.3 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5470 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ad.jp. IN NS ;; AUTHORITY SECTION: jp. 754 IN SOA z.dns.jp. root.dns.jp. 1460940301 3600 900 1814400 900 ;; Query time: 0 msec ;; SERVER: 127.0.0.3#53(127.0.0.3) ;; WHEN: Mon Apr 18 09:59:26 JST 2016 ;; MSG SIZE rcvd: 81 }}} この返事が毒見にも利用できる。 {{{ [plan] plan 'ad.jp.' type 'SOA' [resl] zone_cut_check: cut found [resl] => querying: '203.119.40.1' score: 11 zone cut: 'jp.' m12n: 'AD.Jp.' type: 'SOA' [iter] <= rcode: NOERROR [ pc ] => answer cached for TTL=900 [resl] <= server: '203.119.40.1' rtt: 8 ms [resl] finished: 4, queries: 1, mempool: 32800 B [plan] plan 'ad.jp.' type 'NS' [ pc ] => satisfied from cache [iter] <= rcode: NOERROR [resl] finished: 4, queries: 1, mempool: 32800 B }}}