1. kresd/negative-caching

co.jp などにNSレコードが存在しないという情報は

minimisation時にresolver.cからは

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, &timestamp);

if (ret == 0) { /* Either NXDOMAIN or NODATA, start here. */

確認する必要のない中間ノードを飛ばすのに使っている。

委譲返答を受け取ったときにも、これをそのまま使って、

cacheになかったら, -2が返ってくるらしい。(未確認ノードとなる) -- ToshinoriMaeno 2016-04-19 10:17:02

2. NXDomain/NoError返答

finalize_answerで Authority section(SOA)を保存しているが、

毒盛攻撃に対してはqnameそのものを保存するのは効率が悪そう。(判別は難しい)

-- ToshinoriMaeno 2016-05-11 08:10:38

3. zone cut 不在キャッシュ

不在を示すSOAレコード: 異なるownerに対して、少数のqnameを保持しておくのでよい。

4. anti-poisoning

委譲NS返答をもらったらzonecut_updateをする。そのときの検査にも使ってくれるといいが、

-- ToshinoriMaeno 2016-04-18 00:37:22

$ 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