Fritz-DNS – An authoritative DNS server for AVM FRITZ!Box routers

AVM FRITZ!Box Cable 6591

In my home network, I am using an AVM FRITZ!Box Cable 6690. It handles DHCP, DNS, Wifi and recently also interfaces my home network via WireGuard to my servers.

Just like the venerable Dnsmasq AVM’s FRITZ!OS uses hostnames learned from its DHCP leases and makes them resolvable via its internal DNS server.

Unfortunately, this feature in FRITZ!OS has some limitations:

  1. The name of the DNS Zone is hard coded to and can not be adjusted. Hence, the resolvable names have the following schema:
  2. The internal DNS server only supports recursive DNS looks. It does not act as an authoritative DNS server. Hence the local zone can not be delegated.
  3. AXFR zone transfers are not supported.

My solution to these shortcomings is Fritz-DNS which:

  • is a small tool written in the Go programming language.
  • is a small authoritative DNS server which serves A/AAAA resource records for local hosts connected to an AVM Fritz Box home WiFi router.
  • can be used in a hidden master configuration as it supports AXFR zone transfers.
  • uses the custom extension (X_AVM-DE_GetHostListPath) of the TR-064 Hosts SOAP-API as documented here to retrieve a list of local hosts.
  • supports the generation of AAAA (IPv6) resource records based on the hosts MAC addresses using 64-Bit Extended Unique Identifier (EUI-64) and a configured unique local address (ULA) prefix.
  • does not yet support PTR resource records (to be implemented…)
  • is licensed under the Apache 2.0 license

You can find Fritz-DNS at GitHub:

Here is a small figure illustrating the interaction of Fritz-DNS with the Fritz!Box and other DNS servers / clients:

CLI Usage

Usage of fritz-dns
  -ipv6-ula-prefix string
    	Fritz Box IPv6 ULA Prefix (default "fd00::/64")
  -pass string
    	FritzBox password
  -port int
    	Listen port (default 53)
  -soa-expire duration
    	SOA expire value (default 744h0m0s)
  -soa-mbox string
    	SOA mailbox value
  -soa-minttl duration
    	SOA minimum TTL value (default 1h0m0s)
  -soa-ns string
    	Authorative DNS server for the zone
  -soa-refresh duration
    	SOA refresh value (default 2h0m0s)
  -soa-retry duration
    	SOA retry value (default 1h0m0s)
  -ttl duration
    	default TTL values for records (default 5m0s)
  -url string
    	FritzBox URL (default "")
  -user string
    	FritzBox username (default "admin")
  -zone string
    	DNS Zone (default "")

Neue IP für die Fritz Box

Vor ein paar Wochen veröffentlichte ich erst den letzten Eintrag zu diesem Thema. Damals aber noch zu unserem ZyXel Router, der mittlerweile den Geist aufgegeben hat.

Also musste schleunigst ein neuer Router her. Wir entschieden uns für die neue FRITZ!Box Fon WLAN 7270. Dieser Router übernahm auch gleich die Funktion unserer alten DECT Telefonanlage.

Aber nun zu dem Skript. Die Fritz Box lässt sich leichter zu einer neuen IP Adresse bewegen. Hier genügt eine einfache UPNP Anfrage:

curl '' \
 -H 'Content-Type: text/xml; charset="utf-8"' \
 -H 'SoapAction: urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination' \
 -d '<?xml version="1.0" encoding="utf-8"?> <s:Envelope s:encodingStyle="" xmlns:s=""> <s:Body> <u:ForceTermination xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1" /> </s:Body> </s:Envelope>'

Dieses Script funktioniert mit der Fritz Box 7270 und wahrscheinlich auch anderen Fritz Boxen.