Betreiben eines MySQL-basierten DNS Servers: MyDNS
Version 1.0 Author: Falko Timme Last edited: 12/15/2005
Diese Anleitung veranschaulicht, wie man MyDNS, einen DNS Server, der eine MySQL Datenbank als Backend anstelle von Konfigurationsdateien wie Bind oder djbdns verwendet, installiert und konfiguriert. Das hat den Vorteil, dass Du web-basierte Frontends benutzen kannst um Deine DNS Einträge zu verwalten. Du könntest sogar Dein eigenes Frontend schreiben, z.B. mit PHP, um mit der MyDNS Datenbank zu interagieren. MyDNS liest einfach die Einträge der Datenbank und muss nicht neu gestartet/geladen werden wenn sich DNS Einträge ändern oder Zonen erstellt/bearbeitet/gelöscht werden! Dies ist ein großer Vorteil.
Weiterhin werde ich zeigen, wie man einen zweiten DNS Server einrichtet. Jedoch werde ich keine normalen Zonentransfers verwenden um die Einträge vom ersten auf den zweiten DNS Server zu bekommen. Stattdessen werde ich die MySQL Datenbankspiegelung (Replikation) verwenden. Ich werde einfach die Daten des ersten Servers auf den zweiten Server replizieren.
Es gibt mehrere Web Frontends für MyDNS. Natürlich kannst Du phpMyAdmin zur MyDNS Administration verwenden, oder auch das Frontend, das mit MyDNS (welches nicht für Anfänger geeignet ist, da die Feldbeschreibungen fehlen) kommt, oder aber MyDNSConfig, ein Tool, das von mir selbst geschrieben worden ist. Ich werde zeigen, wie man jedes einzelne Tool installiert.
Alles in allem macht MyDNS auf mich einen sehr guten Eindruck und ich denke, dass die Zukunft Diensten gehört, die eine Datenbank als Backend anstelle von Konfigurationsdateien verwenden.
Für dieses Setup habe ich ein Debian Sarge System verwendet. Jedoch sollten die meisten hier beschriebenen Schritte auch für andere Distributionen gelten, wie Fedore, SuSE, Mandriva, etc.
An dieser Stelle möchte ich darauf hinweisen, dass dies nicht der einzige Weg ist ein solches System einzurichten. Es gibt viele Wege dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Installation von MySQL und MyDNS

Vergewissere Dich zunächst, dass Du eine funktionierende Basisinstallation von Debian hast, wie auf http://www.howtoforge.com/perfect_setup_debian_sarge und http://www.howtoforge.com/perfect_setup_debian_sarge_p2 beschrieben wird (bitte wende Dich an das entsprechende "Perfect Setup" Dokument auf HowtoForge wenn Du eine andere Distribution verwendest).
Installiere dann MySQL:
apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin
Dir werden ein paar Fragen gestellt:
Enable suExec? <-- Yes
Which web server would you like to reconfigure automatically? <-- apache, apache2
Do you want me to restart apache now? <-- Yes

Richte ein root MySQL Passwort wie folgt ein:
mysqladmin -u root password yourrootsqlpassword
Die MyDNS Installation ist einfach. Folge 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

Nun müssen wir die MyDNS Datenbank (mit der Bezeichnung mydns) und einen MyDNS Dantenbankbenutzer (auch mit der Bezeichnung mydns, mit mydns_password als Passwort) erstellen:
mysql -u root -p
Enter password:

Nun erstellen wir in der MySQL Kommandozeile 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 in der normalen Kommandozeile, erstellen wir die Tabellen in der mydns Datenbank:
mydns --create-tables | mysql -u root -p mydns
Enter password:

Falls Du Fehler wie diese siehst:
mydns[14287]: error loading gid for group `nobody'
mydns[14287]: using gid 65534 from user `nobody'

mach Dir keine Sorgen, die kannst Du ignorieren.
Als Nächstes fügen wir zwei weitere Spalten der soa Tabelle der mydns Datenbank hinzu:
mysql -u root -p
Enter password:
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 kannst Du später einfach Zonen aktivieren/deaktivieren und die xfer Spalte kann für Zonentransfers verwendet werden (die wir nicht brauchen, da wir die MySQL Datenbankspiegelung verwenden werden um die Daten auf den zweiten DNS Server zu bekommen, ich erwähne es nur der Vollständigkeit halber) (wenn Du Zonentransfers anstelle von der Datenbankspiegelung verwenden möchtest, dann sollte die xfer Spalte eine oder mehrere IP Adressen beinhalten, durch Kommas getrennt. Diese IP Adressen dürfen die Zone transferieren.).
Nun 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 wie folgt aussieht:
##
## /etc/mydns.conf ## Fri Oct 21 16:36:32 2005 ## For more information, see mydns.conf(5). ## # DATABASE INFORMATION db-host = localhost # SQL server hostname db-user = mydns # SQL server username db-password = mydns_password # SQL server password database = mydns # MyDNS database name # GENERAL OPTIONS user = nobody # Run with the permissions of this user group = nogroup # Run with the permissions of this group listen = * # Listen on these addresses ('*' for all) # CACHE OPTIONS zone-cache-size = 1024 # Maximum number of elements stored in the zone cache zone-cache-expire = 60 # Number of seconds after which cached zones expires reply-cache-size = 1024 # Maximum number of elements stored in the reply cache reply-cache-expire = 30 # Number of seconds after which cached replies expire # ESOTERICA log = LOG_DAEMON # Facility to use for program output (LOG_*/stdout/stderr) pidfile = /var/run/mydns.pid # Path to PID file timeout = 120 # Number of seconds after which queries time out multicpu = 1 # Number of CPUs installed on your system allow-axfr = no # Should AXFR be enabled? allow-tcp = yes # Should TCP be enabled? ignore-minimum = no # Ignore minimum TTL for zone? soa-table = soa # Name of table containing SOA records rr-table = rr # Name of table containing RR data
Vergewissere Dich, dass Du die richtigen Datenbankangaben eingibst. Pass auch bei der Gruppe auf. Auf Debian ist die Gruppe von nobody die Gruppe nogroup, die vom Standardwert in /etc/mydns.conf abweicht (also nobody), also stelle sicher, dass Du dies änderst! Stelle allow-tcp auf yes.
Nun erstellen wir das MyDNS Init Skript /etc/init.d/mydns:
#! /bin/sh
# # mydns Start the MyDNS server # # Author: Falko Timme <ft@falkotimme.com>. # 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 # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0 case "$1" in start) echo -n "Starting $DESC: $NAME" $DAEMON --background echo "." ;; stop) echo "Stopping $DESC: $NAME." kill -9 `pidof $NAME` &> /dev/null ;; restart) echo "Restarting $DESC: $NAME." $0 stop && sleep 1 $0 start ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0
Dann veranlassen wir, dass es ausführbar wird und starten MyDNS:
chmod 755 /etc/init.d/mydns
/etc/init.d/mydns start

Wenn Du möchtest, dass MyDNS beim Hochfahren automatisch gestartet wird, musst Du die notwendigen System Bootup Links erstellen. Auf Debian führst Du dies wie folgt aus:
update-rc.d mydns defaults 21 22
Auf Fedora oder RedHat würdest Du dies ausführen:
chkconfig --levels 235 mydns on
2 Installation eines Web Interfaces für MyDNS
In den folgenden Schritten gehe ich davon aus, dass Du Debian Sarge verwendest; der Standard Dokumenten-Root von Debian Apache ist /var/www, also werde ich die Web Interfaces hier installieren. Weiterhin gehe ich davon aus, dass der Hostname ns1.example.com ist.

2.1 phpMyAdmin
phpMyAdmin wurde zu Anfang dieser Anleitung installiert (apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin), Du also unter http://ns1.example.com/phpmyadmin darauf zugreifen können. Wähle dann die Datenbank mydns und Du solltest die Tabellen rr und soa sehen können. Sieh Dir Folgendes an, um eine Erklärung für die Struktur/Felder etc. der Datenbank zu erhalten: http://mydns.bboy.net/doc/html/mydns_8.html#SEC8
2.2 Das originale MyDNS Web Interface
Um das originale MyDNS Web Interface zu installieren (geht mit dem MyDNS Quelltext einher, der immer noch im /tmp Verzeichnis sein sollte), führe dies aus:
cp /tmp/mydns-1.0.0/contrib/admin.php /var/www
Bearbeite dann /var/www/admin.php und konfiguriere die Variabeln im ersten Teil dieses Skriptes, z.B. wie folgt:
/*****************************************************************************
CONFIGURABLE OPTIONS *****************************************************************************/ /* ** Set the following four variables to the hostname of your SQL server, the ** username and password used to access that server, and the name of the ** database where your MyDNS data resides. */ $dbhost = "localhost"; $dbuser = "mydns"; $dbpass = "mydns_password"; $dbname = "mydns"; /* ** This script uses MySQL by default. To use PostgreSQL instead, set ** '$use_pgsql' to '1'. */ $use_pgsql = 0; /* ** The following two variables tell this script the name of your SOA ** table and the name of your RR table. */ $soa_table_name = "soa"; $rr_table_name = "rr"; /* ** The following two values configure the number of records shown per page ** in the zone browser and the resource record editor, respectively. */ $zone_group_size = 25; $rr_group_size = 20; /* ** This script can automatically update the serial number for a zone ** whenever a client modifies any record in that zone. ** Setting '$auto_update_serial' to '1' will enable this option. */ $auto_update_serial = 1; /* ** This script can automatically update PTR records when you modify, ** add, or delete A records. To enable this functionality, set ** '$auto_update_ptr' to '1'. If you enable this, be sure to fill in ** the values for '$default_ns' and '$default_mbox', below, so that ** new SOA records will have the correct information. */ $auto_update_ptr = 1; /* ** If this option is nonzero, this script will not complain if the ** TTL for a record is set below the zone minimum. ** ** Note that if $ttl_min below is nonzero, that value will still be ** checked. */ $ignore_minimum_ttl = 1; /* ** The following values are used by this script to enforce minimum values ** for SOA and RR records. The script will prevent clients from entering ** values lower than these numbers. */ $ttl_min = 300; $refresh_min = 300; $retry_min = 300; $expire_min = 86400; /* ** The following two variables specify the default nameserver for new ** SOA records, and the default administrator mailbox for new SOA records. ** These will be filled in automatically whenever a new zone is created. */ $default_ns = "ns1.example.com."; $default_mbox = "admin.example.com."; /* ** The following array specifies default records for new SOA records. ** These get inserted automatically whenever a SOA is inserted. ** The format of each record is (name, type, aux, data). */ $default_records = array( array("", "NS", 0, "ns1.example.com."), /* array("", "MX", 10, "mail.example.com.") */ ); /* ** The following five values will be used as default values whenever new ** zones are created. */ $default_ttl = 86400; $default_refresh = 28800; $default_retry = 7200; $default_expire = 604800; $default_minimum_ttl = 86400; /* ** The remainder of these variables enable cosmetic changes. */ $fontsize = 12; /* Default font size (pixels) */ $font_color = "#663300"; /* Font color */ $page_bgcolor = "white"; /* Page background color */ $help_bgcolor = "#FFFFCC"; /* Main screen help box background color */ $soa_bgcolor = "#FFFF99"; /* SOA editor background color */ $list_bgcolor_1 = "#FFFFCC"; /* List items #1 background */ $list_bgcolor_2 = "#FFFFAA"; /* List items #2 background */ $query_bgcolor = "#FFFFCC"; /* Search query input background color */ $query_fgcolor = "black"; /* Search query input font color */ $input_bgcolor = "white"; /* Text input box background color */ $input_fgcolor = "black"; /* Text input box font color */ /**** End of configurable options *******************************************/
Pass auf, dass Du die richtigen Datenbanangaben eingibst. Zusätzlich dazu setze ich $auto_update_serial und $auto_update_ptr auf 1 und lege Werte in $default_ns und $default_mbox fest, sodass Seriennummern im Falle von Änderungen automatisch inkrementiert werden und PTR Einträge auch automatisch erstellt werden. Aber selbstverständlich ist es Dir überlassen, ob Du dieses Verhalten möchtest.
Nun kannst Du auf das Web Interface unter http://ns1.example.com/admin.php zugreifen.

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: http://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>.