Bind kan omgaan met zogenaamde dynamische updates. Hierbij wordt er contact gemaakt met de server en kunnen dynamisch resource records worden toegevoegd, veranderd en verwijderd. Het is niet nodig om direct te schrijven in de zonefile en de server te reloaden.
Dynamische updates zijn erg handig in combinatie met DHCP: de namen en adressen van de uitgegeven leases worden automatisch opgenomen in de DNS-server.
Het gebruik van dynamische updates in een zone heeft wel een nadeel: zodra een zone dynamisch is geworden, zijn handmatige aanpassingen in principe niet meer mogelijk. Omdat het gebruik van de tool nsupdate soms wat lastig is, beschrijf ik een manier om handmatig updates te doen in een dynamische zone. Die is echter "niet netjes".
Gezien het op zijn minst onverstandig is om DHCP te gebruiken op een
netwerksegment waar ook web-, name- en mailservers staan, ga ik hier
er vanuit dat DHCP draait op het netwerksegment van
office.example.com.
Om een dynamische update veilig uit te kunnen voeren maken we gebruik
van een zogenaamde transaction signature oftewel TSIG.
Dat is een pseudo-RR waarmee transacties te ondertekenen zijn op basis
van een gedeeld wachtwoord (shared secret).
TSIG is onderdeel van de zeer complexe DNS Security Extensions (dnssec). Op dnssec zal ik verder niet ingaan hier.
Voor het gebruik van dnssec heb je een key nodig. Die is te genereren op de volgende manier:
dexter:~ # dnssec-keygen -a HMAC-MD5 -b 128 -n ENTITY dhcp-key Kdhcp-key.+157+38469
Kdhcp-key.+157+38469.key en
Kdhcp-key.+157+38469.private. De getallen zullen elke keer anders
zijn overigens.
In beide bestanden staat in essentie dezelfde informatie. Het enige
wat voor ons van belang is, is de key zelf, die op de regel beginnend
met "Key" staat in Kdhcp-key.+157+38469.private:
Private-key-format: v1.2 Algorithm: 157 (HMAC_MD5) Key: qvRUwdlVvJ9vLGgNqtl46Q==
Gebruik overigens niet de key uit het voorbeeld, maar genereer een eigen key. Je bent gewaarschuwd.
Deze key moeten we bekend maken aan bind en dhcpd.
De net gegenereerde key kunnen we nu gaan opnemen in named.conf,
op de volgende manier:
key "dhcp-key" {
algorithm HMAC-MD5;
secret "qvRUwdlVvJ9vLGgNqtl46Q==";
};
options blok. Mocht named.conf
leesbaar zijn voor iedereen op het systeem, dan kun je bovenstaande
fragment in een apart bestand plaatsen en met include
"<naam>"; inlezen.
Hierna moet nog worden aangegeven welke zones dynamische updates mogen ontvangen die ondertekend zijn met deze key. DHCPd kan updates doen in de normale en in de reverse zone, dus die gaan we beide toestaan:
zone "office.example.com" {
type master;
file "db.office.example.com";
allow-update {
key "dhcp-key";
};
};
zone "1.0.10.in-addr.arpa" {
type master;
file "db.10.0.1";
allow-update {
key "dhcp-key";
};
};
Na de reload zal bind klaar staan om dynamische updates te ontvangen.
Aangezien dit een handleiding is voor bind en niet voor DHCPd, ga ik er vanuit dat je al een goed draaiende DHCPd hebt. Voor dynamische updates is wel ISC DHCPd v3.x nodig.
Ik zal volstaan met het geven van de regels die moeten worden toegevoegd of aangepast in dhcpd.conf:
option domain-name "example.com"; # kan ook in subnet blok worden gegeven
key "dhcp-key" {
algorithm HMAC-MD5;
secret "qvRUwdlVvJ9vLGgNqtl46Q==";
};
zone example.com. {
primary 10.0.1.1;
key "dhcp-key";
};
zone 1.0.10.in-addr.arpa. {
primary 10.0.1.1;
key "dhcp-key";
};
Ook hier kun je de key weer via een include-statement inladen.
De tool nsupdate kan worden gebruikt om handmatig dynamische updates uit te voeren in een server. In dit geval roep je hem aan met:
nsupdate -k Kdhcp-key.+157+38469.private
nsupdate. In de appendix staan een paar voorbeelden.
Mocht het gebruik van nsupdate wat te lastig zijn, dan zijn
handmatige aanpassingen in de zonefile nog wel mogelijk.
Om een zonefile weer (tijdelijk) statisch te maken, kun je het volgende doen:
rndc freeze <zone>rndc thaw <zone>