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. 実装項目

  1. qname minimisation RFC
  2. qname randomization 0x20
  3. 毒盛対策

2. データ構造

RRSet キャッシュ

zone cuts キャッシュ

否定返答キャッシュ

Knot resolverはpacketキャッシュを持っているが、必要か。

3. query生成

どこになにを問い合わせるか。

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