# DNS und ISPConfig in großen Umgebungen



## funsurfer (12. Mai 2011)

Hallo.

Ich hätte eine Frage.. und zwar habe ich einen DNS mit ca 3000 Domains zu verwalten. Ich habe gehört, dass Bind und PowerDNS in sochen Dimensionen eher auf Filebasis arbeiten sollten und nicht über MySQL.
Ich brauche Authoritiv und Resolver 

Ich will keine Performanceprobleme bekommen...

Kann mir da bitte wer einen Tipp geben?

Bis jetzt wurde bind mit flat Files ohne DB eingesetzt....

ThX im Voraus und LG


----------



## mare (12. Mai 2011)

Ich kenn ein Setup mit Bind als HiddenMaster (Als Supermaster) und Power DNS als Public Server mit ca. 4500 Domains.

Solange du aufpasst, das Mysql die Indexe im Ram hat und nicht auslagert ist imho alles im grünen Bereich. 

Sicher scheint es mit flatfiles stabiler und die DB ist ein Point of Failure. Wenn es die zu gewagt ist, kannst du ja auch die bind files aus dem ISPC per rsync verteilen. Ist dann halt nicht Realtime.

/LG


----------



## Till (12. Mai 2011)

> Ich habe gehört, dass Bind und PowerDNS in sochen Dimensionen eher auf Filebasis arbeiten sollten und nicht über MySQL.


BIND arbeitet auf Filebasis in ISPConfig 3 und nicht per mysql.


----------



## funsurfer (12. Mai 2011)

Zitat von Till:


> BIND arbeitet auf Filebasis in ISPConfig 3 und nicht per mysql.


http://www.howtoforge.de/forum/newreply.php?do=newreply&p=24122

Danke für die Info.

Wie ist es mit authoritiv und resolver in Bind? Geht ohne Probleme?

LG


----------



## Till (12. Mai 2011)

Ja. das ist doch bei BIND nie ein Problem.


----------



## funsurfer (13. Mai 2011)

Zitat von Till:


> Ja. das ist doch bei BIND nie ein Problem.


Ok... dann noch eine letzte Frage, wie migriere ich die alten Zonefila am besten in den ISPconfig? Die alten Files sind von Hand editiert....

Gibt es da ein Problem, oder ein Importscript?

ThX


----------



## Till (13. Mai 2011)

Soweit ich weiß gibt es dafür noch kein importscript.


----------



## mare (13. Mai 2011)

Ich habe:
- mir div. DNS Templates gebaut. (Mehrere Webserver in den alten Zonen)
- über curl die Oberfläche angefahren und die Zonen sowie Records einpflegen lassen.

Die Quelle war allerdings ein pdns dump. Sollte aber mit deinen zonefiles ähnlich gehen.


----------



## funsurfer (13. Mai 2011)

Zitat von mare:


> Ich habe:
> - mir div. DNS Templates gebaut. (Mehrere Webserver in den alten Zonen)
> - über curl die Oberfläche angefahren und die Zonen sowie Records einpflegen lassen.
> 
> Die Quelle war allerdings ein pdns dump. Sollte aber mit deinen zonefiles ähnlich gehen.


Kannst du mir das näher erleutern?
Und was mir aufgefallen ist.... wir haben ja 2 Nameserver... der 2te holt sich ja die Files vom ersten... wie handelt das der ISPconfig?
von Hand habe ich das ja immer an beiden Servern eintragen müssen.
weiters war am alten server mehrere ns instanzen per chroot getrennt am laufen... ist warscheinlich im ISPconfig ein problem oder?
Pro NS ein eigener (virtueller) Server oder?
Ganz geht das aus der onlinedemo nicht hervor... 

Vielen Dank


----------



## mare (14. Mai 2011)

Hi,

ISP-Config macht nichts weiter als die Zonen per Bind auf dem ausgewählten Server bereitszustellen. Den Rest mußt du lösen.(Entweder per AXFR oder RSYNC der Zonenfiles)

Wir haben das mit 4 PowerDNS Slaves gelöst die in den Zonen eingetragen werden. Der ISPC Bind ist dafür der Supermaster. Sobald die Zone auf dem ISPC Bind generiert wird schickt der an die Nameserver der Zone ein Notify. Diese legen die Zone selbst an (geht nur mit DB als Backend) und starten einen AXFR Zonentransfer. Wenn du jetzt im ISPC Interface mal was änderst dauert es max 1 Minuten bis alle Slave Server das Update gemacht haben. Der ISPC-Bind ist im Internet nicht sichtbar sondern nur die 4 Public Slaves.

-
Zum Konvertieren:

1. Zonen anlegen.
Voraussetzung eine Quelle mit Zonen und Client Zuordnung sowie die Templates.
Wie gesagt, bei mir war die Quelle eine PDNS-Datenbank. Aber hier mal die relevanten ISPC Aufrufe (PHP). Ich weiß , es geht auch über die RemoteAPI aber ich habe alle Daten (Kunden/Domain/Mails/DBs) so eingelesen da eben nicht alles über die API ging.

#Anmelden

```
unlink('/tmp/cookie') ;
system('curl --insecure -c /tmp/cookie --data "username=admin&passwort=admin&s_mod=login&s_pg=index" http://127.0.0.1:8080/content.php') ;
$sessionid = trim(exec("cat /tmp/cookie  | grep PHP |awk '{print $7}'")) ;
```
#Domain anlegen

```
system ("curl -b /tmp/cookie --data \"template_id=$template&server_id=1&
client_group_id=".$kunde."&domain=$row->name&create=1&phpsessid=\$SESSION\" http://127.0.0.1:8080/dns/dns_wizard.php") ;
```
#zusätzliche Records anlegen

```
system("curl -b /tmp/cookie --data \"name=$host&data=$row2->content&ttl=86400&active
    =Y&id=&zone=$helpid&type=$row2->type&next_tab=&phpsessid=\$SESSION\" http://127.0.0.1:8080/dns/dns_
    ".strtolower($row2->type)."_edit.php > /dev/null > /dev/null") ;
```


----------



## funsurfer (15. Mai 2011)

Danke, 

Das sollte aber klappen, wenn ich den zonentransfer im bind vom first AUT DNS der im ISPConfig drin ist per AXFER auf den Secondary AUT DNS übertragen lasse. sollte ja mit notify hinhauen. ohne DB.

Das konstrukt soll folgendermaßen aussehen:

Ich habe einen authoritiven DNS 1 und authoritiven DNS 2 die Zone wird am DNS1 eingetragen via ISPConfig. der macht ein notify an den DNS2 und der holt sich dann alles vom DNS1.

Weiters gibt es noch auf 2 eigenständigen Maschinen einen resolver konfiguriert....

müsste alles ohne DB klappen oder? dann muss auch der DNS2 nicht im ISPConfig drin sein?!

LG


----------



## mare (16. Mai 2011)

Hallo,

Genau das wird eben nicht klappen ;-)

Dein bind auf dem 2. Server legt keine neuen Zonenfiles an. Bestehende Abgleichen geht aber eben keine Neuen anlegen.

Es gibt imho einen fork der das kann habe ich aber nicht getestet.

Also entweder die Bind Daten wie .conf und Zonen per rsync schieben oder die Zonen auf dem Slave beim ersten Mal händisch anlegen oder PDNS mit DB verwenden.


----------



## Till (16. Mai 2011)

Oder als 3. und wahrscheinlich beste Möglichkeit die ISPConfig Mirror Funktion verwenden. Denn warum ein extra rsync setup wenn ISPCXonfig das ja alles automatisch macht. Die Mirror Funktion ist nämlich dafür da, dass die Zonen icht extra als secondary angelegt werden müssen und auch automatisch die geänderten Zonen auf dem Slave aktualisiert werden.


----------



## funsurfer (16. Mai 2011)

Zitat von Till:


> Oder als 3. und wahrscheinlich beste Möglichkeit die ISPConfig Mirror Funktion verwenden. Denn warum ein extra rsync setup wenn ISPCXonfig das ja alles automatisch macht. Die Mirror Funktion ist nämlich dafür da, dass die Zonen icht extra als secondary angelegt werden müssen und auch automatisch die geänderten Zonen auf dem Slave aktualisiert werden.


am slave sind das aber ja alles sdb.xxx files und am Master db.xxxx

Hab ich jetzt einen Denkfehler?

Weißt du welcher fork das kann, bzw. welcher das ist?
Würd ich direkt mal testen


----------



## Till (16. Mai 2011)

Du denkst hier zu kompliziert. Dafür brauchst Du keinen Fork von BIND sondern einfach nur ISPConfig. ISPConfig transeferiert die Daten intern über den ISPConfig Replikationsmechanismus und fügt sie dann lokal in der BIND Config hinzu.

Das Setup is ganz einfach:

1) ISPConfig multiserver setup. Dabei legts Du 2 oder mehr DNS Server an wie heir beschrieben:

Installing A Multiserver Setup With Dedicated Web, Email, DNS And MySQL Database Servers On Debian 5.0 With ISPConfig 3 | HowtoForge - Linux Howtos and Tutorials

2) Du stallst bei allen dns slave servern in ispconfig in den server settings ein, dass sie mirror des ersten Servers sind.

Das ist schon alles. ISPConfig kümmerst sich nun darum dass die BIND daten auf allen Servern gleich sind wenn Du eine Domain im DNS in ISPConfig hinzufügst.


----------



## funsurfer (16. Mai 2011)

Zitat von Till:


> Du denkst hier zu kompliziert. Dafür brauchst Du keinen Fork von BIND sondern einfach nur ISPConfig. ISPConfig transeferiert die Daten intern über den ISPConfig Replikationsmechanismus und fügt sie dann lokal in der BIND Config hinzu.
> 
> Das Setup is ganz einfach:
> 
> ...


Dann habe ich aber von der Konfig her 2 Master oder?
immerhin schaut ja das Named.conf file im Slave anderst aus als im Master oder?


----------



## mare (16. Mai 2011)

Hi,

Master / Slave ist dann vollkommen unrelevant, da die Daten übers ISPC kommen. Die DNS-Server machen dann nichts mehr direkt untereinander.

Hmm, an das Mirror System von ISP Config habe ich noch gar nicht gedacht  das werde ich auf jedenfall mit 2 der Public Nameservern ausprobieren. Dann laufen 2 mit Bind und 2 mit powerDNS.


----------



## Till (16. Mai 2011)

> Dann habe ich aber von der Konfig her 2 Master oder?


ja.



> immerhin schaut ja das Named.conf file im Slave anderst aus als im Master oder?


Aber auch nur, damit bind die Daten selbst transferiert. da wir das aber in unserem setup nicht benötigen, können master und slave identisch aussehen. Denn der Trnasfer wird ja von ispconfig gemacht, wie mare bereits erläutert hat.



> Hmm, an das Mirror System von ISP Config habe ich noch gar nicht gedacht  das werde ich auf jedenfall mit 2 der Public Nameservern ausprobieren. Dann laufen 2 mit Bind und 2 mit powerDNS.


Ja, das ist problemlos möglich.


----------



## mare (17. Mai 2011)

Hi,

Ich habe das jetzt mal mit einem der DNS Server gemacht.
Funktioniert super. Und gelöscht Domains fliegen auch gleich raus.
(Bei der PDNS Variante mußte da ein Script auf veraltete Daten testen.)

Da die Server vom Setup her ja auch alle "Master DNS" sind entfallen auch die Refresh Checks.

Ein Sach stört mich noch. 
Ist es notwendig, das die Tabelle client komplett mit übertragen wird?


----------



## Till (17. Mai 2011)

> Ist es notwendig, das die Tabelle client komplett mit übertragen wird?


Das ist leider für einige Module notwendig, wenn auch nicht für reine DNS Server wenn ich mich recht erinnere. Kann ich so aber aus dem Kopf nicht mehr genau sagen, weiß nur noch dass wir sie erst aus Sicherheitsgründen ausgeklammert hatten aber dass es dann doch notwendig war auf einige der daten dort vom Slave aus zuzugreifen, so dass wir sie in die Repliaktion aufnehmen mussten.


----------



## mare (17. Mai 2011)

Zitat von Till:


> weiß nur noch dass wir sie erst aus Sicherheitsgründen ausgeklammert hatten.


Genau das sind auch meine Bedenken. Zwei der Server sind nicht in "meiner Gewalt" und da würde ich ungern Kundendaten hinschieben.


----------



## Till (17. Mai 2011)

Ich hab gerade mal durch die Sourcen geschaut, soweit ich sehen konnte werden die client Daten nur für die Traffic Limits der Webseiten benötigt. Wenn Du die nicht verwendest dann könntest Du die Replikation der Client und Reseller Daten bei Dir deaktivieren, indem Du in den Dateien:

/usr/local/ispconfig/interface/web/client/form/client.tform.php
/usr/local/ispconfig/interface/web/client/form/reseller.tform.php

die folgende Zeile auf 'no" setzt:

$form["db_history"]		= "no";

Dann werden Änderungen an den Kundendaten nicht mehr ins "sys_datalog" geschrieben und somit auch nicht mehr repliziert. Die "client" Tabelle auf den DNS Slaves kannst Du dann leeren.


----------



## mare (17. Mai 2011)

Super, Danke.


----------



## funsurfer (17. Mai 2011)

Hallo, Danke für die Info.

Ich denke die Entscheidung ist gefallen...
Ich mache einen Bind mir einem mirror Setup. klingt am vernünftigsten.
Bleibt nur noch das Problem die Zonefiles vom alten NS (Bind m. flatfiles) in den ISPConfig zu importieren (auch Bind mit flatfiles)

Wie ist das dann zu machen?
wenn ich die das in der Console in der Zone ändere ignoriert er das im ISPconfig...

Merci im voraus und LG


----------



## Till (18. Mai 2011)

Wenn Du zonefile simportieren möchtest, musst Du Dir ein script schreiben das die Zonen aus den dateien einliest und sie dann mittels des Remote API in ISPConfig einfügt.


----------



## mare (18. Mai 2011)

Und an die Kundenzuordung denken .....


----------



## funsurfer (18. Mai 2011)

Zitat von Till:


> Wenn Du zonefile simportieren möchtest, musst Du Dir ein script schreiben das die Zonen aus den dateien einliest und sie dann mittels des Remote API in ISPConfig einfügt.


Gibt es da jemand der das schon mal gemacht hat, oder ein howto?

ThX


----------



## mare (18. Mai 2011)

Hi,

Da deine Zonenfiles sehr individuell sind, gibt es da keine out of the box Lösung.

Du muß einen "Converter" bauen der die Records dann per API in ISPC reinnimmt.

Die andere Möglichkeit mit den CURL Aufrufen hatte ich dir schon gepostet. Aber an dem Auseinandernehmen kommst du nicht vorbei.


----------



## Till (18. Mai 2011)

Soweit ich weiß wollte das ein Entwickler demnächst veröffentlichen. Ich hab ihm gerdae mal eine Mail geschickt, ob er schon Code hat den er veröffentlichen möchte.


----------



## funsurfer (18. Mai 2011)

Zitat von Till:


> Soweit ich weiß wollte das ein Entwickler demnächst veröffentlichen. Ich hab ihm gerdae mal eine Mail geschickt, ob er schon Code hat den er veröffentlichen möchte.


Das wäre Super. Ich könnte das ja dann sozusagen BETA-Testen 

Ich habe ca. 5000 Domains zu importieren. danach nochmal 10000 

@ mare, ja, wenn gar nichts hilft, dann muss ich das wohl. Leider bin ich mit Arbeit derzeit zugepflastert, deshalb versuch ich mir das wenn möglich zu ersparen.

ThX


----------



## Till (18. Mai 2011)

Das Importscript ist bereits im SVN drin. Die Dateien sind

interface/web/dns/dns_import.php
interface/web/dns/templates/dns_import.htm

Du kannst Dir die ISPConfig SVN Version mit diesem Befehl herunterladen:

svn export svn://svn.ispconfig.org/ispconfig3/trunk


----------



## mare (18. Mai 2011)

Sorry für den Threadmissbrauch ;-)

Das Zählen des Webtraffic ist davon dann aber nicht betroffen ?
(Diesen Monat / Letzten Monat usw.)



Zitat von Till:


> Ich hab gerade mal durch die Sourcen geschaut, soweit ich sehen konnte werden die client Daten nur für die Traffic Limits der Webseiten benötigt. Wenn Du die nicht verwendest dann könntest Du die Replikation der Client und Reseller Daten bei Dir deaktivieren, indem Du in den Dateien:
> 
> /usr/local/ispconfig/interface/web/client/form/client.tform.php
> /usr/local/ispconfig/interface/web/client/form/reseller.tform.php
> ...


----------



## Till (18. Mai 2011)

Nein, nur die Traffic Limits sind davon betroffen.


----------



## mare (18. Mai 2011)

Danke für die Info.


----------



## funsurfer (18. Mai 2011)

Zitat von Till:


> Das Importscript ist bereits im SVN drin. Die Dateien sind
> 
> interface/web/dns/dns_import.php
> interface/web/dns/templates/dns_import.htm
> ...


danke für die Information.

Ist  ein nachteil an der SVN? dann würde ich das nicht am Produktivsystem machen...


----------



## funsurfer (18. Mai 2011)

Zitat von Till:


> Das Importscript ist bereits im SVN drin. Die Dateien sind
> 
> interface/web/dns/dns_import.php
> interface/web/dns/templates/dns_import.htm
> ...


so, SVN ist installiert, aber es gibt da wohl noch ein Problem mit dem SOA und Mail... auch wenn ich im ISPconfig ne domain anlege, und danach das Zonefile exportier, und dann wieder importieren will.

*edit* Auch die Einträge selber übernimmt er nicht.*/edit*

Gibt es da etwas zum anpassen, oder muss ich noch was einstellen?

Danke und LG


----------



## Till (19. Mai 2011)

Ich hoffe Du hast Dir nur die beiden Dateine kopiert und nicht SVN installiert? SVN ist ungetesteter code, also niemals ispconfig svn Version auf einem produktivsystem installieren.

Zu dem Import Plugin, es handelt sich dabei ume eine Contribution eines externen Entwicklers. Es wurde bisher nicht auf Funktion getestet, ich kann dazu also nichts sagen.


----------



## funsurfer (19. Mai 2011)

Zitat von Till:


> Ich hoffe Du hast Dir nur die beiden Dateine kopiert und nicht SVN installiert? SVN ist ungetesteter code, also niemals ispconfig svn Version auf einem produktivsystem installieren.
> 
> Zu dem Import Plugin, es handelt sich dabei ume eine Contribution eines externen Entwicklers. Es wurde bisher nicht auf Funktion getestet, ich kann dazu also nichts sagen.


Ich hab den SVN installiert.
Aber nur in einer Testumgebung 

Hast du evtl. den Kontakt, oder könntest Ihm meinen geben, damit ich das ganze auf die Files anpassen kann.

Vielen Dank und LG


----------



## Till (19. Mai 2011)

> Hast du evtl. den Kontakt, oder könntest Ihm meinen geben, damit ich das ganze auf die Files anpassen kann.


Er hatte mir geschrieben dass er im Moment keine Zeit hat sich um das Plugin weiter zu kümmern und es nur erstmal ins SVN hochgeladen hat, damit andere den Code verwenden können. Du müsstest es also ggf. selbst anpassen oder Dir ein neues schreiben, wenn es nicht so funktioniert wie Du es Dir vorstellst.


----------



## grolli (23. Mai 2011)

Das Modul funktioniert erst wenn man noch aus dem Trunk die Datei
trunk/interface/web/dns/lib/module.conf.php

mit übernimmt sonst taucht der Reiter im ISPConfig nicht auf.

Es gibt noch die Option ein File einzulesen und dies dann importieren zu lassen, es wäre hierzu noch gut zu wissen wie der Aufbau des Files sein muss damit man die Domains importieren kann?


----------

