Page 1 of 1

Bind Zonentransfer

Posted: 2006-09-26 05:42
by kos
Hallo,

wir sind 3 Personen die je 1 Server haben. Bisher hat eigentlich jeder seinen eigenen Nameserver genutzt und das ausfallrisiko selbst getragen. Wir möchten uns nun zusammenschließen und somit 3 NS miteinander verbinden.
Die verwendete Software ist Bind.

Ich stelle mir nun das Vorgehen so vor, das jeder seine Domains auf dem eigenen Server als Master anlegt und die Domains der anderen automatisch als Slave übertragen werden.
Mir ist bekannt wie ich eine Domain als Slave anlege und auch wie ich somit die Zone bzw. die Records rüber ziehe.

Code: Select all

zone "abc.de" in {
type slave;
file "/var/cache/bind/abc.de.db"
masters { 123.123.123.123; };
};
Was mich nun an der Sache stört ist, das immer die Domains bzw. die Grundzonen auf den jeweils anderen Servern angelegt werden müssen damit die Zonen transferiert werden können.
Meine Frage ist es nun ob es Praxislösungen gibt, um die Zonenfiles auf allen Master/Slaves abzugleichen ohne selbst Hand anzulegen. Mit ausnahme des Anlegens der eigenen Domain als Master.

Am Interessantesten stelle ich mir das so vor:
Person 1 legt auf seinem Server A die Domain xyz.de an. Server A sendet eine art Info an Server B und C die dann ebenfalls xyz.de anlegen, jedoch als Slave und gleichzeitig entsprechend den Zonentransfer durchführen.
Das selbe könnte nun auch Person 2 oder 3 an seinem Server machen.

Ich hoffe mir kann jemand dazu helfen. Ich habe nicht wirklich Lust selbst eine Lösung zu striken.

Vorab schonmal vielen Dank!

Re: Bind Zonentransfer

Posted: 2006-09-26 07:55
by nyxus
genau nach sowas habe ich vor ein paar Wochen auch gesucht und folgendes gefunden:

Code: Select all

#!/bin/bash

master_server="xxx.xxx.xxx.xxx"
named_conf_file="/etc/bind/named.conf"
ssh_command="ssh $master_server -l named_transfer"
named_slave_file="/etc/named/named.slaves.conf"
zones_file="/etc/named/slave.zones"
zones_tmp_file="/tmp/zones.tmp"

$ssh_command cat $named_conf_file | awk '/dmn [([^{].*)] cfg entry BEGIN/{ print $3}' | cut -d[ -f2 | cut -d] -f1 | sort > $zones_tmp_file

touch $zones_file
cmp $zones_file $zones_tmp_file >/dev/null
if [ $? != 0 ]; then
        echo "Rebuilding zones"
        awk '{ print "zone ""$1"" IN {nttype slave;ntfile "slave."$1"";ntmasters {ntt$master_server;nt};ntallow-query { any; };n};n"}' $zones_tmp_file | sed s/$master_server/$master_server/g > $named_slave_file
        /etc/init.d/bind9 reload
fi
mv $zones_tmp_file $zones_file
Eingesetzt habe ich es noch nicht und blöderweise habe ich mir auch nicht die Quelle notiert. Vielleicht hilft das ja trotzdem. Kann per Cron auf dem Slave aufgerufen werden und schreibt eine Datei die in der Config eingebunden wird.

Ich habe es nicht genutzt weil ich keine Poll-Lösung haben wollte, sondern eine, die die Änderung zum zweiten Server pusht. Müßte sich aber umstellen lassen können.

Re: Bind Zonentransfer

Posted: 2006-09-26 07:55
by captaincrunch
Was mich nun an der Sache stört ist, das immer die Domains bzw. die Grundzonen auf den jeweils anderen Servern angelegt werden müssen damit die Zonen transferiert werden können.
Meine Frage ist es nun ob es Praxislösungen gibt, um die Zonenfiles auf allen Master/Slaves abzugleichen ohne selbst Hand anzulegen. Mit ausnahme des Anlegens der eigenen Domain als Master.
Im Allgemeinen läuft der Vorgang vollständig automatisiert ab. Wenn nicht, würde ich eher einen Fehler an deiner Config, bzw. an den Berechtigungen deines Filesystems (schau dir mal die Rechte des übergeordneten Ordners an) suchen.

Re: Bind Zonentransfer

Posted: 2006-09-26 08:03
by nyxus
CaptainCrunch wrote:Im Allgemeinen läuft der Vorgang vollständig automatisiert ab.
Du meinst nicht nur den Zonentransfer, sondern auch das Ändern der Konfigdatei auf dem Slave?

Re: Bind Zonentransfer

Posted: 2006-09-26 08:20
by captaincrunch
Ich bezog mich nur auf den eigentlichen Zonetransfer.

Re: Bind Zonentransfer

Posted: 2006-09-26 08:22
by thorsten
Die Einrichtung der zonen-Definition in der named.conf oder named.local.conf muß durch $admin geschehen.Der Abgleich der zonen-Informationen geschieht automatisch, denn der master informiert die slaves, dass es ein Update gibt.

Überprüfen ob das funktioniert kann man das folgendermaßen:

1. man geht nach /etc/named
2. man inkrementiert die serial in einer Zonendatei ( db.domain.tld )
3. man läßt den bind die Zonen neu laden ( /etc/init.d/bind9 reload)
4. man schaut ins logfile (/var/log/daemon.log):

Code: Select all

Sep 26 08:17:33 MASTER named[1388]: loading configuration from '/etc/bind/named.conf'
Sep 26 08:17:33 MASTER named[1388]: zone DOMAINNAME.TLD/IN: loaded serial 2006091302
Sep 26 08:17:33 MASTER named[1388]: zone DOMAINNAME.TLD/IN: sending notifies (serial 2006091302)
Sep 26 08:17:33 MASTER named[1388]: client IP_DES_ERSTEN_SLAVES #32852: transfer of 'DOMAIN.TLD/IN': AXFR-style IXFR started
Sep 26 08:17:33 MASTER named[1388]: client IP_DES_ZWEITEN_SLAVES #40700: transfer of 'DOMAIN.TLD/IN': AXFR-style IXFR started
Das initiale Anlegen der /etc/named/db.DOMAIN.TLD Datei auf dem slave geschieht automatisch.
Aber man muß dem slave in der named.conf aber immer selbst mitteilen, dass er für eine neue Domain zuständig ist.

Das o.g. scheint Script ist für das Massenhosting durchaus interessant.
EDIT:
Quelle des o.g. Scripts: http://vhcs.net/new/modules/newbb/viewt ... 79&forum=3

Re: Bind Zonentransfer

Posted: 2006-09-26 12:24
by kos
Thorsten wrote:Das initiale Anlegen der /etc/named/db.DOMAIN.TLD Datei auf dem slave geschieht automatisch.
Aber man muß dem slave in der named.conf aber immer selbst mitteilen, dass er für eine neue Domain zuständig ist.
Genau so ist mit das auch bekannt. Ich habe ja testweise mal (da ich Zugriff auf den 2. Server habe) eine Domain der named.local.conf hinugefügt was auch funktioniert hat. Das nicht zusätzlich eine Zonendatei wie /var/cache/bind/abc.de.db erstellt werden musst weiß ich auch, nur der Pfad in der named.conf sollte drin stehen.

Edit:
Ich hab jetzt mal das Script von oben probiert. Theoretisch wäre das nicht schlecht, aber abgehen davon das mein Server mit publickey abgesichert ist, habe ich auch nicht vor Zugangsdaten an die Personen weiterzugeben. Immerhin ist es ein Sicherheitsrisiko ein SSH-Zugang einzurichten, auch wenn dieser eine eigene Gruppe hat. Die einzige mir bekannte möglichkeit wäre nur noch den User zu "Jailen" oder chrooten oder wie auch immer und ein symlink auf die named.conf zu legen.

Prinzipiell wäre mir aber eine Lösung Nyxus gesagt hat - die Zonen zu senden - auch lieber.
Dahingehend hab ich eben schon überlegt ein eigene Serveranwendung für diesen Zweck zu schreiben. (da bin ich aber nicht so gut darin und würde dies dann auch in php machen)

Re: Bind Zonentransfer

Posted: 2006-09-26 14:35
by nyxus
noch ein Vorschlag: Auf dem Master die zones.conf (oder wie auch immer die bei euch heißt) ins Webverzeichnis kopieren (evtl. vorher von Ballast befreien), vom slave per wget regelmäßig holen lassen und automatisch wie in dem obigen Script umschreiben. Das sollte sogar ohne Verschlüsselung gehen, da in dieser Datei keine wirklich sensitiven Informationen enthalten sind (für *meinen* Einsatz wäre das jedenfalls nicht sensitiv ;-) ).
Das spart schonmal den SSH-Zugang.

Re: Bind Zonentransfer

Posted: 2006-09-26 14:46
by nyxus
und es geht weiter ...
man muß nichtmal pollen. Wenn ich auf meinem Server1 eine neue Domain test1234.de anlege und ein "/etc/init.d/bind9 reload test1234.de" mache, dann kommt auf server2 im syslog

Code: Select all

Sep 26 14:42:04 urania named[6340]: received notify for zone 'test1234.de': not authoritative
Darauf könnte man einen logcheck laufen lassen, der dann vom server1 die Datei aus dem Webverzeichnis liest und die lokale Konfiguration ergänzt.
Oder gibt es dabei Nachteile, die ich gerade übersehe?

Re: Bind Zonentransfer

Posted: 2006-09-26 15:30
by kos
Hm also die Idee mit dem wget hatte ich auch schon gehabt.
... ich hab grad mal die Logs durchgeschaut und ich finde im Server2 keineb Eintrag wie bei dir wenn ich auf Server1 eine Domain anlege.

Vielleicht doch falsch Konfiguriert? Wie sieht das denn bei dir aus?
Edit: Ähm ... d.h. der Slaveserver (Server2) ist ausser als

Code: Select all

allow-transfer { xxx.xxx.xxx.xxx; };
im MasterServer (Server1) nicht eingetragen. Fehlt da noch was?

Re: Bind Zonentransfer

Posted: 2006-09-26 15:32
by nyxus
KoS wrote:ich hab grad mal die Logs durchgeschaut und ich finde im Server2 keineb Eintrag wie bei dir wenn ich auf Server1 eine Domain anlege.
Ein reload der Domain hast Du aber auch gemacht?

Re: Bind Zonentransfer

Posted: 2006-09-26 15:40
by kos
Ja, den reload hab ich so gemacht wie du gesagt hast. Ich habs auch mit "rndc reload test1234.de" gemacht.
Bei mir sind die ganzen Logs zu bind/named im daemon.log. Auf dem Slave tut sich da garnichts, nur auf dem Master.

Re: Bind Zonentransfer

Posted: 2006-10-06 09:00
by whyte
Hallo,

vielleicht hilft dir das etwas:

Einrichten des pDNS:
http://www.server-wissen.de/linux/hilfe ... chten.html

Einrichten des sDNS:
http://www.server-wissen.de/linux/hilfe ... chten.html

Und falls du weiterhin den Fehler bekommst, prüfe mal die Zonendatei auf dem pDNS. Ich hatte mich auch mal dämlich gesucht, der Fehler lag in einer nicht komformen Zonendatei, die der Slave dann nicht annahm, bzw der Master auch nicht akzeptierte.

Gruß
Marco

Re: Bind Zonentransfer

Posted: 2006-10-06 14:25
by kos
Danke für die zwei Links. Werd ich mal mal vereinnahmen.
Aber was das Problem betraf hatte sich schon erledigt, hatte nur leider vergessen zu posten.

Bei mir hat folgendes gefehlt in der named.conf:

Code: Select all

notify: yes;
also-notify { xxx.xxx.xxx.xxx; };