FF-zone

Aus wiki.freifunk.net
Zur Navigation springenZur Suche springen

Die FF-Zone ist eine freifunkinterne, städteübergreifende DNS-Zone, um einheitlich Domain-Namen zu ermöglichen.

Das System nutzt eine Anycast-Struktur, um möglichst ausfallsicher und redundant auch viele Anfragen beantworten zu können.

Der Root-A-Server wird von Freifunk Leipzig betrieben. An einer Schnittstelle zur Domain-Registratur für andere Städte wird gerade gearbeitet.

Folgende Firmwares enthalten automatisch Unterstützung für die FF-Zone:

  • Leipzig Freifunk Firmware ab 1.4.5-i

DNS-Masquerade konfigurieren

/etc/dnsmasq.conf muß dafür folgende Einträge besitzen:

# .ff root server
server=/ff/10.61.0.10
server=/ff/10.61.0.11
server=/ff/10.61.0.12
server=/ff/10.61.0.13
server=/ff/10.61.0.14
server=/ff/10.61.0.15

Da die Freifunk Firmware diese Datei beim Start neu schreibt, die Einträge in /etc/init.d/S50dnsmasq eintragen.

BIND Konfigurieren

zone "ff" {
   type forward;
   forwarders { 10.61.0.10;10.61.0.11;10.61.0.12;10.61.0.13;10.61.0.14;10.61.0.15; };
};

Secondary DNS einrichten

Um die Zone ausfallsicherer zu machen sind Secondary-DNS-Server notwendig. Momentan werden nur BIND-Konfigurationen unterstützt. Der Abgleich erfolgt sowohl über Domain Transfer als auch über Rsync. Der Rsync-Cronjob sollte dabei mindestens einmal pro Stunde laufen.

BIND installieren, zum Beispiel mit:

apt-get install bind9

Verzeichnis zur Synchronisation anlegen:

mkdir /etc/bind/zones-ff/

in /etc/bind/named.conf (bei Debian am besten named.conf.local) eintragen:

include "/etc/bind/zones-ff/zones.conf";

Ein Sync-Skript anlegen, zum Beispiel unter /etc/bind/sync_ff.sh

Beispiel:

#!/bin/sh
rsync -zrt --chmod=ugo=rwX --delete --no-p --no-g -e "ssh -i /root/.ssh/id_rsa_ffdns" freifunk-dns@db.leipzig.freifunk.net:/home/freifunk/dns/bind/ /etc/bind/zones-ff/                                                                         
/etc/init.d/bind reload >/dev/null                                              
# notify master dns about our existance and anycast ip
wget "https://db.leipzig.freifunk.net/dns/ns/ping/?ip=104.61.77.64&alias=10.61.0.11" --no-check-certificate -O /dev/null 2>/dev/null

Der wget-Befehl erlaubt den primary DNS, ihm bei Updates NOTIFY-Nachrichten zu schicken, sodass Updates sehr zügig von allen Servern auch ohne rsync möglich sind. (Ist noch nicht implementiert.)

Wer einen Secondary DNS betreiben möchte, schickt bitte einen SSH public key an freifunk [ät] poelzi [dot] org.

Den Nameserver testen:

# host leipzig.ff localhost
Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases:

leipzig.ff has address 104.61.0.1

Ist alles ok, am besten noch /var/log/syslog nach Fehlern absuchen, die named auswirft. Wenn manche Zonen aufgrund von Fehlern nicht geladen werden können, ist das nicht so wild, manchmal bringen fehlerhafte Einträge BIND dazu, die Zonen zu ignorieren.

Nun kann eine der Anycast-IP-Adressen ausgesucht werden, 10.61.0.11 bis 10.61.0.15 sind möglich (die 0.10 darf NICHT benutzt werden). Am besten schauen, welcher am weitesten entfernt ist, falls er in der Routing-Tabelle auftaucht.