Einführung

Setzt man DNSSEC ein, muss man bei jeder Änderung der Zone oder wenn die Signatur abgelaufen ist die Zone neu signieren. Setzt man dynamisches DNS ein (wie in diesem Blogpost beschrieben: Eigener Dynamischen DNS (DDNS) Service betreiben (Eigenes DynDNS), ist es am einfachsten wenn der Nameserver die Zone nach einem Update selber neu signiert.

Das Problem

Es gibt den Host monpi.example.org, welcher seinen DNS-Eintrag regelmässig anpasst. Bei dieser Zone wurde neu DNSSEC aktiviert:

$ dig monpi.example.org @ns1.example.org +dnssec +m +noadditional +noauthority
[...]
monpi.example.org.           60 IN A 80.218.201.250
monpi.example.org.           60 IN RRSIG A 10 3 60 (
                                20141005141713 20140905131713 40795 example.org.
                                J6FNUr6L6K6I3Zyr8gFCky18PZLW7k/71SG0F0KDUYiS
                                ThFmFBsg18mftOaDMzR9Gevk3bSrs+SIhMB414lAv/+y
                                [...]
                                KubMhc3sc4QFzNk83DiAgxEbD6sMKXnpStfZLB+XqEU/
                                nYNjVSPsFIUtzuPEe3lEx9c= )

Jetzt will der Client ein Update in der DNS Zone durchführen:

$ nsupdate -k kmonpi.example.org.private
server ns1.example.org
zone example.org
update delete monpi.example.org
update add monpi.example.org 600 A 10.23.5.42
send
update failed: SERVFAIL
quit

Schindexeinbar gibt es da ein Problem. Anstatt so die gesamte Zone zu invalidieren, verbietet der Nameserver das aktuallisieren des Records. Dies ist auch im Logfile zu sehen:

Sep  5 16:12:54 motd named[9373]: client 80.218.201.149#39141: updating zone 'example.org/IN': delete all rrsets from name 'monpi.example.org'
Sep  5 16:12:54 motd named[9373]: client 80.218.201.149#39141: updating zone 'example.org/IN': adding an RR at 'monpi.example.org' A
Sep  5 16:12:54 motd named[9373]: dns_dnssec_findzonekeys2: error reading private key file example.org/RSASHA512/40795: file not found
Sep  5 16:12:54 motd named[9373]: dns_dnssec_findzonekeys2: error reading private key file example.org/RSASHA512/5774: file not found
Sep  5 16:12:54 motd named[9373]: client 80.218.201.149#39141: updating zone 'example.org/IN': found no active private keys, unable to generate any signatures
Sep  5 16:12:54 motd named[9373]: client 80.218.201.149#39141: updating zone 'example.org/IN': RRSIG/NSEC/NSEC3 update failed: not found

Der Nameserver merkt, dass die Zone DNSSEC signiert ist und möchte einen Private Key finden. Da dieser nirgends gefunden wird, wird das Update verweigert.

Die Lösung

Bind kann man sagen, er solle die DNSSEC signierten Zonen automatisch bei einer Änderung neu signieren. Dafür braucht es die Option a) key-directory und b) auto-dnssec maintain Diese Konfiguration sieht so aus:

zone "example.org" {
  type master;
  file "/etc/bind/db.example.org.signed";
  key-directory "/etc/bind/keys"; // a) → Verzeichnis für den Private Key
  allow-transfer { "slaves"; };
  notify yes;
  update-policy {
    grant monpi.example.org name monpi.example.org A AAAA;
    grant tupail.example.org name tupail.example.org A AAAA;
  };
  auto-dnssec maintain; // b) → Zone automatisch neu Signieren
};

Eventuell muss man noch den Besitzer der Keys anpassen, damit bind die Private Keys lesen kann. Beim manuellen genügte es, wenn root die Private Keys lesen konnte.

# chown bind /etc/bind/keys/K*.private

Jetzt noch den Nameserver neustarten und schon ist man fertig:

# service bind9 restart

Nun können die DDNS Clients wie gewohnt ihre Updates machen.

Sep  5 16:48:06 motd named[9728]: client 80.218.201.149#53160: updating zone 'example.org/IN': delete all rrsets from name 'monpi.example.org'
Sep  5 16:48:06 motd named[9728]: client 80.218.201.149#53160: updating zone 'example.org/IN': adding an RR at 'monpi.example.org' A
Sep  5 16:48:06 motd named[9728]: zone example.org/IN: sending notifies (serial 2014090510)
Sep  5 16:48:06 motd named[9728]: client 78.47.154.39#34700: transfer of 'example.org/IN': IXFR started
Sep  5 16:48:06 motd named[9728]: client 78.47.154.39#34700: transfer of 'example.org/IN': IXFR ended
Sep  5 16:48:06 motd named[9728]: client 2a01:4f8:140:9244::d39c:dcd5#37819: received notify for zone 'example.org'
Sep  5 16:48:06 motd named[9728]: client 78.47.154.39#38758: received notify for zone 'example.org'

Hier der Beweis, dass die Signatur geändert hat:

emanuel@eris:~
$ dig monpi.example.org @ns1.example.org +dnssec +m +noadditional +noauthority
[...]
monpi.example.org.           60 IN A 1.2.3.4
monpi.example.org.           60 IN RRSIG A 10 3 60 (
                                20141005144806 20140905134806 40795 example.org.
                                pFXdpF6F6CdcuOnP2p7aDgLJH2Opl6/UY3KrIueybNiz
                                [...]
                                j+6aBr9cM+nu/6TPuXoZjSooOYzwMhjOoeivIn3j8Y5j
                                hrAFHkFi5fzJ62AOy83/pJQ= )
[...]

Die Signatur wurde aktuallisiert.