DNS Zone File

Christian Dresel fff at chrisi01.de
Sa Okt 17 10:05:27 CEST 2015


Hi

so ich hab jetzt einfach mal Zeit & Lust gehabt und hab mir Tims 
Anleitung geschnappt auf mich angepasst und das ganze mal "probiert".

Als DnsPeers hab ich aktuell nur 10.50.252.14 drinnen, da ich zu den 
anderen Servern keinen direkten Link habe (theoretisch müsste es aber 
dennoch klappen oder? Geht dann halt über 2 Server oder so versteh ich 
das richtig?). Soweit ich das jetzt überblicken kann, hat das ganze 
problemlos funktioniert:

******* /etc/bind # /etc/bind/sync.sh /(erster Aufruf des Scripts!)/
zone fff.community/IN: loaded serial 2015101501
OK
******* /etc/bind # ls
backup  bind.keys  db.0  db.127  db.255  db.empty db.fff.community  
db.local  db.root  named.conf named.conf.default-zones  
named.conf.local  named.conf.options rndc.key  sync.sh  zones.rfc1918
******* /etc/bind # cat db.fff.community

fff.community.          3600    IN      SOA fff-gw-m1.fff.community. 
franken.freifunk.net. 2015101501 3600 1800 604800 600
fff.community.          3600    IN      NS      ro1.fff.community.
fff.community.          3600    IN      NS fff-wue1.fff.community.
fff.community.          3600    IN      NS fff-gw-m1.fff.community.
FFF-GW-M1.fff.community. 3600   IN      A       ##########
FFF-GW-M1.fff.community. 3600   IN      AAAA    ##########
fff-wue1.fff.community. 3600    IN      A       ##########
ro1.fff.community.      3600    IN      A       ##########
fff.community.          3600    IN      SOA fff-gw-m1.fff.community. 
franken.freifunk.net. 2015101501 3600 1800 604800 600

******* /etc/bind #

(ich hab manuell ein paar IP Adressen durch Rauten zensiert, dort stehen 
eigentlich öffentliche IPs die aber nicht unbedingt durch die 
Mailingliste müssen)

die db.fff.community hab ich nur leer angelegt, sie wurde nach den 
ersten ausführen von /etc/bind/sync.sh selbstständig befüllt also genau 
das, was eigentlich passieren soll, richtig? Den Cron hab ich jetzt zur 
Sicherheit mal noch aus gelassen, will erst bestätigt haben das bisher 
alles soweit stimmt. Wenn ihr dann wollt, kann ich den Cron aktivieren.

Normales DNS (getestet auch mit Seiten die ich nie besuche, weil wegen 
Cache oder sowas) über meinen Server (Ich hab meinen Laptop im fff-Fürth 
Netz manuell die IP 10.50.32.151 verpasst, als Gateway 10.50.32.4 und 
als einzigen DNS 10.50.32.4) läuft weiterhin problemlos (wenn man schon 
nicht soviel Ahnung von dem Zeug hat, probiert man das zur Sicherheit 
mal ;)) Zur Sicherheit hab ich im DHCP jetzt aber mal noch als 2. 
Nameserver 8.8.8.8 mit rausgegeben: option domain-name-servers 
10.50.32.4, 8.8.8.8; denke das schadet erstmal nicht oder?

mfg

Christian

Am 15.10.2015 um 21:42 schrieb Tim Niemeyer:
> Hi
>
> Also ich hab auf ro1 nun folgendes getan:
>
> Den ro1 selbst nicht mehr als dns via dhcp verteilt. Hier habe ich jetzt
> temporär 8.8.8.8 drin.
>
> cd /etc/bind/
> Dein Script (siehe unten) in /etc/bind/sync.sh gepackt.
> chmod +x sync.sh
> touch db.fff.community
> chmod g+w db.fff.community
> chown root:bind db.fff.community
> mkdir backup
> chmod g+w backup
> chown root:bind backup
>
> in named.conf.local:
> --- %< ---
> zone "fff.community" {
>          type master;
>          file "/etc/bind/db.fff.community";
>          allow-transfer {10.50.252.15; 10.50.252.39; 10.50.252.27;};
> };
> --- >% ---
>
> Die config von sync.sh angepasst:
> --- %< ---
> DnsPeers=(10.50.252.15 10.50.252.38 10.50.252.27)
> DomainZone="fff.community"
> OwnZoneFile="/etc/bind/db.fff.community"
> TempDir="/tmp/fff-dns"
> BackupDir="/etc/bind/backup"
> --- >% ---
>
> Cron angelegt (/etc/crontab):
> */5 *   * * *   bind    /etc/bind/sync.sh
>
> Geb mal kurz Rückmeldung ob das so in etwa das ist, was dir vorschwebte.
>
> Tim
>
> Am Donnerstag, den 15.10.2015, 20:49 +0200 schrieb mayosemmel:
>> Hallo zusammen,
>>
>> ich hab das jetzt endlich bei mir aufgesetzt, nachdem mein Server nun
>> wieder läuft.
>> Als Sync Partner/Adressen habe ich die folgenden 3 eingetragen:
>> 10.50.252.15 10.50.252.39 10.50.252.27
>> Das sind die Server von Chris, Tim und Michael.
>>
>> Sobald ihr die Root Zone auch drin habt kann Christian das entsprechend
>> eintragen hat lassen. Anschließend kann es mit den Delegations und dem
>> DynDns weiter gehen.
>>
>> @Liste: Im Zone file habe ich ein paar Zeilen gelöscht, wegen den
>> öffentlichen IPs - somit ist es durchaus möglich das hier was fehlt
>>
>> Viele Grüße
>> Jan
>>
>> Am Dienstag, den 06.10.2015, 22:53 +0200 schrieb Tim Niemeyer:
>>> Klingt alles gut. Ist nur grad zu spät um mich da rein zu denken.
>>> Wegen mit können wir das aber einfach mal machen. Durch probieren
>>> kommt man meist schneller zum Ziel, als wen man nur rum rätselt. :-)
>>>
>>> Ich versuche das morgen mal umzusetzen.
>>>
>>> Tim
>>>
>>> Am 6. Oktober 2015 22:46:09 MESZ, schrieb mayosemmel
>>> <mayosemmel at googlemail.com>:
>>>          Hallo zusammen,
>>>          
>>>          zuerst möchte anmerken, das die Mail mit Absicht nicht an die Liste
>>>          geht, da in den Zone Files öffentliche IP Adressen sind.
>>>          
>>>          Ich hab das mit den Zone Files soweit fertig gemacht. Allerdings ist das
>>>          mit den Delegations schwer zu testen, solange in der offiziellen Zone
>>>          noch andere Server eingetragen sind.
>>>          Ich würde daher folgendes vorschlagen:
>>>          Wir 3 (Tim, Michael und Ich) spielen auf unseren Servern das Zone File
>>>          ein und richten die Synchronisierung ein.
>>>          Anschließend trägt Christian die Server beim Provider ein.
>>>          Nun sollte zumindest die reguläre Zone funktionieren und wir können mir
>>>          der Delegation weitermachen.
>>>          Was haltet ihr von der Vorgehensweise?
>>>          
>>>          Man kann aus den Zones sicherlich noch ein bisschen was rauswerfen, was
>>>          ich jetzt für den Testbetrieb eingefügt habe. Ansonsten sollte das alles
>>>          soweit funktionsfähig sein.
>>>          Falls ihr die Zone-Files
>>>          einspielt und den Sync scharf macht, probiert
>>>          bitte zuerstmal nur mit einem der anderen zu syncen (um die aktuelle
>>>          Version zu haben).
>>>          
>>>          Viele Grüße
>>>          Jan
>>>          
>>>          Zone File für die "Root-Server":
>>>          
>>>          fff.community.  3600 IN SOA NS1.fff.community. franken.freifunk.net. 2015100600 3600 1800 604800 600
>>>          fff.community.  3600 IN NS ro1.fff.community.
>>>          fff.community.  3600 IN NS fff-wue1.fff.community.
>>>          fff.community.  3600 IN NS fff-gw-m1.fff.community.
>>>          FFF-GW-M1.fff.community. 3600 IN A 37.120.190.92
>>>          nuernberg.fff.community. 3600 IN NS fff-test1.nuernberg.fff.community.
>>>          fff-test1.nuernberg.fff.community. 3600 IN AAAA
>>>          fff.community.  3600 IN SOA NS1.fff.community. franken.freifunk.net. 2015100600 3600 1800 604800 600
>>>          
>>>          
>>>          Beispielhaftes Zonefile für eine Delegation
>>>          
>>>          nuernberg.fff.community.        3600 IN SOA fff-test1.nuernberg.fff.community. franken.freifunk.net. 2015100600 3600 1800 604800 600
>>>          nuernberg.fff.community.        3600 IN NS fff-test1.nuernberg.fff.community.
>>>          fff-test1.nuernberg.fff.community.       3600 IN AAAA 2a01:4a0:2001:2074:2::30
>>>          test.nuernberg.fff.community.        3600 IN A  10.50.40.100
>>>          
>>>          
>>>          Script zum Synchronisieren
>>>          
>>>          
>>>                   #!/bin/bash
>>>                   
>>>                   #Server die
>>>                  abgefragt werden sollen (Alle DNS Peers)
>>>                   DnsPeers=(ns1.kraus.moe kraus.moe ns2.kraus.moe)
>>>                   #Name der Zone die verteilt werden soll
>>>                   DomainZone="kraus.moe"
>>>                   #Position und Name des Zone Files
>>>                   OwnZoneFile="/etc/bind/db.kraus.moe"
>>>                   #Temporäres Verzeichnis - muss pro Zone exclusiv sein!
>>>                   TempDir="/tmp/fff-dns"
>>>                   #Backup Verzeichnis
>>>                   BackupDir="/home/freifunk/DNS-Backup"
>>>                   #Wie viele Backups sollen aufgehoben werden? Nur Integer Werte!
>>>                   BackupsToStore=20
>>>                   
>>>                  
>>>                   function backup
>>>                   {
>>>                    datetime=$(date +"%Y-%m-%d_%H-%M-%S")
>>>                    mkdir -p $1/$datetime
>>>                    cp $OwnZoneFile $1/$datetime/.
>>>                    BackupFiles=( $(ls -t $1) )
>>>                    if [ -n ${BackupFiles[0]} ]  && [ ${#BackupFiles[@]} -gt 20 ]
>>>                    then
>>>                     rm -rf $1/${BackupFiles[$BackupsToStore]}
>>>                    fi
>>>                   }
>>>                   
>>>                   function exit_script
>>>                   {
>>>                    rm -rf $TempDir
>>>                    exit $1
>>>                   }
>>>                   
>>>                   mkdir -p $TempDir
>>>                   cd $TempDir
>>>                   OwnSerial=$(grep SOA $OwnZoneFile |awk 'NR==1{print $7}')
>>>                   HighestSerialSoFar=0
>>>                   for peer in "${DnsPeers[@]}"
>>>                   do
>>>                    #Zone File von Peering DNS Servern herunterladen
>>>                    dig @$peer $DomainZone axfr |grep -v ";"> $peer
>>>                    #Seriennummer des Zone Files einlesen
>>>                    PeerSerial=$(grep SOA $peer |awk 'NR==1{print $7}')
>>>                    #Falls keine Seriennummer vorhanden, ist das File invalid oder die Verbindung zum Peer ist nicht in Ordnung
>>>                    if [ -z $PeerSerial ]
>>>                    then
>>>                     rm -f $peer
>>>                     continue
>>>                     PeerSerial=1
>>>                    fi
>>>                    #Falls eigenes Zone File keine Seriennummer enthält und somit invalid ist, automatisch erstbestes valides nutzen
>>>                    if [ -z $OwnSerial ]
>>>                    then
>>>                     named-checkzone  $DomainZone $peer
>>>                     if [ $? -eq 0 ]
>>>                     then
>>>                      cp $peer $OwnZoneFile
>>>                     fi
>>>                     exit 0
>>>                    fi
>>>                    #Nur die Zone-Files mit dem höchsten Serial behalten - wenn dieser höher ist als der bereits vorhandene
>>>                    if [ $OwnSerial -ge $PeerSerial ]
>>>                    then
>>>                     rm -f $peer
>>>                     continue
>>>                    elif [ ${HighestSerialSoFar[0]} -gt $PeerSerial ]
>>>                    then
>>>                     rm -f $peer
>>>                     continue
>>>                    else
>>>                     HighestSerialSoFar=( $PeerSerial $peer )
>>>                    fi
>>>                   done
>>>                   
>>>                   #Anzahl der verbliebenen Zone Files ermitteln
>>>                   PeerZoneFileCount=$(ls -l|wc -l)
>>>                   #Im Falle von einem Update vorher ein Backup machen
>>>                   if [ $PeerZoneFileCount -gt 1 ]
>>>                   then
>>>                    backup $BackupDir $BackupsToStore
>>>                   else
>>>                    exit_script 0
>>>                   fi
>>>                   
>>>                   #Falls nur ein Zone File verblieben ist, direkt einspielen und neustarten
>>>                   if [ $PeerZoneFileCount -eq 2 ]
>>>                   then
>>>                    named-checkzone  $DomainZone ${HighestSerialSoFar[1]}
>>>                           if [ $? -eq 0 ]
>>>                           then
>>>                            cp ${HighestSerialSoFar[1]} $OwnZoneFile
>>>                           fi
>>>                    /etc/init.d/bind9 restart
>>>                    exit_script 0
>>>                   #Im Fall von mehreren Zone Files, prüfen ob alle
>>>                  identisch sind. Falls nicht Abbruch. Ansonsten einspielen und neustart
>>>                   else
>>>                    md5=$(md5sum ${HighestSerialSoFar[1]} |awk '{print $1}')
>>>                    for ZoneFile in *
>>>                    do
>>>                     loopmd5=$(md5sum $ZoneFile |awk '{print $1}')
>>>                     if [ $md5 != $loopmd5 ]
>>>                     then
>>>                      echo $md5 $loopmd5
>>>                      exit_script 1
>>>                     fi
>>>                    done
>>>                    
>>>                    named-checkzone  $DomainZone ${HighestSerialSoFar[1]}
>>>                           if [ $? -eq 0 ]
>>>                           then
>>>                                   cp ${HighestSerialSoFar[1]} $OwnZoneFile
>>>                    fi
>>>                           /etc/init.d/bind9 restart
>>>                           exit_script 0
>>>                   fi
>>>          
>>


-- 
Kontaktmöglichkeiten ChristianD (Christian Dresel):
Jabber: christian at jabber.community
E-Mail: fff at chrisi01.de
Facebook: https://www.facebook.com/christian.chili
Handy/Whatsapp & Festnetz: auf Nachfrage

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20151017/7396204b/attachment-0002.html>


Mehr Informationen über die Mailingliste franken-dev