DNS-Server · 3 min read · Jan 09, 2026

Einen MySQL-basierten DNS-Server betreiben: MyDNS - Seite 3

3 Installiere dnscache

Eine sehr wichtige Sache, die man über MyDNS wissen sollte, ist, dass es keine externen (rekursiven) DNS-Abfragen unterstützt, d.h. MyDNS liefert Antworten nur für Domains, für die es autoritativ ist! Wenn du andere Domains wie zum Beispiel www.google.com auflösen möchtest, musst du einen DNS-Resolver wie dnscache auf deinem System installieren, und dieser muss auf einer separaten IP-Adresse installiert werden. Um herauszufinden, warum der DNS-Server (MyDNS) und der DNS-Resolver (dnscache) so getrennt sind, schau hier nach: http://cr.yp.to/djbdns/separation.html

Normalerweise gibt dir dein ISP IP-Adressen von Nameservern, die du für deine Internetverbindung zu Hause oder im Büro verwendest, damit dein Arbeitsplatz Namen wie www.google.com auflösen kann. Die IP-Adressen der Nameserver sind tatsächlich IP-Adressen von DNS-Resolvern wie dnscache. Wenn du nun deinen Kunden deine eigenen Nameserver-IP-Adressen geben möchtest, musst du einen DNS-Resolver einrichten und deinen Kunden die IP-Adresse dieses DNS-Resolvers geben.

Wenn du nur eine IP-Adresse auf deinem Server hast, könntest du sagen: “Ok, ich binde MyDNS an 127.0.0.1 und dnscache an meine öffentliche IP-Adresse, um dieses Engpassproblem zu umgehen.”. Bitte lies hier, um herauszufinden, warum das eine schlechte Idee ist: http://www.fefe.de/djbdns/#sameip

Wenn du keinen DNS-Resolver auf deinem System installieren möchtest, kannst du diesen Abschnitt überspringen.

Angenommen, du hast zwei öffentliche IP-Adressen, 1.2.3.4 und 1.2.3.5, und du möchtest, dass MyDNS auf 1.2.3.4 hört und dnscache auf 1.2.3.5 hört.

Führe die folgenden Schritte aus, um dnscache zu installieren:

groupadd dns
useradd -M -g dns -s /sbin/nologin -c DNS-Cache-User dnscache
useradd -M -g dns -s /sbin/nologin -c TinyDNS-User tinydns
useradd -M -g dns -s /sbin/nologin -c DNSlog-User dnslog

Erstelle das dnscache Init-Skript:

cd /usr/local/sbin
wget http://www.servershak.com/dns/dnsctl
chmod 700 dnsctl
ln -s /usr/local/sbin/dnsctl /etc/init.d/dnsctl

Erstelle die Systemstart-Links:

Auf Debian:

update-rc.d dnsctl defaults

Auf Fedora und RedHat:

chkconfig –levels 235 dnsctl on

Dann kompilieren und installieren wir dnscache:

cd /usr/local/src
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar -zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make
make setup check

mkdir -p /var/package
chmod 1755 /var/package
cd /var/package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
gunzip daemontools-0.76.tar
tar -xpf daemontools-0.76.tar
rm daemontools-0.76.tar
cd /var/package/admin/daemontools-0.76
package/install

cd /usr/local/src
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar -xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
make
make setup check

dnscache-conf dnscache dnslog /etc/dnscache 1.2.3.5
ln -s /etc/dnscache /service
touch /etc/dnscache/root/ip/1.2.3

Jetzt hört dnscache auf 1.2.3.5. Jetzt müssen wir MyDNS mitteilen, dass es nur auf 1.2.3.4 hören soll. Daher müssen wir die listen-Direktive in /etc/mydns.conf ändern:

| listen = 1.2.3.4 |

und starte MyDNS neu:

/etc/init.d/mydns restart

Jetzt solltest du, wenn du versuchst, Domainnamen auf 1.2.3.5 aufzulösen, eine Antwort erhalten. Zum Beispiel, um www.google.com aufzulösen, kannst du ausführen:

dig @1.2.3.5 www.google.com

Auf die gleiche Weise solltest du in der Lage sein, Domains, die von MyDNS verwaltet werden (z.B. www.somedomain.com), aufzulösen, aber diesmal gräbst du 1.2.3.4:

dig @1.2.3.4 www.somedomain.com

4 Die Zonen und Datensätze vom primären zum sekundären DNS-Server übertragen

Wenn sowohl der primäre als auch der sekundäre DNS-Server MyDNS verwenden, hast du drei Möglichkeiten, die Daten vom primären zum sekundären DNS-Server zu übertragen:

  1. Die altmodische Methode: Du kannst Zonenübertragungen verwenden. Daher musst du allow-axfr = no in allow-axfr = yes in /etc/mydns.conf ändern und MyDNS auf dem primären DNS-Server neu starten. Zusätzlich musst du die IP-Adresse des sekundären DNS-Servers in der xfer-Spalte in der soa-Tabelle für die Zonen angeben, die übertragen werden sollen. Außerdem stelle sicher, dass die Firewall auf dem primären DNS den Port 53 (TCP und UDP) nicht blockiert.
  2. Sowohl der primäre als auch der sekundäre DNS verwenden dieselbe MySQL-Datenbank. Es gibt einen Nachteil bei dieser Lösung: Wenn der MySQL-Server ausfällt, fallen sowohl der primäre als auch der sekundäre DNS gleichzeitig aus…
  3. Die bevorzugte Lösung: Verwende die MySQL-Datenbankreplikation, um die Daten vom primären zum sekundären DNS zu übertragen. Stelle sicher, dass die Firewall auf dem primären DNS den MySQL-Port (normalerweise 3306) nicht blockiert.

Ich empfehle, die MySQL-Replikation zu verwenden. Ich habe hier einen sehr präzisen Leitfaden geschrieben, wie man dies einrichtet: https://www.howtoforge.com/mysql_database_replication, sodass ich dieses Thema hier nicht erneut behandeln muss.

Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.