PDA

Bekijk Volledige Versie : Zijn DNS-systemen samen te voegen



johnbrand
17/03/08, 01:13
Op dit moment maken we gebruik van 3 dns systemen. En hebben 9 dns-servers draaien. (Al dan niet als VPS.) We maken gebruik van Bind en djbdns.

We hebben nu ns1 tot en met ns9, dus deze willen we samenvoegen zodat het overzichtelijker en foutlozer is.

Het uitschakelen van de dns-mogelijkheden in de diverse control-panels hebben we overwogen, maar geeft meer nadelen dan voordelen.

De vraag eigenlijk is. Is het mogelijk om data uit 3 dns-servers te halen en te combineren in 1 dns-systeem en deze replicaten naar 2 slaves.
En zo ja. Welke dns-servers en techniek zou je daarvoor gebruiken.

royen99
17/03/08, 08:03
Kort gezegd, Ja.
PowerDNS, met een SQL backend kan slave spelen voor de rest van al je DNS servers (zolang die in elk geval dan wel notify's sturen). Werkt in elk geval goed met (getest) PowerDNS, Bind en TinyDNS (djbdns).

wonko
17/03/08, 08:15
kijk eens naar de supermaster optie van powerdns; daarmee kan je een centrale powerdns de data uit de verschillende (hidden) masters laten gebruiken.

johnbrand
17/03/08, 12:38
Voor zover ik weet stuurt djbdsn/tinydns geen notify mee. Hoe kan je dan de supermaster gebruiken?

royen99
17/03/08, 14:47
Voor TinyDNS is er tevens axfrdns (gebruikt port 53/tcp, dus kan je naast TinyDNS draaien op hetzelfde IP), deze kan de AXFR transfers afhandelen. PowerDNS zorgt zelf voor regelmatige in sync houding via AXFR zodra er in elk geval 1 maal een notify is geweest per domein.

Zelf hebben we ook een aardig aantal supermasters die bind en/of tinydns draaien. (p.s.: De Microsoft DNS server wordt standaard niet ondersteund.. dit heeft aanpassingen nodig in de PowerDNS source code, en hierna opnieuw compileren).

Mikey
17/03/08, 16:31
Zelf hebben we ook een aardig aantal supermasters die bind en/of tinydns draaien. (p.s.: De Microsoft DNS server wordt standaard niet ondersteund.. dit heeft aanpassingen nodig in de PowerDNS source code, en hierna opnieuw compileren).

In welke zin werkt MSDNS niet ? Deze geeft net zoals de rest gewoon notifys en verstuurd de zones met axfr zonder problemen.

royen99
17/03/08, 18:09
In welke zin werkt MSDNS niet ? Deze geeft net zoals de rest gewoon notifys en verstuurd de zones met axfr zonder problemen.

Klopt, enkel CNAME records willen nog wel regelmatig niet goed overkomen.

Mikey
17/03/08, 18:32
Klopt, enkel CNAME records willen nog wel regelmatig niet goed overkomen.

geen ervaring met powerdns icm msdns, wel bind en msdns, daar hebben we tot op heden geen probelemen mee gehad. Wel destijds een bind versie die problemen had met opvolgende updates.

Misschien dat je je wijziging met het public kan delen.

royen99
17/03/08, 18:59
Zal in de Pdns mailinglist even rondzoeken, hier heb ik enige tijd geleden de fix gezien.

johnbrand
25/03/08, 16:40
Ik ben nu al enkele dagen aan het stoeien met PowerDNS. Volgens mij functioneerd ie nou zoals het moet.

Maar hoe zorg ik er voor dat de tinydns/djbdns een notify stuurt, zodat de PowerDNS die server ziet als supermaster voor die domeinnamen.

DiedX
25/03/08, 16:51
Dat doet TinyDNS dus niet :)

johnbrand
25/03/08, 17:02
DiedX,
Dat was mijn reactie eerder ook al.
Maar toen werd er gereageerd dat het met axfrdns moest gaan werken.

Verder iemand nog een idee.

DiedX
25/03/08, 18:04
Well, axfrdns is dus je oplossing. C'est tout. TinyDNS werkt erg mooi, maar is vanwege security ook redelijk.... jeweetwel :)

johnbrand
25/03/08, 18:20
Oké. Axfrdns is dan de oplossing, maar hoe moet ik dat dan opzetten.

DiedX
25/03/08, 18:32
Dat durf ik je niet te zeggen. Ik ben zelf een verwend PowerDNS gebruiker, en TinyDNS/AXFRDNS is voor mijn doeleinden iets te veel van het goede.

In het verleden heb ik er mee te maken gehad.

royen99
25/03/08, 20:31
Even aangenomen dat TinyDNS (djbdns) al geinstalleerd is, en werkt (via daemontools) en dat dus ook unix account dnslog bestaat.

Voor axfrdns:



# useradd axfrdns
# axfrdns-conf axfrdns dnslog /var/djbdns/axfrdns /var/djbdns/tinydns 1.2.3.4

Dit configureert axfrdns dat deze runt onder unix account axfrdns in de directory /var/djbdns/axfrdns, luistert op ip 1.2.3.4, kijkt naar de bestaande tinydns in /var/djbdns/tinydns en logt onder unix account dnslog.



# echo ':allow,AXFR=""' > /var/djbdns/axfrdns-1.2.3.4/tcp
# make

In de tcp file zet je neer welke andere DNS servers een axfr kunnen opvragen, in bovenstaand voorbeeld dus elke. Na aanpassen van de tcp file, een make draaien om te activeren.



# ln -s /var/djbdns/axfrdns/ /service

Deze regel zorgt ervoor dat de axfrdns daemon opstart via de daemontools.

johnbrand
25/03/08, 20:56
Bedankt voor de info. axfrdns was al geinstalleerd en deed het al. Maar hoe zorg ik nu dat tinydns een notify stuurt zodat PowerDNS begrijpt dat ie slave is voor die domeinen.

royen99
25/03/08, 21:41
Bedankt voor de info. axfrdns was al geinstalleerd en deed het al. Maar hoe zorg ik nu dat tinydns een notify stuurt zodat PowerDNS begrijpt dat ie slave is voor die domeinen.

Wij gebruiken hier een perl scriptje voor:


#!/usr/bin/perl -w

# usage: dnsnotify zone slave [...]

use Net::DNS;
# Vervang 4.3.2.1 door het UITGAANDE ip van je axfrdns daemon.
my $MY_IP = "4.3.2.1";

$zone = shift;
@master_ns = @ARGV;

$res = new Net::DNS::Resolver;
$res->srcaddr($MY_IP);

foreach $ns (@master_ns) {
$packet = new Net::DNS::Packet($zone, "SOA", "IN");
die unless defined $packet;

($packet->header)->opcode("NS_NOTIFY_OP");
($packet->header)->rd(0);
($packet->header)->aa(1);

$res->nameservers($ns);

# Prints outgoing packet - the NOTIFY
# $packet->print;

$reply = $res->send($packet);

if (defined $reply) {

print "Received NOTIFY answer from " . $reply->answerfrom . "\n";
# Print received packet - the answer
# $reply->print;

} else {

warn "\$res->send indicates NOTIFY error for $ns\n";
}
}

exit 0;


Dit kan je dan handmatig aanroepen door bv:


# ./dnsnotify domain-to-transfer.com ns.masterdns.com

Dit hoeft slechts éénmaal per domein (initieel dus). Zodra powerdns het domein kent (dus na de eerste axfr) blijft deze in sync door reguliere checks binnen PowerDNS.

johnbrand
25/03/08, 22:39
Bedankt voor het script. De eerste domeinnamen zitten al in de PowerDNS database.

Vraagje. Is dit nog te automatiseren. Heb eigenlijk niet zo'n zin om 400 domeinnamen in te gaan voeren.

royen99
25/03/08, 23:36
Uiteraard kan dit. TinyDNS bewaard alle zones/records in zijn data en data.cdb files. De data file is gewoon ascii en kan je uitlezen.
Om bovenstaand scriptje uit te voeren voor al die domeinen kan je bv doen:


for i in `grep ^Z data | awk -F":" '{print $1}' | sed 's/^Z//g'`
do
/pad/naar/dnsnotify $i ns.masterdns.com
done

johnbrand
26/03/08, 09:59
Royen99 dit heeft me echt vooruit geholpen.

Is het nu het beste om dit met een cron 4x per dag te laten lopen. Of bij invoeren nieuwe domeinnaam gewoon die dnsnotify uitvoeren.

Ik denk dat het ook mogelijk is om de database uit te lezen en dan een file te maken voor een backup mailserver. Zodat ie geen open-relay is.
Nu weet ik dat qmail 2 files gebruikt 1e 50 domeinen in rcpthosts en de rest in morercpthosts. Dus die is denk ik minder geschikt hiervoor.
Iemand goede ervaring met een andere emailserver, waar ik dit kan doen.

Nog even een extra vraagje. Hoe maak ik van de huidige masters hidden masters, zodat de PowerDNS servers alleen maar de ns aanvragen krijgen.