"MaraDNS" ist ein kleiner, äußerst performanter und sicherer DNS-Server. Er kann als rekursiver, authoritativer Primary und Secondary DNS gleichzeitig konfiguriert werden. Im FreeBSD-Handbuch und in zahlreichen anderen Tutorials wird BIND als DNS-Server beschrieben, allerdings möchte ich hier MaraDNS vorstellen.
Ich werde MaraDNS als sogenannten "authoritative"-DNS-Server mit primärer und sekundärer Zone aufsetzen. Das heißt, mein Server wird der Hauptserver für die auf ihm gehosteten Domains sein und ein anderer wird der sekundäre. Wie das geht, zeige ich dir jetzt.
- Als erstes installieren wir MaraDNS wie gewohnt aus den Ports. Der Befehl lautet:
# cd /usr/ports/dns/maradns/ && make install clean - Anschließend benennen wir die Beispielkonfiguration in unsere tatsächliche Konfiguration um:
# cp /usr/local/etc/mararc.sample /usr/local/etc/mararc - Jetzt öffnen wir diese Datei und geben unsere Konfigurationsparameter ein. Folgende vier Zeilen sind für uns entscheidend. Was sie bedeutet erkläre ich dir dann. Schau dir auch mal die anderen Parameter an, die man verwenden kann. Ich zeige dir hier nur das wichtigste.
ipv4_bind_addresses = "10.0.0.1"
chroot_dir = "/usr/local/etc/maradns"
csv2 = {}
csv2["deinedomain.de."] = "db.deinedomain.de"
zone_transfer_acl = "10.0.0.2,192.168.23.10"- ipv4_bind_addresses: Hier trägst du die IP-Adresse(n) ein, auf die der DNS-Server hören soll. Über diese muss der DNS-Server dann auch erreichbar sein, denke also dran den tcp/udp-Port 53 in deiner '/etc/pf.conf' entsprechende Regeln zu setzen.
- chroot_dir: Trage hier das Verzeichnis ein, in dem du die Zonefiles, also die einzelnen Domain-Konfigurationen ablegst.
- csv2 = {}: Diese Zeile muss vor der ersten csv2["..."]-Zeile stehen. Diese Zeile legt fest, dass unser Server als "authoritative"-Server tätig ist, also der Hauptserver für unsere Domains ist.
Solltest du einen "recursive"-Server aufsetzen wollen, also einen Server, der auf Anfrage andere Server nach der genannten Domain absucht (Beispiel: der DNS deines ISP), dann entfernst du alle mit "csv2" beginnenden Zeilen und trägst stattdessen folgende Zeile ein:
recursive_acl = "127.0.0.1"
Hier gibst du dann die IP-Adressen oder Netzwerke an (z.B. 192.168.1.0/24), die auf deinen Server zugreifen dürfen. Wenn du jedem Server erlauben willst auf deinen DNS zu zugreifen (NICHT EMPFOHLEN!!), kannst du auch "0.0.0.0/0" eintragen. - csv2["..."]: Da wir ja einen "authoritative"-Server aufsetzen, müssen wir MaraDNS sagen, in welcher Datei die Zonefiles (Domainkonfiguration) für die entsprechende Domain liegen. Hinter dem "=" steht dann also der Dateiname in dem Verzeichnis, dass du bei 'chroot_dir' angegeben hast. Für jede Domain legst du einfach eine neue Zeile an.
WICHTIG: In der eckigen Klammer, am Ende der Domain muss ein '.' stehen. In Worten: "deinedomain PUNKT de PUNKT" - zone_transfer_acl: Hier gibst du eine Liste von Nameservern an, die deine Zonefile übertragen, also kopieren dürfen. Hier trägst du bspw. deinen, im Volksmund "Secondary" genannten, Server ein.
- timeout_seconds: Ich hatte Probleme mit maradns, jedenfalls stand in den Logfiles öfter was von "exit with return value 8" nach einem "HUP"-Signal. Ich habe daher den Wert auf "10" festgelegt, vielleicht hilft das, wenn die Root-Server nicht so gut erreichbar sind.
UPDATE: Mit der aktualisierten Version 1.2.12.06_1 ist das Problem behoben. Allerdings ergeben sich ein paar Änderungen, wenn du die Protokollierung aktivieren möchtest (verbose_level und verbose_query).
- ipv4_bind_addresses: Hier trägst du die IP-Adresse(n) ein, auf die der DNS-Server hören soll. Über diese muss der DNS-Server dann auch erreichbar sein, denke also dran den tcp/udp-Port 53 in deiner '/etc/pf.conf' entsprechende Regeln zu setzen.
- Jetzt legen wir noch eine Beispiel-Domainkonfiguration (db.deinedomain.de) an (sog. Zonefile). Übrigens, MaraDNS kann auch Wildcards verwenden, also '*' anstelle von bspw. 'www'. Dann werden alle Anfragen, sofern nicht explizit genannt, an die entsprechende IP geleitet:
deinedomain.de. NS ns1.deinedomain.de.
deinedomain.de. NS ns2.deinedomain.de.
ns1.deinedomain.de. 10.0.0.1
ns2.deinedomain.de. 10.0.1.1
deinedomain.de. 10.0.0.1
www.deinedomain.de. 10.0.0.1
deinedomain.de. MX 10 mail.deinedomain.de.
mail.deinedomain.de. 10.0.0.1
*.deinedomain.de. 10.0.0.1
deinedomain.de. SOA deinedomain.de. hostmaster@deinedomain.de. /serial 7200 3600 604800 1800 - Das bedeutet nun übersetzt:
- Ein DNS-Server für die Domain "deinedomain.de" heißt "ns1.deinedomain.de"
- Der Server "ns1.deinedomain.de" hat die IP-Adresse 10.0.0.1
- Anfragen an die Adresse "deinedomain.de" sollen an den Server 10.0.0.1 geleitet werden
- Anfragen an "www.deinedomain.de" sollen auch an die 10.0.0.1 geleitet werden
- Der Mailserver für diese Domain heißt "mail.deinedomain.de", er hat eine Priorität von 10 (je kleiner, desto wichtiger). Die Priorität kannst du angeben, wenn du mehrere Mailserver hast, die deine eMails empfangen können.
- Der Mailserver mit dem Namen "mail.deinedomain.de" hat die IP-Adresse 10.0.0.1
- Alle Anfragen, die nicht genannt wurden aber auf 'deinedomain.de' enden, werden an die 10.0.0.1 weitergeleitet
- Welche Domain ist betroffen (deinedomain.de)
- Es handelt sich um einen SOA-Eintrag (SOA)
- Wie heißt der Master oder Primary-DNS-Server (deinedomain.de)
- Wer ist dafür verantwortlich (E-Mail-Adresse)
- /serial ist die "Seriennummer", daran kann der Slave sehen, ob sich der Eintrag geändert hat. Wenn du also etwas an diesem Eintrag änderst, ändert sich die Seriennummer automatisch
- Der zweite numerische Wert (7200) gibt an (in Sekunden), in welchen Abständen der Slave-Server deine Domain abfragen darf
- Der dritte Wert (3600) gibt an, in welchen Abständen (auch in Sekunden) der Slave den Master-Server kontaktieren darf, sollte der Master-Server mal nicht erreichbar sein
- Der vierte Wert (604800) gibt an, wie lange der Slave-Server den DNS-Eintrag, also das Zonefile vorhalten soll, bis er es als "expired", also abgelaufen, erklärt, wenn der Master-Server mal nicht erreichbar ist. Dieser Wert sollte möglichst hoch sein (auch in Sekunden übrigens)
- Die letzte Zahl gibt an, wie lange eine Nameserverauflösung gültig ist, bevor sie neu aufgelöst werden muss (in Sekunden). Diese Zahl ist auch als "TTL" (Time-To-Live) bekannt.
Eine Domain kann dabei natürliche Einträge haben, also wenn du mehrere Server hast, die deine Website bereitstellen, kannst du mehrere Zeilen für den entsprechenden Namen eintragen. MaraDNS wählt dann für jede Anfrage einen anderen Eintrag aus.
Beispiel:deinedomain.de. 10.0.0.1
MaraDNS wird jetzt bei der ersten Anfrage sagen, dass der Server mit der IP 10.0.0.1 für "deinedomain.de" zuständig ist. Bei der zweiten wird er 10.0.0.2 zurückgeben usw. Somit erreichst du eine gleichmäßige Verteilung der Anfragen auf deine Server.
deinedomain.de. 10.0.0.2
deinedomain.de. 10.0.0.3 - Jetzt wären wir eigentlich mit der Konfiguration schon fertig und könnten MaraDNS starten, aber ich will dir noch eine kleine Hilfe zeigen. Wenn du nämlich mehrere Domains auf einem Webserver hostest, also immer die gleiche IP hast, dann kannst du die Domainnamen auch durch ein '%' ersetzen. MaraDNS wird dann jedes '%'-Zeichen durch die angefragte Domain ersetzen.
WICHTIG: Wenn du ein '%'-Zeichen verwendest, ist der abschließende '.' nicht erforderlich!
Beispiel:www.% 10.0.0.1
mail.% 10.0.0.1 - Um den Primary-Server beim Systemstart zu starten, tragen wir folgende Zeilen in die '/etc/rc.conf' ein:
maradns_enable="YES"
zoneserver_enable="YES" - Starten können wir MaraDNS über den Befehl
# sh /usr/local/etc/rc.d/maradns.sh && /usr/local/etc/rc.d/zoneserver.sh
Einen Kommentar hinzufügen
@Martin: So besser? :-)
Ok anders gefragt, magst du eventuell darauf hinweisen das es auch board mittel gibt, und auf refernzen/howtos (freebsd docu) verweisen ?
@Martin: Es geht hier nicht um "Bordmittel", "besser oder schlechter". MaraDNS ist mein favorisierter DNS-Server aus vielerlei Gründen, daher beschreibe ich hier wie man diesen aufsetzt.
Du kannst gerne andere Hilfsmittel verwenden, freie Software schließt ja die freie Wahl der Software nicht aus :-)
Gruß,
Benedikt
Warum nimmst du hier nicht die Bordmittel von FreeBSD ?