[Twisted-Python] DNS custom response (NXDOMAIN)

Hello: I am trying to implement a custom DNS resolver, using the DNS Howto custom resolver as a boiler plate. I have a database-driven cache that I am reading from, but am unsure how to implement a cache ‘miss’ (i.e. NXDOMAIN). The ‘hit’ is fine, apropos to: answer = dns.RRHeader( name=name, payload=dns.Record_A(address=b’127.0.0.1’)) # for example sake But I tried with dns.Record_NULL to generate an NXDOMAIN-like response without success. How can I implement this? Rob

On Wed, Aug 5, 2020, at 3:59 PM, Rob Gormley wrote:
But I tried with dns.Record_NULL to generate an NXDOMAIN-like response without success. How can I implement this?
You need to fail with AuthoritativeDomainError. The pieces go together something like this: from twisted.names import dns, client, common class MyResolver(ResolverBase): def _lookup(self, name, cls, record_type, timeout): # This says "my resolver can't handle that name, try somewhere else". # DNSServerFactory will try the caches or recurse to clients. return defer.fail(dns.DomainError(name)) # This says "that name definitely doesn't exist". # The client will get NXDOMAIN return defer.fail(dns.AuthoritativeDomainError(name)) factory = DNSServerFactory( authorities=[MyResolver()], caches=[...], clients=[client.Resolver()], # used to recurse ) ---Tom

On Wed, Aug 5, 2020, at 3:59 PM, Rob Gormley wrote:
But I tried with dns.Record_NULL to generate an NXDOMAIN-like response without success. How can I implement this?
You need to fail with AuthoritativeDomainError. The pieces go together something like this: from twisted.names import dns, client, common class MyResolver(ResolverBase): def _lookup(self, name, cls, record_type, timeout): # This says "my resolver can't handle that name, try somewhere else". # DNSServerFactory will try the caches or recurse to clients. return defer.fail(dns.DomainError(name)) # This says "that name definitely doesn't exist". # The client will get NXDOMAIN return defer.fail(dns.AuthoritativeDomainError(name)) factory = DNSServerFactory( authorities=[MyResolver()], caches=[...], clients=[client.Resolver()], # used to recurse ) ---Tom
participants (2)
-
Rob Gormley
-
Tom Most