DNS/実装/python/dnslib/リゾルバーについて、ここに記述してください。
ゾーンサーバーの骨格ができてきたので、 そろそろリゾルバーを作り始める。-- ToshinoriMaeno 2016-08-14 23:27:21
https://github.com/paulchakravarti/dnslib/blob/master/dnslib/server.py
>>> resolver = BaseResolver() >>> logger = DNSLogger(prefix=False) >>> server = DNSServer(resolver,port=8053,address="localhost",logger=logger) >>> server.start_thread() >>> q = DNSRecord.question("abc.def") >>> a = q.send("localhost",8053)
class BaseResolver(object): """ Base resolver implementation. Provides 'resolve' method which is called by DNSHandler with the decode request (DNSRecord instance) and returns a DNSRecord instance as reply. In most cases you should be able to create a custom resolver by just replacing the resolve method with appropriate resolver code for application (see fixedresolver/zoneresolver/shellresolver for examples) Note that a single instance is used by all DNSHandler instances so need to consider blocking & thread safety. """
1. 実装項目
- qname minimisation RFC
- qname randomization 0x20
- 毒盛対策
2. データ構造
RRSet キャッシュ
zone cuts キャッシュ
否定返答キャッシュ
- レコード不在のキャッシュ
- ゾーン不在のキャッシュ
Knot resolverはpacketキャッシュを持っているが、必要か。
3. query生成
どこになにを問い合わせるか。
- zone cuts 確認方法
- 上位ドメインから末端へ; TTLを確認しながら。
- unbound風にdelegation返答は権威あるNSを確認する。
- しかし、これだけでは偽delegationを排除できない。
- 事前に受け取ったSOA返答から、
- zonecut非存在が分かる名前へのdelegationは毒であると判断する。
- delegation返答を再確認する。random nameを付けて、NSを問い合わせてみる。
4. response 処理
毒盛対策を中心に考える。特にゾーンサーバからの不正なデータを除去する。
4.1. CNAME
4.2. NoData
4.3. negative response
SOA cuts information (Maeno)
4.4. delegation
-- ToshinoriMaeno 2016-08-15 02:37:55