SelfLinux Internet Domain Name System Abschnitt 20 | SelfLinux-0.13.0

| Domain Name System | Autor Formatierung GFDL

#### 26 Ein Produktivsystem

Bis jetzt war alles Spaß. Für einen Produktionsserver sind noch einige Dinge zu beachten. Im folgenden ein paar Tips, die das Leben hoffentlich vereinfachen.

Im Allgemeinen muß man natürlich vor allem sorgfältig arbeiten. Die meisten Leute sind es sowieso gewohnt, dass DNS-Einträge bis zu drei Tage dauern. Man sollte sich also Zeit lassen, nicht "eben mal auf die Schnelle ein paar RRs einfügen". Man sollte immer Backups von den Datenbanken haben. Dabei bietet sich ein Revision Control System an, z.B. rcs oder cvs. Verwaltet man mehrere Zonen, so kann man darüber nachdenken, ein Script zu erstellen, das dnswalk für alle Zonen automatisch machen kann. Evtl. kann man den Primary direkt nach ausgesuchteten, sehr wichtigen Adressen per cron fragen, um im Fehlerfalle schnell eine EMail zu bekommen.

Es ist auch zu beachten, dass sich unter Umständen Fehler erst nach einigen Tagen zeigen, da die Cachezeiten u.U. relativ groß sind.

Es ist sinnvoll, die Option "check-names fail;" beim Primary zu setzen, um Fehler schnellstmöglich festzustellen, bevor ebtl. falsche Daten von Secondaries geholt werden. Im Extremfalle verwenden diese diese Option, und werfen die fehlerhafte Zone nach dem Transfer sofort weg!

Um sicher zugehen, nach jeder Änderung die Serial richtig zu setzen, kann ein kleines Script verwendet werden. Dies erscheint sinnvoll, da die Serial eine wichtige Rolle spielt. Da man in der Regel das Datum im Format JJJJMMTT plus eine zweistellige laufende Nummer verwendet (falls man mehrmals am Tag etwas ändert), wird diese zwangsläufig immer größer. Ein großes Problem aber ist z.B., wenn man sich vertippt, und eine Ziffer zuviel verwendet. Dann hat man eine Serial, die so groß ist, dass sie nie "richtig" erreicht wird. Eine Serial zurückzusetzen, ist so einfach jedoch nicht möglich.

Ein derartiges Script könnte z.B. nach der Zeichenkette "; Serial" suchen, die nach einem entsprechenden Datumscode steht (dieser Kommentar wurde auch hier in den Beispielen verwendet). Verwendet man dazu perl, könnte man zu folgender Lösung kommen:

new_serial.pl

    #!/usr/bin/perl -pi.ser
    #Y2K stable - Perl RULES :) <steffen@dett.de>

    #Starten mit einem Bind Zone File als Paramter. Es wird ein
    #Backup erzeugt (Endung .ser), und alle Zeilen der Form
    #"JJJJMMTTNN ; Serial", z.B. "2000012501 ; Serial" angepaßt
    #aufs aktuelle Datum bzw. die laufende Nummer erhöht.

    #start with bind zone files, it will replace serial of the form
    #"YYYYMMDD00 ; Serial"  i.e. "2000012501 ; Serial"
    #to new date or incrementing last two digits

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
    localtime(time);
    my $date = sprintf("%4d%02d%02d", 1900+$year, $mon+1, $mday);

    if (m/((20|19)\d{6})(\d{2})(\s+\;\s+[Ss]erial\s+)$/) {
        my $old_date = $1;
        my $old_serial = $3;
        my $rest = $4;
        my $serial = $old_serial;
        if ($old_date eq $date) {
            $serial++;
        } else {
            $serial = 0;
        }
        $serial = sprintf("%02d", $serial);
        s/${old_date}${old_serial}${rest}/${date}${serial}${rest}/;
        print STDERR "Serial found! Old: [$old_date $old_serial]  --> ",
            "Changed to [$date $serial]\n";
    }

Es mag Sinn machen, das so aktualisierte File von diesem Script auch gleich ins RCS/CVS einzuchecken bzw. zu "committen" (ci -l <file> / cvs commit <file> - letzteres geht in der Regel allerdings nicht als "root").