PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BIND9 - Update der A-Records will nicht



TheGrudge
14.01.08, 14:16
Hi,

ich habe hier ein Pythonprogramm geschrieben, das die A-Records bestimmter Server im DNS updated. Das hat die ganze Zeoigut funktioniert, aber nun wurden alle DNS-Server so eingestellt, das nur noch andere DNS-Server ein Update machen dürfen.

Also habe ich auf meinem Linuxserver ein BIND installiert, das ich nun updaten möchte und dieser dann die Hauptserver updaten soll.

Meine Konfig sieht erstmal so aus:

//
// /etc/named.conf
//

options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
};

include "/etc/rndc.key";
controls {
inet 127.0.0.1 port 953
allow { localhost; } keys { "rndc-key"; };
};

zone "." {
type hint;
file "root.hint";
};

zone "0.0.127.in-addr.arpa" {
type master;
file "127.0.0.zone";
};

zone "DOMAIN" {
type slave;
file "DOMAIN.zone";
masters { 1.2.3.4; };
};

Bis jetzt agiert mein BIND als Slave für DOMAIN, holt auch brav die Zonefiles ab und ich kann auch nach Servern pingen. Jedoch funktioniert mein Update nicht mehr. Ich würde gerne diesen Slave updaten und das an den Masterserver schicken.

Das Pythonprogramm sieht im Grunde so aus: http://pastebin.com/m30db318e
Also nix wildes und vorher hat es auch funktioniert, ich denke mal das der Fehler bei BIND liegt.
Wie muss ich den Slave konfigurieren, so das localhost (also der BIND-Server selber) mittels dieses Programmes die Records updaten kann.

heatwalker
14.01.08, 14:31
Wenn ich dich jetzt richtig verstanden habe, möchtest du das dein
Slave die master updatet?

Das funktioniert nicht. Der Slave "holt" sich die Konfigurationen von den Masterservern.

Du müsstest deinen Server als Master aufsetzen und die Server, welche upgedatet werden sollen, als Slave einsetzen.

TheGrudge
14.01.08, 14:38
Hmm ok das ist wohl nicht so erwünscht, ich muss Slave bleiben. Aber das kann man auch anders lösen. Mein Hauptproblem ist im Moment das ich meinen BIND nicht updaten kann, ist das nicht möglich als Slave?
Möchte eigentlich es erst einmal hinbekommen, den BIND mit dem Pythonprogramm upzudaten, aber im Moment ohne Erfolg. Hatte schon als Optionen 'allow-update', 'allow-transfer' usw... Muss ich da noch was beachten?

heatwalker
14.01.08, 14:42
Grundsätzlich spricht eigentlich nichts gegen den Tausch von master und slave.

Dein Server muss ja nirgendwo erscheinen. Der wäre dann ein sogenannter
Hidden Primary.

Er ist zwar zuständig, aber nicht sichtbar. Weil für die abfragenden sind die alten Server die zuständigen.

Eine andere Möglichkeit ist mir nicht bekannt.

Die Frage mit deinem Bind updaten, habe ich jetzt nicht ganz verstanden. Geht es da um etwas anderes als in deiner ersten Fragestellung?

TheGrudge
14.01.08, 15:03
Ich möchte wie gesagt mit diesem Pythonprogramm (das da oben ist nur ein Ausschnitt der Funktion) bestimmte Einträge neu anlegen oder updaten, falls vorhanden. Da ich das nicht mehr auf den "alten" Servern darf, kam ich auf die Idee, einen eigenen DNS-Server aufzusetzen, damit dieser dann die alten um diese Einträge updaten kann.
Nur leider kann ich auf meinem lokalen DNS-Server diese Einträge nicht mehr updaten, so wie es bei den alten möglich war, sprich diese Pythonfunktion läuft zwar durch, jedoch passiert einfach nichts auf dem lokalen DNS-Server. Ich bekomme auch keine Fehlermeldungen, weder von dem Pythonmodul noch von BIND direkt.
Deswegen denke ich, das der Slave vielleicht falsch konfiguriert ist.
Er sollte auf Anfragen von sich (localhost) reagieren können und A-Records updaten, aber das geht aus irgend einem Grund nicht.

heatwalker
14.01.08, 15:23
Irgendwie ist es immer noch undurchsichtig. Ich wiederhhole mal.


Du hast ein Phytonprogramm das deinen "localen, internen" DNS Server updaten soll, was aber nicht funktioniert.


Da ich nicht weiss was dein Program genau macht und worauf es zugreift kann ich Dir da nicht helfen.

Schau mal in Systemlogs.


Wenn das Phytonprogramm deinen Server aktualisiert hat, soll dieser die anderen Server updaten, richtig?

Das geht NUR als Primary (Master). Ein Slave horcht auf andere Server, informiert diese aber nicht.

TheGrudge
14.01.08, 15:39
Also nochmal :)

Im Moment ist es mir gar nicht mehr so wichtig, das der lokale BIND andere DNS-Server updated, ich möchte eigentlich viel lieber, dass ich das Zonefile updaten kann, welches ich vorher vom Master bekommen habe (in der obigen Konfiguration die Zone DOMAIN). Dort sind Adressen enthalten, die auf Grund der Telekom-Zwangstrennung immer eine andere IP bekommen. Diese lese ich per SNMP aus und will die A-Records updaten. Es hat die ganze Zeit funktioniert und ich habe nichts an dem Code geändert, deswegen denke ich das meine BIND-Konfiguration falsch ist (der Abschnitt mit der Slave DOMAIN).
Muss ich dort vielleicht noch Optionen setzen?
Oder kann ich diese Zone nicht lokal updaten, da ich sie von einem Master beziehe?

heatwalker
14.01.08, 15:59
Entweder habe ich ein Brett vor dem Kopf oder wir kommunizieren komplett
aneinander vorbei. :ugly: :rolleyes:

Kannst du das was du willst mal einfach stichpunktartig in tabellarischer Form
aufschreiben? Vielleicht wird es mir dann klarer.

Ich verstehe einfach nicht wen oder was du updaten willst.

Normalerweise richtest du ein SLAVE dazu ein, damit er sich bei den oder dem Primaryserver(n) die Zonefiles abholt.

Sobald das erledigt ist, sollte der Server aktuell sein.

wabbelwin
14.01.08, 16:04
Ich weiß es zwar jetzt nicht auswendig, aber ich meine mich an sowas wie
allow (update) erinnern zu können, was ich in den Bereich der Masterzone
mal reingebastelt habe. Das habe ich gebraucht, damit mein DHCP meinen
DNS updaten konnte. Weiter gab es auch immer ein Problem mit den Verzeichnis-
und Dateirechten auf die das user "named" keine Schreibrechte hatte.
Weiter könnte es noch ein Problem geben, wenn du allow... mit dem Key
schützt, muss dein update-Prozess natürlich auch diesen Key verwenden.
Greetz
:)

TheGrudge
14.01.08, 16:08
OK also noch einmal, vergessen wir einfach mal den Master/Slave Kram. Im Moment möchte ich mir einfach nur einen BIND auf einem Server aufsetzen, auf dem auch dieses Pythonprogramm läuft.

Nennen wir den Server, wo BIND und das Pythonprogramm läuft, mal Server1.


- Server1: Lese SNMP-Daten aus, hole externe IP-Adressen
- Trage diese IP-Adressen in den auf Server1 laufenden BIND ein
(- optional erst einmal: Update auch alle anderen DNS-Server im Netz)

Das updaten / eintragen dieser Werte funktioniert nun nicht, warum auch immer. Ich bekomme keine Fehler, aber das Zonefile ist nicht aktualisiert. Nun vermute ich einfach mal, da ich noch nie BIND oder generell DNS aufgesetzt habe, das dort ein Konfigurationsproblem vorliegt. Denn das Eintragen hat bei den alten DNS-Servern funktioniert, nur bei meinem selbst aufgesetzten einfach nicht.

heatwalker
14.01.08, 16:17
Als welcher Benutzer führst du dein Programm aus?

Welche Dateien (Pfadangabe) beschreibt dein Programm?
Stimmen bei den Dateien die Berechtigungen?
Läuft dein Nameserver in einer chroot umgebung?

Was sagen deine Systemlogs?

/var/log/messages
/var/log/warn

Ich vermute, aufgrund deiner Signatur, das du ArchLinux einsetzt.
Von daher weiss ich nicht wie deine Logdateien heissen. Können auch anders benannt sein.

Ansonsten wäre schon wichtig welche Distri du einsetzt.

Im augenblick scheint es ja erst einmal ein kommunikationsproblem zwischen deinem Script und dem Nameserver zu sein.

Ohne genau zu wissen, was dieses Script genau macht stochern wir hier einfach im dunkeln.

Zusätzlich kannst du Dir (falls vorhanden) unter

/usr/share/doc oder /usr/share/doc/packages
mal die Beispielconfigurationen zum bind anschauen.

TheGrudge
14.01.08, 21:56
Ok, fangen wir mal ganz von vorne an :)

Ich setze als Distribution Archlinux ein, alle Pakete sind auf dem neuesten Stand.

BIND: 9.4.2-1
dnsutils: 9.4.2
Python: 2.5.1-3
Kernel: 2.6.23.12

Falls sonstige Paketangaben wichtig sind, kann ich diese gerne nachliefern.

Ich habe BIND nach folgender Anleitung http://wiki.archlinux.org/index.php/Bind installiert und in einem CHROOT aufgesetzt.

Verzeichnisstruktur:
/chroot/named # Der root des BIND
/chroot/named/etc
/chroot/named/var/
/chroot/named/var/log
/chroot/named/var/run
/chroot/named/var/named # hier liegen die zonefiles

Die Konfigurationsdatei sieht nun folgendermaßen aus:


//
// /etc/named.conf
//

options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
};

include "/etc/rndc.key";
controls {
inet 127.0.0.1 port 953
allow { localhost; } keys { "rndc-key"; };
};

zone "." {
type hint;
file "root.hint";
};

zone "0.0.127.in-addr.arpa" {
type master;
file "127.0.0.zone";
};

zone "MEINE_DOMAIN" {
type slave;
file "MEINE_DOMAIN.zone";
masters { 10.49.0.2; };
};

logging {
channel xfer-log {
file "/var/log/named.log";
print-category yes;
print-severity yes;
print-time yes;
severity info;
};
category xfer-in { xfer-log; };
category xfer-out { xfer-log; };
category notify { xfer-log; };
};

Die Berechtigungen sollten alle richtig sein, denn ich kann ja auch die
Zonefiles vom Master beziehen und Logfiles und all dies werden auch angelegt.
Alle Ordner haben als Gruppe 'named' und können dort agieren. Daran sollte es eigentlich nicht liegen.

Also die Syslogs sagen nichts, ich bekomme einfach keine Fehler.

Das Skript macht einfach folgendes: Es aktualisiert IP-Adressen mittels dieser Funktion: http://pastebin.com/m3c5b974
Diese Funktion nimmt als Parameter den zu ändernden Host und die neue IP-Adresse an und schickt einen Update-Befehl an den lokal laufenden BIND, der dann die A-Records dieser Hosts anpassen soll. Als damals bei den "alten" DNS-Servern noch jeder Host innerhalb des Netzwerkes ein Update machen durfte, ging es wunderbar. Nur bei meinem neu aufgesetzten BIND geht es einfach nicht. Also stimmt wohl was mit der Konfigurationsdatei nicht. Ich weiß nicht was ich sonst zu diesem Skript sagen soll, mehr gibt es da einfach nicht zu sagen, diese im Link gezeigte Funktion macht DNS-Updates, ansonsten ist nichts relevant.

Kann es vielleicht sein, dass ich noch irgendwie einen Key brauche, so wie ich ihn schon für rndc generieren musste? Wie muss ich denn das Logging richtig einstellen, mir kommt es vor als sind die in der Konfigurationsdatei getätigten Einträge nicht ausreichend, da ich nie Fehlermeldungen bekomme, immer nur Hinweise oder "harmlose" Meldungen. Dies ist jedenfalls der Logging-Parameter, der in der von dem BIND-Paket bereitgestellten Konfigurationsdatei eingestellt war.


logging {
channel xfer-log {
file "/var/log/named.log";
print-category yes;
print-severity yes;
print-time yes;
severity info;
};
category xfer-in { xfer-log; };
category xfer-out { xfer-log; };
category notify { xfer-log; };
};

Wie gesagt ich weiß nicht was ich dazu sonst noch sagen soll, denn wie gesagt im Skript ist die gezeigte Funktion genau der Part, der ein Update macht und die Logfiles des BIND geben einfach nichts her. Die Konfiguration habe ich ja aufgelistet.

wabbelwin
14.01.08, 22:04
Nun nochmal genauer.....
Hier noch mal ein Auszug aus meiner named.conf (FC5)
Diese Zone wird von meinem DHCP upgedated. Da es laut Doku
egal ist wer ein Update veranlasst (DHCP, Script...), sollte hier auch dein Script laufen.


controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

include "/etc/rndc.key";

zone "mynet.local." IN {
type master;
file "mynet.local.db";
allow-update { key rndckey; };
};

allow-update geht auch unverschlüsselt. Hierfür muss der Eintrag allow-update zwischen {} geändert werden.
Benutzt man einen Key so muss der gleiche Key vom Sender und Empfänger
eingebunden werden. Key-Filename und Key-String können von Distro zu Distro abweichen.
Benutzt man einen Bind in einer Chroot Umgebung, so muss man sicherstellen, dass
das Key-File auch dort zur Verfügung steht.
Wie gesagt hatte ich immer ein Problem mit den Rechten.
Der Benutzer unter dem der Bind läuft muss Schreibrechte in dem Verzeichnis haben
in dem die Zonen Dateien liegen. Es kommt eine .jnl Datei hinzu, die er anlegen
können muss. Weiter braucht er auch Schreibrechte auf dem Zonefile ( logisch oder ? )
Ich kann mich an keine Distro erinnern, bei der das von Anfang an gepasst hat.

Greetz
:)
...... Und jetzt halt ich mich raus ;)

TheGrudge
14.01.08, 22:08
Hi,

allow-update hatte ich auch schon einmal drin, halt nur mit einer IP, in diesem Fall 127.0.0.1.
Aber ich probiere es einfach mal mit dem Key, den ich eh schon generiert habe. Mal schauen ob es funktioniert.

Achja so eine jnl-Datei liegt dort auch rum, nur anscheinend geschieht kein Update.

heatwalker
16.01.08, 20:43
Hey, ich komme erst jetzt dazu dir mal wieder zu antworten (-:

Wenn der Server als Slave konfiguriert ist, kann er auf gar keinen Fall
Updates verarbeiten.
Der Slave bekommt vom Master die Info, das Zonefile hat sich geändert und
dieser "holt" sich dann die Files.

Von daher kann ein "allow-update" nicht funktionieren.

Zu deinem Programm. Ist der Schnitzel alles was an Programm da ist,
oder war das nur ein Ausriss?

Ich hatte mir das mal abgespeichert und getestet. Also da bin ich absolut
ratlos. Ich hab auch nicht den geringsten Ansatz einer Meldung gesehen.

TheGrudge
16.01.08, 20:53
Naja da ist natürlich viel mehr was das Programm macht, der DNS-Update funktioniert aber genau über diese Funktion. Mit den Microsft-DNS-Servern funzte es immer, aber BIND (mittlerweile als Master definiert) geht es einfach nicht und ich bekomme nicht mal irgendeine Meldung.
Aber selbst wenn ich die Zonedatei manuell bearbeite, juckt das BIND nicht. Auch ein Neustart von BIND scheint irgendwie die neuen Zonefiles nicht zu laden. Dabei inkrementiere ich die Serialnummer usw... langsam geht mir DNS ganz schön auf den Keks :rolleyes:

heatwalker
16.01.08, 20:59
Keine Änderung bei einem Neustart? Das kann eigentlich nicht.

Poste doch nochmal deine named.conf und dein zonefile (anoymisiert).

Hast du mal auf einer 2. Konsole überprüft was für Meldungen ausgeschmissen
werden wenn du den Bind neustartest?

TheGrudge
30.01.08, 12:39
So seit heute sitze ich mal wieder an diesem Problem, habe die ganze Zeit das Thema nach hinten geschoben :-)
Gibt es vielleicht ein Tool oder eine andere Möglichkeit (außer direkt die Zonefiles zu editieren), um ein DNS Update anzustoßen?
Vielleicht liegt es ja doch an dem ganzen CHROOT-Geraffel? Ich versuche vielleicht auch demnächst nochmal, den Bind neu aufzusetzen und nicht in einem CHROOT laufen zu lassen.