DNS-Server · 5 min read · Oct 02, 2025
Einen MySQL-basierten DNS-Server betreiben: MyDNS
Dies ist ein “Copy & Paste” HowTo! Der einfachste Weg, dieses Tutorial zu befolgen, ist die Verwendung eines Befehlszeilenclients/SSH-Clients (wie PuTTY für Windows) und einfach die Befehle zu kopieren und einzufügen (außer dort, wo Sie eigene Informationen wie IP-Adressen, Hostnamen, Passwörter,… angeben müssen). Dies hilft, Tippfehler zu vermeiden.
Einen MySQL-basierten DNS-Server betreiben: MyDNS
Version 1.0
Autor: Falko Timme
Zuletzt bearbeitet: 01.02.2006
In diesem Tutorial werde ich beschreiben, wie man MyDNS installiert und konfiguriert, einen DNS-Server, der eine MySQL-Datenbank als Backend anstelle von Konfigurationsdateien wie zum Beispiel Bind oder djbdns verwendet. Dies hat den Vorteil, dass Sie einfach webbasierte Frontends zur Verwaltung Ihrer DNS-Einträge verwenden können. Sie könnten sogar Ihr eigenes Frontend schreiben, z.B. mit PHP, um mit der MyDNS-Datenbank zu interagieren. MyDNS liest einfach die Einträge aus der Datenbank, und es muss nicht neu gestartet/neu geladen werden, wenn sich DNS-Einträge ändern oder Zonen erstellt/bearbeitet/gelöscht werden! Dies ist ein großer Vorteil.
Ich werde auch zeigen, wie man einen sekundären DNS-Server einrichtet, aber ich werde keine normalen Zonentransfers verwenden, um die Einträge vom primären zum sekundären DNS-Server zu übertragen; stattdessen werde ich MySQL-Datenbankreplikation verwenden. Ich werde die Daten einfach vom primären zum sekundären Server replizieren.
Es gibt mehrere webbasierte Frontends zu MyDNS. Natürlich können Sie phpMyAdmin für die MyDNS-Verwaltung verwenden, oder Sie können das Webfrontend verwenden, das mit MyDNS geliefert wird (das nicht für Anfänger geeignet ist, da es an Feldbeschreibungen fehlt), oder Sie können MyDNSConfig verwenden, ein von mir geschriebenes Tool. Ich werde zeigen, wie man jedes von ihnen installiert.
Insgesamt macht MyDNS einen sehr guten Eindruck auf mich, und ich denke, dass die Zukunft den Diensten gehört, die eine Datenbank als Backend anstelle von Konfigurationsdateien verwenden.
Ich habe ein Debian Sarge-System für dieses Setup verwendet. Die meisten der hier beschriebenen Schritte sollten jedoch auch für andere Distributionen wie Fedora, SuSE, Mandriva usw. gelten.
Ich möchte zuerst sagen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen, aber dies ist der Weg, den ich wähle. Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!
1 MySQL und MyDNS installieren
Zuerst stellen Sie sicher, dass Sie eine funktionierende Grundinstallation von Debian haben, wie auf https://www.howtoforge.com/perfect_setup_debian_sarge und https://www.howtoforge.com/perfect_setup_debian_sarge_p2 beschrieben (bitte beziehen Sie sich auf das jeweilige “Perfect Setup”-Dokument auf HowtoForge, wenn Sie eine andere Distribution verwenden).
Dann installieren Sie MySQL:
apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin
Sie werden ein paar Fragen gestellt:
SuExec aktivieren? <– Ja
Welchen Webserver möchten Sie automatisch neu konfigurieren? <– apache, apache2
Möchten Sie, dass ich apache jetzt neu starte? <– Ja
Setzen Sie ein root-MySQL-Passwort wie folgt:
mysqladmin -u root password yourrootsqlpassword
Die MyDNS-Installation ist einfach. Folgen Sie einfach diesen Schritten:
cd /tmp/
wget http://mydns.bboy.net/download/mydns-1.0.0.tar.gz
tar xvfz mydns-1.0.0.tar.gz
cd mydns-1.0.0/
./configure
make
make install
Jetzt müssen wir die MyDNS-Datenbank (genannt mydns) und einen MyDNS-Datenbankbenutzer (auch mydns, mit mydns_password als Passwort) erstellen:
mysql -u root -p
Passwort eingeben:
Jetzt erstellen wir im MySQL-Shell die mydns-Datenbank und den Benutzer mydns:
CREATE DATABASE mydns;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns. TO ‘mydns’@’localhost’ IDENTIFIED BY ‘mydns_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns. TO ‘mydns’@’localhost.localdomain’ IDENTIFIED BY ‘mydns_password’;
FLUSH PRIVILEGES;
quit;
Zurück auf der normalen Shell erstellen wir die Tabellen in der mydns-Datenbank:
mydns –create-tables | mysql -u root -p mydns
Passwort eingeben:
Wenn Sie Fehler wie diese sehen:
mydns[14287]: Fehler beim Laden von gid für Gruppe nobody' mydns[14287]: Verwendung von gid 65534 vom Benutzernobody’
machen Sie sich keine Sorgen, Sie können sie ignorieren.
Als nächstes fügen wir zwei weitere Spalten zur soa-Tabelle der mydns-Datenbank hinzu:
mysql -u root -p
Passwort eingeben:
ALTER TABLE mydns.soa ADD COLUMN active ENUM(‘Y’,’N’) NOT NULL;
ALTER TABLE mydns.soa ADD INDEX (active);
ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255) NOT NULL;
quit;
Mit der active-Spalte können Sie später einfach Zonen aktivieren/deaktivieren, und die xfer-Spalte kann für Zonentransfers verwendet werden (die wir nicht benötigen, da wir MySQL-Datenbankreplikation verwenden, um die Daten zum sekundären DNS-Server zu übertragen, aber ich erwähne es der Vollständigkeit halber) (wenn Sie Zonentransfers anstelle von Datenbankreplikation verwenden möchten, sollte die xfer-Spalte eine oder mehrere IP-Adressen enthalten, die durch Kommas getrennt sind. Diese IP-Adressen dürfen die Zone übertragen.).
Jetzt erstellen wir die MyDNS-Konfigurationsdatei /etc/mydns.conf, indem wir diesen Befehl ausführen:
cd /tmp/mydns-1.0.0/
make conf
Dann bearbeiten wir /etc/mydns.conf, sodass es so aussieht:
| ## ## /etc/mydns.conf ## Fr 21. Okt 16:36:32 2005 ## Für weitere Informationen siehe mydns.conf(5). ## # DATENBANKINFORMATIONEN db-host = localhost # SQL-Server-Hostname db-user = mydns # SQL-Server-Benutzername db-password = mydns_password # SQL-Server-Passwort database = mydns # MyDNS-Datenbankname # ALLGEMEINE OPTIONEN user = nobody # Mit den Berechtigungen dieses Benutzers ausführen group = nogroup # Mit den Berechtigungen dieser Gruppe ausführen listen = * # Auf diesen Adressen hören ('*' für alle) # CACHE-OPTIONEN zone-cache-size = 1024 # Maximale Anzahl der Elemente, die im Zonen-Cache gespeichert werden zone-cache-expire = 60 # Anzahl der Sekunden, nach denen zwischengespeicherte Zonen ablaufen reply-cache-size = 1024 # Maximale Anzahl der Elemente, die im Antwort-Cache gespeichert werden reply-cache-expire = 30 # Anzahl der Sekunden, nach denen zwischengespeicherte Antworten ablaufen # ESOTERIK log = LOG_DAEMON # Facility, die für Programmausgaben verwendet werden soll (LOG_*/stdout/stderr) pidfile = /var/run/mydns.pid # Pfad zur PID-Datei timeout = 120 # Anzahl der Sekunden, nach denen Abfragen ablaufen multicpu = 1 # Anzahl der CPUs, die auf Ihrem System installiert sind allow-axfr = no # Soll AXFR aktiviert werden? allow-tcp = yes # Soll TCP aktiviert werden? ignore-minimum = no # Mindest-TTL für Zone ignorieren? soa-table = soa # Name der Tabelle, die SOA-Einträge enthält rr-table = rr # Name der Tabelle, die RR-Daten enthält |
Stellen Sie sicher, dass Sie die richtigen Datenbankdetails ausfüllen, und achten Sie auch auf die Gruppe. Unter Debian ist die Gruppe von nobody nogroup, was sich von dem Standardwert in /etc/mydns.conf (auch nobody) unterscheidet, also stellen Sie sicher, dass Sie dies ändern! Setzen Sie auch allow-tcp auf yes.
Jetzt erstellen wir das MyDNS-Init-Skript /etc/init.d/mydns:
| #! /bin/sh # # mydns Starten Sie den MyDNS-Server # # Autor: Falko Timme <[email protected]>. # set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=mydns DAEMON=/usr/local/sbin/$NAME DESC="DNS-Server" SCRIPTNAME=/etc/init.d/$NAME # Beenden Sie das Skript, wenn das Paket entfernt wurde. test -x $DAEMON || exit 0 case "$1" in start) echo -n "Starte $DESC: $NAME" $DAEMON --background echo "." ;; stop) echo "Stoppe $DESC: $NAME." kill -9 `pidof $NAME` &> /dev/null ;; restart) echo "Starte $DESC neu: $NAME." $0 stop && sleep 1 $0 start ;; *) echo "Verwendung: $SCRIPTNAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0 |
Dann machen wir es ausführbar und starten MyDNS:
chmod 755 /etc/init.d/mydns
/etc/init.d/mydns start
Wenn Sie möchten, dass MyDNS beim Systemstart automatisch gestartet wird, müssen Sie die erforderlichen Systemstart-Links erstellen. Unter Debian machen Sie es so:
update-rc.d mydns defaults 21 22
Unter Fedora oder RedHat würden Sie Folgendes ausführen:
chkconfig –levels 235 mydns on
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.