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:
- 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.
- 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…
- 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
- MyDNS: http://mydns.bboy.net
- dnscache: http://cr.yp.to/djbdns/dnscache.html
- phpMyAdmin: http://www.phpmyadmin.net
- MyDNSConfig: http://www.mydnsconfig.org
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.