DNS: Unterschied zwischen den Versionen
(Monitoring von Server/fff-fra1) |
|||
Zeile 269: | Zeile 269: | ||
|- | |- | ||
|| http://fff-gw-cd1.fff.community/ || [[Benutzer:ChristianD]] || Monitoring von [[Server#Gateway_Server_.22fff-gw-cd1.22|fff-gw-cdfue1]] || Internet || | || http://fff-gw-cd1.fff.community/ || [[Benutzer:ChristianD]] || Monitoring von [[Server#Gateway_Server_.22fff-gw-cd1.22|fff-gw-cdfue1]] || Internet || | ||
|- | |||
|| http://fff-fra1.fff.community/ || [[Benutzer:delphiN]] || Monitoring von [[Server/fff-fra1]] || Freifunknetz || | |||
|- | |- | ||
|| http://owncloud.fff.community/ || [[Benutzer:ChristianD]] || Owncloud Instanz, Accountanfragen an mich, aktuell Beta! || Freifunknetz || | || http://owncloud.fff.community/ || [[Benutzer:ChristianD]] || Owncloud Instanz, Accountanfragen an mich, aktuell Beta! || Freifunknetz || | ||
|} | |} |
Version vom 28. Dezember 2015, 10:52 Uhr
Diese Seite befindet sich noch im Entwurfsstadium.
Hilf mit sie zu verbessern!
Konzept
Für die interne Nutzung im Freifunknetz wurde durch ChristianD. die Domain fff.community reserviert. Wir haben keine eigene Toplevel-Domain genutzt um Kollisionen vorzubeugen.
Eine Gruppe von verschiedenen Gateway Betreibern ist autoritativ für die Zone zuständig und synchronisiert untereinander das Zonefile mittels untenstehendem Script.
Wenn jemand eine Domain für seinen Service haben möchte, sollte eine Mail an die Mailingliste genügen. Wenn Subdomains delegiert werden sollen, müssen mindestens 2 Gateways von verschiedenen Betreibern autoritativ sein und das Zone-File entsprechend austauschen.
Funktionsfähigkeit auf allen GWs
Um sicher zu stellen, das dass DNS im ganzen Netz funktioniert, müssen alle Gateways korrekt konfiguriert sein. Es gibt 3 Möglichkeiten um dies zu erreichen:
- Kein eigener DNS-Server
- Wenn kein eigener DNS-Server betrieben wird, bitte nicht auf einen öffentlichen verweisen, sondern auf einen unserer Server. Somit braucht man sich um die Konfiguration keine Gedanken machen.
- Eigener DNS-Server mit peering der Zonen
- Hierzu sind die untenstehenden Scripts und das Zutun der bereits am peering angeschlossenen Server Betreiber notwendig
- Eigener DNS-Server mit Static-Stub
- siehe hierzu Static-Stub Konfiguration
Static-Stub Konfiguration
Ein so genannter Static-Stub sorgt dafür, dass Bind für definierte Zonen immer zuerst die festgelegten DNS-Server anfragt.
Wir haben zur Zeit eine Forward und eine Reverse Lookup Zone. Diese sollten statisch eingetragen werden. Dies geschieht in der /etc/bind/named.conf.local
zone "50.10.in-addr.arpa" { type static-stub; server-addresses { 10.50.40.10; 10.50.48.3; 10.50.252.8; }; }; zone "fff.community" { type static-stub; server-addresses { 10.50.40.10; 10.50.48.3; 10.50.252.8; }; };
Weiterhin sollte das ICVPN-DNS aufgenommen werden. Wie das passiert ist hier erklärt.
Synchronisationsscript für DNS-Zones
Dies ist notwendig um die Dezentralität zu wahren. Wobei man dazu sagen muss, dass unsere DNS Lösung nicht 100% dezentral ist. Daher sollte man unseren DNS als "Service innerhalb des Freifunknetzes Franken" ansehen.
#!/bin/bash #Server die abgefragt werden sollen (Alle DNS Peers) DnsPeers=( 10.50.252.15 10.50.252.39 10.50.252.27 ) #Name der Zone die verteilt werden soll DomainZone="fff.community" #Position und Name des Zone Files OwnZoneFile="/etc/bind/db.fff.community" #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 echo $(date) "Script started" 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 echo $(date) "Script ended" exit $1 } mkdir -p $TempDir cd $TempDir OwnSerial=$(grep SOA $OwnZoneFile |awk 'NR==1{print $7}') HighestSerialSoFar=0 for peer in "${DnsPeers[@]}" do echo $(date) "process DNS-Peer" #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 named-compilezone -o $OwnZoneFile $DomainZone $peer 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 echo $(date) "Check Zonefile1" named-checkzone $DomainZone ${HighestSerialSoFar[1]} if [ $? -eq 0 ] then echo $(date) "Copy Zonefile1" named-compilezone -o $OwnZoneFile $DomainZone ${HighestSerialSoFar[1]} fi /etc/init.d/bind9 reload 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 $(date) $md5 $loopmd5 exit_script 1 fi done echo $(date) "Check Zonefile2" named-checkzone $DomainZone ${HighestSerialSoFar[1]} if [ $? -eq 0 ] then echo $(date) "Copy Zonefile2" named-compilezone -o $OwnZoneFile $DomainZone ${HighestSerialSoFar[1]} fi /etc/init.d/bind9 reload exit_script 0 fi
Script um die Reverse-DNS Zone zu erstellen
#!/bin/bash #Name der Zone DomainZone="50.10.in-addr.arpa." #Positionen und Namen der Forward Lookup Zone Files ForwardZoneFiles=("/etc/bind/db.fff.community") ReverseZoneFile="/etc/bind/db.50.10" #Temporäres Verzeichnis - muss pro Zone exclusiv sein! TempDir="/tmp/50.10.in-addr.arpa" #TTL TTL=3600 #refresh refresh=2000 #retry retry=6400 #expire expire=2419200 #minimum minimum=86400 #contact-mail contact=franken.freifunk.net. #responsible DNS Server by name(for reverseDNS your own) responsible=fff-gw-m1.gw.fff.community. ################################################################# function validate_ip() { local ip=$1 local stat=1 if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then OIFS=$IFS IFS='.' ip=($ip) IFS=$OIFS [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] stat=$? fi return $stat } mkdir -p $TempDir Serials=() for ForwardZoneFile in "${ForwardZoneFiles[@]}" do ZoneName=$(cat $ForwardZoneFile|grep SOA| awk '{ print $1 }'|head -n 1) named-compilezone -o "$TempDir/$ZoneName" $ZoneName $ForwardZoneFile >/dev/null 2>&1 serial=$(cat "$TempDir/$ZoneName"|grep SOA| awk '{ print $7 }'|head -n 1) Serials+=( "$serial" ) done Serials=( $( for i in ${Serials[@]}; do echo "$i"; done | sort -rn ) ) serial=${Serials[0]} echo "$DomainZone $TTL IN SOA $responsible $contact $serial $refresh $retry $expire $minimum"> "$TempDir/$DomainZone" echo "$DomainZone $TTL IN NS $responsible" >> "$TempDir/$DomainZone" for ForwardZoneFile in $(ls $TempDir) do Hosts=($(cat "$TempDir/$ForwardZoneFile"|grep -v SOA|awk '{ print $1 }')) IPs=$(cat "$TempDir/$ForwardZoneFile"|grep -v SOA|awk '{ print $5 }') i=0 for IP in $IPs do if validate_ip $IP then echo $(echo $IP|awk 'BEGIN { FS = "." } ; { print $4 "." $3 "." $2 "." $1 }')".in-addr.arpa." $TTL IN PTR ${Hosts[$i]} >> "$TempDir/$DomainZone" fi i=$((i+1)) done done oldSerial=$(grep SOA $ReverseZoneFile |awk 'NR==1{print $7}') if [ $serial -gt $oldSerial ] then named-compilezone -o $ReverseZoneFile $DomainZone "$TempDir/$DomainZone" >/dev/null 2>&1 /etc/init.d/bind9 reload fi rm -r $TempDir
Bereits angelegte Domains & Services
In diese Liste kann sich jeder "Servicebetreiber" freiwillig eintragen. Sie wird nicht automatisch aus der Zonefile generiert und daher besteht auch kein Anspruch auf Vollständigkeit.
Domain | Bereitgestellt durch | Art des Services | erreichbar über | |
http://fff-gw-cd1.fff.community/ | Benutzer:ChristianD | Monitoring von fff-gw-cdfue1 | Internet | |
http://fff-fra1.fff.community/ | Benutzer:delphiN | Monitoring von Server/fff-fra1 | Freifunknetz | |
http://owncloud.fff.community/ | Benutzer:ChristianD | Owncloud Instanz, Accountanfragen an mich, aktuell Beta! | Freifunknetz |