Betreiben eines MySQL-basierten DNS Servers: MyDNS

2.3 Installation von MyDNSConfig

MyDNSConfig ist ein Interface, das von mir mit PHP geschrieben wurde. Ich finde, dass das originale MyDNS Web Interface für Anfänger schwierig zu handhaben ist, da es keine Feldbeschreibungen aufweist (es ist einfach zu handhaben, wenn man aus der Bind-Welt kommt, aufgrund des Designs des Interfaces, was den Zonendateien von Bind ähnelt).

Du kannst MyDNSConfig von http://www.mydnsconfig.org runterladen.

Lass uns nun davon ausgehen, dass Du mydnsconfig-<version>.tar.gz nach /tmp runtergeladen hast. Dann installierst Du es wie folgt:

cd /tmp
tar xvfz mydnsconfig-<version>.tar.gz
cd mydnsconfig
cp -fr * /var/www

Dann musst Du /var/www/lib/config.inc.php anpassen. Meine sieht wie folgt aus:

<?php

ini_set('register_globals',0);

$conf["app_title"] = "MyDNSConfig";
$conf["app_version"] = "1.0.0";
$conf["rootpath"] = "/var/www";

$conf["fs_div"] = "/"; // File system divider,  on windows and / on linux and unix
$conf["classpath"] = $conf["rootpath"].$conf["fs_div"]."lib".$conf["fs_div"]."classes";
$conf["temppath"] = $conf["rootpath"].$conf["fs_div"]."temp";

/*
        Database Settings
*/

$conf["db_type"] = 'mysql';
$conf["db_host"] = 'localhost';
$conf["db_database"] = 'mydns';
$conf["db_user"] = 'mydns';
$conf["db_password"] = 'mydns_password';

/*
        External programs
*/

//$conf["programs"]["convert"] = "/usr/bin/convert";
//$conf["programs"]["wput"] = $conf["rootpath"]."toolswputwput.exe";

/*
        Themes
*/

$conf["theme"] = 'default';
$conf["html_content_encoding"] = 'text/html; charset=iso-8859-1';
$conf["logo"] = 'themes/default/images/mydnsconfig_logo.gif';

/*
        Default Language
*/

$conf["language"] = 'en';

/*
        Auto Load Modules
*/

$conf["start_db"] = true;
$conf["start_session"] = true;

/*
        DNS Settings
*/

$conf["auto_create_ptr"] = 1; // Automatically create PTR records?
$conf["default_ns"] = 'ns1.example.com.'; // must be set if $conf['auto_create_ptr'] is 1. Don't forget the trailing dot!
$conf["default_mbox"] = 'admin.example.com.'; // Admin email address. Must be set if $conf['auto_create_ptr'] is 1. Replace "@" with ".". Don't forget the trailing dot!
$conf["default_ttl"] = 86400;
$conf["default_refresh"] = 28800;
$conf["default_retry"] = 7200;
$conf["default_expire"] = 604800;
$conf["default_minimum_ttl"] = 86400;

?>

Vergewissere Dich, dass Du die richtigen Datenbankangaben eingibst! Wenn Du möchtest, dass MyDNSConfig automatisch reverse DNS Einträge erstellt (PTR Einträge) wenn Du einen neuen DNS Eintrag anlegst, dann setze $conf[‚auto_create_ptr‘] auf 1 und bestimme einen Standard Nameserver in $conf[‚default_ns‘] (vergiss nicht den Punkt am Ende!) und eine Administrations-E-Mail Adresse in $conf[‚default_mbox‘] (auch mit einem Punkt am Ende und das @ Zeichen muss mit einem Punkt ersetzt werden!).

Als Nächstes müssen wir die rr und soa Tabelle in der mydns Datenbank ändern und eine neue Tabelle erstellen, die von MyDNSConfig benötigt wird:

mysql -u root -p
Enter password:

Use mydns;

ALTER TABLE `rr` ADD `sys_userid` INT NOT NULL,
ADD `sys_groupid` INT NOT NULL AFTER `sys_userid`,
ADD `sys_perm_user` VARCHAR( 5 ) NOT NULL AFTER `sys_groupid`,
ADD `sys_perm_group` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_user`,
ADD `sys_perm_other` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_group`;

ALTER TABLE `soa` ADD `sys_userid` INT NOT NULL,
ADD `sys_groupid` INT NOT NULL AFTER `sys_userid`,
ADD `sys_perm_user` VARCHAR( 5 ) NOT NULL AFTER `sys_groupid`,
ADD `sys_perm_group` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_user`,
ADD `sys_perm_other` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_group`;

CREATE TABLE `sys_user` (
`userid` int(11) NOT NULL auto_increment,
`sys_userid` int(11) NOT NULL default ‚0‘,
`sys_groupid` int(11) NOT NULL default ‚0‘,
`sys_perm_user` varchar(5) NOT NULL default “,
`sys_perm_group` varchar(5) NOT NULL default “,
`sys_perm_other` varchar(5) NOT NULL default “,
`username` varchar(100) NOT NULL default “,
`passwort` varchar(100) NOT NULL default “,
`modules` varchar(255) NOT NULL default “,
`startmodule` varchar(255) NOT NULL default “,
`app_theme` varchar(100) NOT NULL default ‚default‘,
`typ` varchar(20) NOT NULL default ‚user‘,
`active` tinyint(4) NOT NULL default ‚1‘,
`name` varchar(100) NOT NULL default “,
`vorname` varchar(100) NOT NULL default “,
`unternehmen` varchar(100) NOT NULL default “,
`strasse` varchar(100) NOT NULL default “,
`ort` varchar(100) NOT NULL default “,
`plz` varchar(10) NOT NULL default “,
`land` varchar(50) NOT NULL default “,
`email` varchar(100) NOT NULL default “,
`url` varchar(255) NOT NULL default “,
`telefon` varchar(100) NOT NULL default “,
`fax` varchar(100) NOT NULL default “,
`language` varchar(10) NOT NULL default ‚de‘,
`groups` varchar(255) NOT NULL default “,
`default_group` int(11) NOT NULL default ‚0‘,
PRIMARY KEY (`userid`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `name`, `vorname`, `unternehmen`, `strasse`, `ort`, `plz`, `land`, `email`, `url`, `telefon`, `fax`, `language`, `groups`, `default_group`) VALUES (1, 1, 0, ‚riud‘, ‚riud‘, “, ‚admin‘, ‚21232f297a57a5a743894a0e4a801fc3‘, ‚admin,designer,resellers,sites,dns‘, ‚dns‘, ‚default‘, ‚admin‘, 1, “, ‚Administrator‘, “, “, “, “, “, “, “, “, “, ‚en‘, ‚1,2‘, 1);

quit;

Nun kannst auf MyDNSConfig unter http://ns1.example.com zugreifen. Der Standardbenutzername ist admin, das Passwort ist ebenfalls admin. Ändere bitte das Passwort nachdem Du Dich das erste Mal angemeldet hast unter System -> Edit user.

2.4 Verwende dig um Deine Einträge zu testen

Nachdem Du DNS Einträge erstellt hast, indem Du eines der drei Web Interfaces verwendet hast, kannst Du Deine Einträge mit dig testen. Gehe wir davon aus, Du hast die Zone test.com erstellt. (mit einem Punkt am Ende!) mit dem A Eintrag www. Wenn Du Folgendes ausführst

dig @localhost www.test.com

sollte die Ausgabe wie folgt aussehen:

:~# dig @localhost www.test.com

; <<>> DiG 9.2.4 <<>> @localhost www.test.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12658
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.test.com.                   IN      A

;; ANSWER SECTION:
www.test.com.            86400   IN      A       1.2.3.4

;; Query time: 20 msec
;; SERVER: 1.2.3.4#53(localhost)
;; WHEN: Fri Dec 16 14:14:19 2005
;; MSG SIZE  rcvd: 45

Falls Du im originalen Web Interface oder in MyDNSConfig das automatische Erstellen von PTR Einträgen frei geschaltet hast, dann kannst Du auch den reverse DNS Eintrag überprüfen. Wenn www.test.com auf 1.2.3.4 zeigt, dann sollte

dig @localhost -x 1.2.3.4

etwas ähnliches wie das anzeigen:

~# dig @localhost -x 1.2.3.4

; <<>> DiG 9.2.4 <<>> @localhost -x 1.2.3.4
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46572
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;4.3.2.1.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
4.3.2.1.in-addr.arpa. 86400 IN    PTR     www.test.com.

;; Query time: 15 msec
;; SERVER: 1.2.3.4#53(localhost)
;; WHEN: Fri Dec 16 14:21:05 2005
;; MSG SIZE  rcvd: 69

3 Installation von dnscache

Was man unbedingt über MyDNS wissen sollte, ist, dass es keine externen (recursive) DNS lookups unterstützt, d.h. MyDNS wird nur Antworten für die Domains liefern, für die es auch autoritativ ist! Wenn Du andere Domains wie z.B. www.google.com auflösen möchtest, wirst Du einen DNS Auflöser wie dnscache auf Deinem System installieren müssen. Er muss auf einer separaten IP Adresse installiert werden. Wenn Du erfahren möchtest, warum der DNS Server (MyDNS) und der DNS Auflöser (dnscache) separiert werden, sieh Dir Folgendes an: 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, sodass Dein Arbeitsplatz Bezeichnungen wie www.google.com auflösen kann. Die Nameserver IP Adressen sind eigentlich IP Adressen von DNS Auflösern wie dnscache. Wenn Du Deinen Kunden Deine eigenen Nameserver IP Adressen geben möchtest, musst Du einen DNS Auflöser einrichten und Deinen Kunden die IP Adressen dieses DNS Auflösers geben.

Wenn Du nur eine IP Adresse auf Deinem Server hast, könntest Du sagen, „Ok, ich binde MyDNS an die IP 127.0.0.1 und dnscache an meine öffentliche IP Adresse um dieses Problem zu umgehen.“ Hier erfährst Du, warum dies eine schlechte Idee ist: http://www.fefe.de/djbdns/#sameip

Wenn Du keinen DNS Auflöser auf Deinem System einrichten möchtest, kannst Du diesen Abschnitt überspringen.

Ok, nehmen wir mal an 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 und dnscache auf 1.2.3.5 hört.

Führe folgende 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 System Startup Links:

Auf Debian:

update-rc.d dnsctl defaults

Auf Fedora und RedHat:

chkconfig –levels 235 dnsctl on

Dann erstellen 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
Now dnscache is listening on 1.2.3.5. Nun müssen wir MyDNS mitteilen, dass es nur auf 1.2.3.4 hören soll. Dazu müssen wir die listen Einstellung in /etc/mydns.conf ändern:

listen = 1.2.3.4

und starten MyDNS neu:

/etc/init.d/mydns restart

Wenn Du versuchst Domainnamen auf 1.2.3.5 aufzulösen, solltest Du eine Antwort erhalten. Um z.B. www.google.com aufzulösen, kannst Du dies ausführen

dig @1.2.3.5 www.google.com

Du solltest gleichermaßen in der Lage sein, Domains, die von MyDNS (z.B. www.somedomain.com) gehandhabt werden, aufzulösen. Aber dieses Mal diggst Du 1.2.3.4:

dig @1.2.3.4 www.somedomain.com

4 Zonen und Einträge vom ersten Server auf den zweiten Server DNS übertragen

Wenn beide Server, der erste und der zweite DNS Server MyDNS verwenden, hast Du drei Möglichkeiten, die Daten vom ersten Server auf den zweiten DNS Server zu übertragen:

  1. Der altmodische Weg: Du kannst Zonentransfers verwenden. Dazu musst Du allow-axfr = no zu allow-axfr = yes in /etc/mydns.conf ändern und MyDNS auf dem ersten DNS Server neu starten. Weiterhin musst Du die IP Adresse des zweiten DNS Servers in der xfer Spalte der soa Tabelle für die Zonen festlegen, die übertragen werden sollen. Stelle sicher, dass die Firewall auf dem ersten DNS Server nicht Port 53 (TCP und UDP) blockiert.
  2. Der erste und zweite DNS nutzen die gleiche MySQL Datenbank. Dies hat ein Manko mit folgender Lösung: Wenn der MySQL Server ausfällt, dann fallen beide Server, der erste und der zweite DNS Server zur gleichen Zeit aus ..
  3. Die bevorzugte Lösung: Verwende die MySQL Datenbankspiegelung um Daten vom ersten Server auf den zweiten zu übertragen. Stelle sicher, dass die Firewall auf dem ersten DNS nicht den MySQL Port (normalerweise 3306) blockiert.

Ich empfehle die MySQL Datenbankspiegelung. Ich habe eine sehr genaue Anleitung darüber, wie man dies einrichtet, verfasst: https://www.howtoforge.com/mysql_database_replication also muß ich dieses Thema hier nicht noch einmal abhandeln.

Links


Falls Du andere Konfigurationen kennst (für Debian, RedHat, SuSE oder Mandrake), die mit dem 42go ISP-Manager funktionieren und Du diese Konfiguration hier veröffentlichen möchtest, dann sende einfach Deinen Installationsleitfaden an: <falko [dot] timme [at] projektfarm [dot] de>.

Das könnte dich auch interessieren …