The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


all-knowing-dns - Tiny DNS server for IPv6 Reverse DNS


    all-knowing-dns [--configfile <path>] [--querylog]


AllKnowingDNS provides reverse DNS for IPv6 networks which use SLAAC (autoconf), e.g. for a /64 network.

The problem with IPv6 reverse DNS and traditional nameservers is that the nameserver requires you to provide a zone file. Assuming you want to provide RDNS for a /64 network, you have 2**64 = 18446744073709551616 different usable IP addresses (a little less if you are using SLAAC). Providing a zone file for that, even in a very terse notation, would consume a huge amount of disk space and could not possibly be held in the memory of the computers we have nowadays.

AllKnowingDNS instead generates PTR and AAAA records on the fly. You only configure which network you want to serve and what your entries should look like.



Use path instead of /etc/all-knowing-dns.conf as configuration file.


Enable logging every query to stdout (for debugging).

CONFIGURATION FILE (/etc/all-knowing-dns.conf)

The configuration file is wonderfully simple:

    # Configuration file for AllKnowingDNS v1.7

    listen 2001:4d88:100e:1::3
    # RaumZeitLabor
    network 2001:4d88:100e:ccc0::/64
        resolves to
        with upstream 2001:4d88:100e:1::2
    # Chaostreff
    network 2001:4d88:100e:cd1::/64
        resolves to

This example contains all configuration directives. Let's go over them one by one:

listen address

Listens on the given address (IPv4 and IPv6 is supported) on port 53.

network network

Specifies that queries for PTR records within the given network should be answered (any query for an unconfigured network will be answered with NXDOMAIN). You need to specify at least the resolves to directive afterwards.

resolves to address

Specifies the address to which PTR records should resolve. The address needs to contain %DIGITS% exactly once. When answering AAAA queries, %DIGITS% will be parsed and converted back to an IPv6 address.


    network 2001:4d88:100e:ccc0::/64
        resolves to

Example query:

    The PTR query 2001:4d88:100e:ccc0:216:eaff:fecb:826 will resolve to
with upstream address

Before answering a PTR query for this network, AllKnowingDNS will ask the DNS server at address first, appending .upstream to the query.


    network 2001:4d88:100e:ccc0::/64
        resolves to
        with upstream 2001:4d88:100e:1::2

Example query:

    The PTR query 2001:4d88:100e:ccc0:219:dbff:fe43:2ec5 will make
    AllKnowingDNS ask for
    5.c.e.2.3.4.e.f.f.f.b.d. \ at 2001:4d88:100e:1::2
    and relay the answer, if any.


This section shows you how to delegate a zone in BIND9 or any DNS server with a compatible zone file syntax. To use AllKnowingDNS, you need to delegate the appropriate zone for your network and one regular domain.


    $ORIGIN .
    $TTL 604800     ; 1 week IN SOA \
                                    20         ; serial
                                    604800     ; refresh (1 week)
                                    86400      ; retry (1 day)
                                    2419200    ; expire (4 weeks)
                                    604800     ; minimum (1 week)

    ; net for RaumZeitLabor IN  NS


    $TTL    6h    IN  SOA (
                            1d )
        IN  NS
        IN  NS
        IN  A
        IN  MX  10
        IN  MX  20
        IN  MX  50
        IN  MX  100 IN NS


Version 1.7


Michael Stapelberg, <michael at>


Copyright 2012 Michael Stapelberg.

This program is free software; you can redistribute it and/or modify it under the terms of the BSD license.