Entwickler Treffen
mayosemmel
mayosemmel at googlemail.com
Di Sep 29 21:08:03 CEST 2015
Hallo zusammen,
zum Thema fff-community hatten wir ja beim letzten Technik Treffen
besprochen, das man ausschließlich primäre DNS Server aufsetzt und dann
das Zone-File Synchronisiert.
Damit habe ich mich dann nochmal ein bisschen auseinander gesetzt und
zur Synchronisation ein Script geschrieben (siehe unten). Wenn ihr
Verbesserungen habt, immer drauf los!
Alles weitere können wir ja dann am Freitag besprechen.
Grüße Jan
#!/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
cp $peer $OwnZoneFile
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
cp ${HighestSerialSoFar[1]} $OwnZoneFile
/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
cp ${HighestSerialSoFar[1]} $OwnZoneFile
/etc/init.d/bind9 restart
exit_script 0
fi
Am Montag, den 28.09.2015, 03:32 +0200 schrieb Christian Dresel:
> Guten Morgen
>
> ich ebenso, außer die Mehrheit stammt von wo anders her, dann kann man
> natürlich drüber reden ;)
>
> mfg
>
> Christian
>
> Am 27.09.2015 um 22:18 schrieb mayosemmel:
>
> > Hallo Tim,
> >
> > Ich wäre auch fürs Lab.
> >
> > Grüße Jan
> >
> > ____________________________________________________________________
> > Von: Tim Niemeyer
> > Gesendet: 27.09.2015 22:16
> > An: franken-dev at freifunk.net
> > Betreff: Re: Entwickler Treffen
> >
> >
> > Am Sonntag, den 27.09.2015, 17:07 +0200 schrieb Tim Niemeyer:
> > > Moin zusammen
> > >
> > > Es wird mal wieder Zeit.
> > >
> > > https://dudle.inf.tu-dresden.de/Dev_Meeting/
> > >
> > > Ich denke wir nehmen dann den Termin, der heute Abend ~22 Uhr raus
> > > kommt.
> >
> > Yay, prima Sache. Das Dudle zeigt ganz deutlich auf Freitag 19:00
> > Uhr.
> > Ich hab mal wieder das Büro im Lab reserviert, aber wie gesagt
> > können
> > wir gern auch wo anders hin.
> >
> > Tim
> >
> > >
> > > Als Ort würde ich spontan das Nürnberger Lab vorschlagen, wir
> > können das
> > > aber auch woanders, z.B. in Bamberg oder so, machen.
> > >
> > > Punkte:
> > > * Dezentraler keyXchange
> > > * VPN Server Refugee
> > > * Netmon / Monitoring
> > > * L3 Routing über Funkstrecken
> > > * OLSRv2
> > > * DNS: fff.community
> > >
> > > Tim
> > > --
> > > franken-dev mailing list
> > > franken-dev at freifunk.net
> > >
> > http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
> >
> >
> > --
> > franken-dev mailing list
> > franken-dev at freifunk.net
> > http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
> >
> >
>
> --
> franken-dev mailing list
> franken-dev at freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Mehr Informationen über die Mailingliste franken-dev