<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi<br>
      <br>
      so ich hab jetzt einfach mal Zeit & Lust gehabt und hab mir
      Tims Anleitung geschnappt auf mich angepasst und das ganze mal
      "probiert".<br>
      <br>
      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:<br>
      <br>
      ******* /etc/bind # /etc/bind/sync.sh <i>(erster Aufruf des
        Scripts!)</i><br>
      zone fff.community/IN: loaded serial 2015101501<br>
      OK<br>
      ******* /etc/bind # ls<br>
      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<br>
      ******* /etc/bind # cat db.fff.community<br>
      <br>
      fff.community.          3600    IN      SOA    
      fff-gw-m1.fff.community. franken.freifunk.net. 2015101501 3600
      1800 604800 600<br>
      fff.community.          3600    IN      NS      ro1.fff.community.<br>
      fff.community.          3600    IN      NS     
      fff-wue1.fff.community.<br>
      fff.community.          3600    IN      NS     
      fff-gw-m1.fff.community.<br>
      FFF-GW-M1.fff.community. 3600   IN      A       ##########<br>
      FFF-GW-M1.fff.community. 3600   IN      AAAA    ##########<br>
      fff-wue1.fff.community. 3600    IN      A       ##########<br>
      ro1.fff.community.      3600    IN      A       ##########<br>
      fff.community.          3600    IN      SOA    
      fff-gw-m1.fff.community. franken.freifunk.net. 2015101501 3600
      1800 604800 600<br>
      <br>
      ******* /etc/bind #<br>
      <br>
      (ich hab manuell ein paar IP Adressen durch Rauten zensiert, dort
      stehen eigentlich öffentliche IPs die aber nicht unbedingt durch
      die Mailingliste müssen)<br>
      <br>
      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. <br>
      <br>
      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?<br>
      <br>
      mfg<br>
      <br>
      Christian<br>
      <br>
      Am 15.10.2015 um 21:42 schrieb Tim Niemeyer:<br>
    </div>
    <blockquote cite="mid:1444938164.8750.121.camel@mastersword.de"
      type="cite">
      <pre wrap="">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:
</pre>
      <blockquote type="cite">
        <pre wrap="">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:
</pre>
        <blockquote type="cite">
          <pre wrap="">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
<a class="moz-txt-link-rfc2396E" href="mailto:mayosemmel@googlemail.com"><mayosemmel@googlemail.com></a>:
        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
        
</pre>
        </blockquote>
        <pre wrap="">

</pre>
      </blockquote>
      <pre wrap="">
</pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Kontaktmöglichkeiten ChristianD (Christian Dresel):
Jabber: <a class="moz-txt-link-abbreviated" href="mailto:christian@jabber.community">christian@jabber.community</a>
E-Mail: <a class="moz-txt-link-abbreviated" href="mailto:fff@chrisi01.de">fff@chrisi01.de</a>
Facebook: <a class="moz-txt-link-freetext" href="https://www.facebook.com/christian.chili">https://www.facebook.com/christian.chili</a>
Handy/Whatsapp & Festnetz: auf Nachfrage</pre>
  </body>
</html>