PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seriennummer beim DNS zurücksetzen



Doh!
14.09.03, 23:54
Wie man die Seriennummer eines DNS zurücksetzt
-------------------------------------------------------
(Vorraussetzungen: Allgemeine Kenntnisse des DNS)

Erstellt am 15.9.2003
(Anmerkung: Dieses Tutorial ist an ein Kapitel aus dem DNS & bind Kochbuch angelehnt [genauer gesagt dem Kapitel 2.14], welches aber teilweise fehlerhaft beschrieben ist. Aus diesem Grund will ich es hier nochmal richtig erläutern.)

WARUM DER AUFSTAND? GEHT DAS NICHT EINFACH PER HAND?
Nicht immer! Folgendes Szenario ist Standard in vielen Firmen (zumindest im Mittelstand): Die Firma hostet einen eigenen DNS-Server für die eigene Domain (und/oder andere Domains), während der Provider die Slaves hostet. Nun kommt es aus unerfindlichen ;) Gründen ab und zu vor, dass die Seriennummer des SOA-Eintrags größer ist als der Wert, den man eigentlich haben will (üblicherweise nimmt man für die Seriennummer folgendes Format: YYYYMMDDxx, also zum Beispiel 2003091501)

Kein Problem, wenn man auch die Slaves bei sich im Hause stehen hat. Einfach in die Slave-Datenbanken anpassen, und gut ist. Nicht aber wenn die Slaves wo anders stehen. Man muss erst den Admin des Providers anrufen, der muss unter Umständen den Server neu starten, was er oft gar nicht machen kann, weil meist mehrere andere Domains auf diesen Servern ebenfalls verwaltet werden. Wenn der eigene Server auch noch Hidden Primary ist, dann ist die eigene Domain eventuell für einige Stunden nicht erreichbar.

Nimmt man eine Änderung vor, so sollte die Seriennummer entsprechend dem aktuellen Datum angepasst werden. Die Slave Server machen nur ein Update ihrer Slave-Datenbanken, wenn die Seriennummer der Master-Datenbank größer ist als die eigene.

EIN BEISPIEL
Wir haben also einen Hidden-Primary in der Firma, der ISP hostet die Slaves. Hat man nun aus Unachtsamkeit aus Versehen eine SOA-Seriennummer von beispielsweise 3567243123 eingegeben und wurde dieser Wert von den Slaves übernommen, so kann man zwar den Wert auf dem eigenen Server zurücksetzen, aber der Wert auf den Slaveservern bleibt. Und da diese beim Provider stehen, haben wir da keinen direkten Zugriff.

Nun, man kann dort den Admin anrufen, was wieder Zeit, Geld und Nerven kostet.

DNS-SERIENNUMMERN FOLGEN DER RAUMFOLGEARITHMETIK
Raumfolge...was...? Dazu erst mal ein wenig Theorie: Die Seriennummern eines DNS-Servers folgen nicht der normalen Arithmetik, wie wir sie im normalen Leben einsetzen. Nach der gebräuchlichen Arithmetik gilt zum Beispiel: 1 < 2 < 1.263.245.199 (ab hier schreibe ich die großen Zahlen der Übersichtlichkeit halber mit ".", in den Zonenfiles dürfen bei der SOA-Seriennummer keine Punkte stehen!!!). DNS-Seriennummern folgen aber der sogenannten Raumfolgearithmetik. Hier kann die Zahl 1.263.245.199 größer sein als beispielsweise die 3.234.723.123. Kann, wohlgemerkt!!!

Aber wie ist das zu erklären? Dazu wieder ein Beispiel. In der Raumfolgearithmetik hat man eine endliche Menge ganzer Zahlen, also zum Beispiel die Zahlen 0 bis 31. Allerdings hat jede Zahl (also auch die 31) einen Nachfolger. Der Nachfolger der 0 ist die 1, der Nachfolger der 1 die 2 und der Nachfolger der 31 ist wiederum die 0.

Wir picken uns aus diesem Zahleraum nun eine beliebige Zahl heraus, beispielsweise die 11. Für diese Zahl gilt nun, dass die Hälfte (genauer gesagt 2^4 -1, also 15) aller Zahlen aus dem Zahlenraum 0 bis 31 kleiner ist, die andere Hälfte dagegen größer. Zu deutsch: die Zahlen 12 bis 26 sind größer als die 11, die Zahlen 27 bis 31 und 0 bis 10 sind kleiner als die 11. Anders geschrieben: [ 27 - 31 ] < [ 0 - 10 ] < 11 < [ 12 - 26]. Von der 11 aus gesehen ist die 27 die kleinste Zahl, die 26 die größte!

Ein weiteres Beispiel: wir nehmen die Zahl 29 aus dem Raum 0 bis 31. Die Zahlen 30 und 31 sowie die zahlen 0 bis 12 sind größer als die 29, die Zahlen 13 bis 28 sind kleiner als die 29. Oder: [ 13 - 28 ] < 29 < [ 30 , 31 ] < [ 0 - 12 ]. Die 13 ist von der 29 aus gesehen die kleinste Zahl, die 12 die größte!

THEORIE AUF DIE PRAXIS UEBERTRAGEN
Das ganze können wir jetzt auf die Seriennummern des DNS übertragen. Allerdings müssen wir hier mit einem viel größeren Zahlenraum spielen: Eine DNS-Seriennummer ist 32 Bit lang, das heißt sie kann zwischen 0 und 4.294.967.295 (2 ^ 32 - 1) liegen. Die Hälfte davon ist 2 ^ 31 - 1 also 2.147.483.647.

Ich nehme als konkretes Beispiel genau das, was mir letztens selbst passiert ist. Wir haben einen DNS Master dessen SOA auf dem Wert 2.003.090.201 ( wie gesagt, nicht
durch die Punkte verwirren lassen, sie dienen nur der Übersicht und müssen nacher beim SOA Eintrag weggelassen werden!) stand. Der Wert bei unserem Slave auf dem Provider stand aus mir nicht erfindlichen Gründen auf 2.798.235.124. Warum auch immer, spielt keine Rolle, egal. Der Slave übernimmt die Seriennummer des Master-SOA nur, wenn er eine kleinere Seriennummer in seinem Zonenfile hat als der Master.

Was muss also getan werden? Zunächst muss auf dem Master eine Seriennummer eingetragen werden, die größer (Vorsicht! Natürlich "größer" nach der Definition der Raumfolgearithmetik!) als die Seriennummer des Slave-Servers ist. Wie oben gelernt sind alle 2 ^ 31 - 1 Nachfolger (nämlich die Hälfte aller möglichen Zahlen des Zahlenraums von 32 Bit) größer als 2.798.235.124. Daher setze ich meine Seriennummer ganz einfach auf einen Wert zwischen 2.798.235.124 bis 4.294.967.295 oder 0 bis 650.751.476, denn diese Zahlen sind nach der Raumfolgearithmetik größer (am sinnigsten ist in diesem Fall die 650.751.476). Wir tragen also die Seriennummer 650751476 in den SOA-Eintrag ein.

Man warte, bis sich alle Nameserver damit abgeglichen haben, das hängt von den Cachewerten ab. Wenn notify eingestellt ist, geht's recht flott.

Sind alle Slaves upgedatet, geht's weiter. Nun steht die Seriennummer auf allen Nameservern auf 650.751.476. Wiederum gilt, dass alle 2 ^ 31 - 1 Nachfolger größer sind, und alle anderen kleiner sind. Im Klartext: Alle Zahlen von 650.751.477 bis 2.798.235.124 sind nun größer als 650.751.476, alle Zahlen von 2.798.235.125 bis 4.2
94.967.295 und 0 bis 650.751.475 sind kleiner. Nun kann ich bequem hergehen, und die Seriennummer meines Masters auf 2.003.090.201 (in der Zonendatei muss natürlich 2003090201 - ohne Punkte - stehen) setzen, die anderen Server werden entsprechend nach und nach folgen.

So habe ich recht einfach alle meine Server wieder auf den richtigen Stand gebracht, ohne dass ich in Zonendateien auf den Slaves rumpfuschen muss und die Server restarten muss. Übrigens gilt dieses Turotial für alle Nameserver nicht nur für bind.

----
Suchwörter: soa dns domain name service seriennummer soa zurücksetzen master slave raumfolge arithmetik