Beispiel für DNS mit Hetzners Slave DNS

Quest

Member
Hallo zusammen
ich wurde gerade nach der Konfiguration im Hetzner-Robot und ISP3 DNS Verwaltung gefragt.
Vielleicht interessiert die Antwort noch andere, deshalb poste ich hier mal.

Bei Hetzner gibt's zur DNS-Verwaltung verschiedene Möglichkeiten:
- DNS Eintrag mit Standard-Zonefile
- DNS Eintrag mit eigenem Zonefile
- Slave DNS Eintrag

Bei den ersten beiden wird jeweils ein Zonefile auf dem primären Hetzner DNS angelegt und von dort auf die anderen Nameserver verteilt.
Der Unterschied ist lediglich, dass bei 1 das Default-Zonefile von Hetzner verwendet wird und bei 2 ein eigenes eingegeben werden muss. Beide können anschließend bearbeitet werden.
Das Standard-DNS-File reicht im kleinen Single-Serverbetrieb ohne große Ansprüche aus, es leitet einfach alles an die IP unseres Servers.
Aber spätestens wenn der dritte Kunde mit einem Sonderwunsch wie einem eingetragenen CNAME kommt wird das doch nervig.

Für Slave-DNS bietet sich erst mal an den eigenen Nameserver - vermutete Adresse ns1.yourdomain.com - im Domain Robot von Hetzner bekannt zu machen. Das passiert in der DNS Verwaltung unter "Registrierte Nameserver".
Danach kann dieser bei den Domains verwendet werden und der Denic, Internic, etc. als erster DNS-Server gemeldet werden. Die Hetzner-DNS sind dann nur noch die weiteren Backup-DNS.

Um den eigenen Nameserver jetzt als Master zu verwenden wählen wir beim Erstellen der DNS Zone die Option "Slave DNS" und geben die IP unseres Servers ein.
Die DNS-Server von Hetzner fragen jetzt bei dieser IP an und versuchen die Zone zu transferieren um selbst Anfragen für diese Zone beantworten zu können.
Damit das klappt muss die Zone erst mal auf unserem DNS angelegt sein.
Außerdem müssen nicht nur sämtliche DNS-Server - auch die von Hetzner - als DNS-Server eingetragen sein, es muss ihnen auch mittels XFER erlaubt werden die Zone zu transferieren.

Als Beispiel poste ich jetzt hier mein Default-Zonetemplate mit dem bei mir alles wunderprächtig funktioniert.
Der Kunde kann nur die Domain und die Mailadresse angeben, alles andere wird von mir über das Template vorgegeben.
Die IP 12.34.56.78 muss natürlich mit der eures Servers ersetzt werden.

[ZONE]
origin={DOMAIN}.
ns=ns1.yourdomain.com.
mbox={EMAIL}.
refresh=28800
retry=7200
expire=604800
minimum=86400
ttl=86400
xfer=213.239.242.238,213.133.105.6,193.47.99.3

[DNS_RECORDS]
A|{DOMAIN}.|12.34.56.78|0|86400
A|www|12.34.56.78|0|86400
A|mail|12.34.56.78|0|86400
A|*|12.34.56.78|0|86400
CNAME|ftp|www|0|86400
CNAME|imap|mail|0|86400
CNAME|pop|mail|0|86400
CNAME|relay|mail|0|86400
CNAME|smtp|mail|0|86400
NS|{DOMAIN}.|ns1.yourdomain.com.|0|86400
NS|{DOMAIN}.|ns1.first-ns.de.|0|86400
NS|{DOMAIN}.|robotns2.second-ns.de.|0|86400
NS|{DOMAIN}.|robotns3.second-ns.com.|0|86400
MX|{DOMAIN}.|mail.{DOMAIN}.|10|86400
 

Germanius

Member
Danke für das gute Beispiel, hatte ja eine ähnliche Frage vor ein paar Tagen.

Bei meinem Robot seh ich allerdings keine Möglichkeit das so zu konfigurieren wie du beschrieben hast. Ich glaube da werd ich nicht drumrum kommen die DNS-Einträge über die Robot-API zu konfigurieren. Leider kann ich in diesem Fall die DNS-Verwaltung von Ispconfig nicht nutzen.
 

stefanr

Member
Hi,

dank der Hilfe von Quest habe ich es soweit hinbekommen, allerdings habe ich nun das Problem das ich irgend einen Fehler habe und einfach nicht durchsteige woran das ganze hängt.

Ich habe eine Domain domain.tld für diese habe ich einen DNS-Eintrag im Hetzner Robot angelegt Slave-DNS Eintrag 123.456.789.012 (IP meines ISP Config Servers).
Im ISP habe ich im DNS den template Eintrag ein wenig angepasst

[ZONE]
origin={DOMAIN}.
ns=ns03.domain.de.
mbox={EMAIL}.
refresh=28800
retry=7200
expire=604800
minimum=86400
ttl=1200
xfer=213.239.242.238,213.133.105.6,193.47.99.3

[DNS_RECORDS]
A|{DOMAIN}.|123.456.789.011|0|86400
A|www|123.456.789.011|0|86400
A|*|123.456.789.011|0|86400
CNAME|ftp|www|0|86400
NS|{DOMAIN}.|ns03.domain.de.|0|86400
NS|{DOMAIN}.|robotns2.second-ns.de.|0|86400
NS|{DOMAIN}.|robotns3.second-ns.com.|0|86400
MX|{DOMAIN}.|mail00.domain.de.|10|86400
MX|{DOMAIN}.|mail01.domain.de.|25|86400

wenn ich nun ein nslookup auf domain.tld mache bekomme ich

Nicht autorisierende Antwort:
Name: kinderhaus-hof.de
Addresses: 80.156.86.78
62.157.140.133

wenn ich meinen ns03.domain.de als DNS Server angebe bekomme ich:
Name: domain.tld
Address: 123.456.789.011

wenn ich die Hetzner DNS angebe bekomme ich:
DNS request timed out.
timeout was 2 seconds.
Server: UnKnown
Address: 213.133.105.6

DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
Name: domain.tld
Address: 123.456.789.011

das bedeutet das die Hetzner DNS Server ide Einträge haben. Hatte dann einmal eine Subdomain test.domain.tld angelegt auf meinen ISP DNS und konnte diesen auch über die DNS Server abfragen wenn ich diese direkt angebe.

Im tail -f /var/log/syslog |grep mydns bekomme ich folgende Einträge
Jan 31 20:29:50 server mydns[21441]: read_tcp_length: no data for fd 20: 213.239.242.238: Client closed TCP connection
Jan 31 20:29:54 server mydns[21441]: read_tcp_length: no data for fd 22: 193.47.99.3: Client closed TCP connection
Jan 31 20:29:54 server mydns[21441]: read_tcp_length: no data for fd 23: 213.133.105.6: Client closed TCP connection
Jan 31 20:30:01 server mydns[21441]: read_tcp_length: no data for fd 20: 127.0.0.1: Client closed TCP connection
Jan 31 20:44:58 server mydns[21441]: last message repeated 3 times
Jan 31 20:44:58 server mydns[21441]: read_tcp_length: no data for fd 20: 213.239.242.238: Client closed TCP connection
Jan 31 20:45:01 server mydns[21441]: read_tcp_length: no data for fd 23: 127.0.0.1: Client closed TCP connection
Jan 31 20:45:02 server mydns[21441]: read_tcp_length: no data for fd 22: 213.133.105.6: Client closed TCP connection
Jan 31 20:45:02 server mydns[21441]: read_tcp_length: no data for fd 20: 193.47.99.3: Client closed TCP connection

Im Hetzner Robot bekomme ich bei einer neuen Domain als Domainnachricht

---
status: failed
transaction: RO20100131202527-085872200-733975
message:
-
text: Nameserver error.
argument: |
ERROR: The nameserver list doesn't match the given one (ns03.domain.de./123.456.789.012)
level: error
code: 319
-
text: Nameserver error.
argument: |
ERROR: The nameserver list doesn't match the given one (robotns2.second-ns.de./213.133.105.6)
level: error
code: 319

reference: 733975

als Hilfe dazu steht in der Hetzner FAQ http://wiki.hetzner.de/index.php/Robot-Fehler-FAQ

Fehlermeldung "The nameserver list doesn't match the given one"

f> The nameserver list doesn't match the given one
=> ns1.example.com./aa.bbb.cc.d
=> ns1.example.net./eee.ff.ggg.hh

Diese Meldung bedeutet, dass die Nameserver-Einträge im Zonefile zu der zugehörigen Domain nicht mit den Einträgen im Registration Robot übereinstimmen. Es sollte entweder das Zonefile oder die Einträge im Robot angepasst werden.Ich hatte dann in meiner DNS Konfig auf meinem ISP Server schon mal
die Reihenfolge der NS Einträge von Hetzner getauscht, allerdings
ohne den gewünschten Erfolg.

Hat noch jemand eine Idee was ich falsch gemacht haben könnte?

Danke für die Hilfe im Vorraus.

liebe Grüße

Stefan
 

Quest

Member
Überprüfe bitte folgende Schritte:

Hast du deinen DNS-Server in der DNS-Verwaltung bei Hetzner bekannt gemacht? (Siehe meine Anleitung, 4. Absatz)

Existiert in der Zone deiner Domain domain.de ein A-Record für ns03?

Falls es daran liegen sollte werde ich es in meine Anleitung noch aufnehmen:
Funktioniert es wenn du in der Domain-Verwaltung zu den 3 NS von Hetzner noch deinen eigenen mit in der Liste angibst? (Reihenfolge beachten, wie im Zonefile)
Falls dem so ist muss der eigene ISP Nameserver nach diesem Beispiel mit an die Denic gemeldet werden. Dieser ist dann der primäre Nameserver, die von Hetzner sind dann nur noch Backup.
 

stefanr

Member
Hi Quest,

meinen ISP Config Server habe ich als DNS registriert und ein A Record ist gesetzt, ich habe nun in der Domain Verwaltung für die domain.tld

1. Nameserver 2. Nameserver 3. Nameserver 4. Nameserver 5. Nameserver Nameserver-HinweisMir ist bewusst, dass ich für diese Domain noch keinen DNS-Eintrag angelegt habe und die Domain deswegen nicht korrekt aufgelöst werden kann.

meine DNS Konfig im ISP

A * 123.456.789.011 0

A domain.tld. 123.456.789.011 0

A www 123.456.789.011 0

CNAME ftp www 0

MX domain.tld. mail00.domain.de. 10

MX domain.tld. mail01.domain.de. 25

NS domain.tld. ns1.first-ns.de. 0

NS domain.tld. robotns2.second-ns.de 0

NS domain.tld. robotns3.second-ns.com 0

damit sollte doch aus meiner Sicht alles stimmen oder nicht?

Gruß

STEFAN
 

stefanr

Member
Hi,

also nach dem ich zwei kleinere Fehler in meiner DNS Konfiguration
gefunden habe. In den NS Records wurde der abschließende . also
namesver.de. vergessen und somit wurde klappte dies nicht.

Mit Hetzner hatte ich Kontakt die feststellten das mein DNS Server
keine notifcation geschickt hätte siehe Auszug Email Hetzner

snip
der Zonentransfer auf die Robot-Nameserver wurde bislang noch nicht durchgeführt. Ihr primärer Nameserver sollte nach jeder Zonenänderung eine Notify Nachricht an die Robot-Nameserver schicken, sodass der Zonentransfer zeitnah durchgeführt wird.snap

habe ich die Möglichkeit dies zu Beeinflussen?

liebe Grüße

STEFAN
 

Till

Administrator
Das ist ein bekanntes Problem mit mydns, wenn man bind als slave nimmt. Stell sicher, dass Du die aktuellste Version von mydns-ng installiert hast und dann ggf. mal mydns neu starten, spätestens dann müsste er die notify's versenden.
 

stefanr

Member
Hallo Till,

vielen Dank für deinen Post. Ich habe gerade mal nachgesehen
meine mydns Version ist

/usr/local/sbin/mydns --version
mydns (mydns) 1.2.8.27 (MySQL 5.0.51a)

Copyright (C) 2002-2005 Don Moore 2007-2008 Howard Wilkinson


ich denke das ich das neuste Paket schon habe.

Gruß

STEFAN
 
Zuletzt bearbeitet:

stefanr

Member
Hallo Till,

ich habe nun noch einmal sehr genau geschaut allerdings ist
doch die aktuellste Version von /usr/local/sbin/mydns oder?

lieben Gruß

STEFAN
 

stefanr

Member
Hallo alle zusammen,

Hetzner hat sich noch einmal darum bemüht und folgendes berichtet

folgende Punkte sind bei einem Master-Slave-Setup zu beachten:

1. der Master muss den Zonentransfer von jedem Slave erlauben (dies scheint aktuell kein Problem darzustellen)
2. der Master muss bei jedem Update der Zone ein Notify an die Slaves schicken (dies scheint aktuell auch kein Problem darzustellen)
3. bei jedem Update einer Zone muss die Serial im SOA Record (vom Nameserver bzw. von Ihnen) erhöht werden

Die Serial stellt ein Kriterium dar, ob an der Zone eine Änderung durchgeführt wurde. Wenn die Serial gleich bleibt bzw. nicht erhöht wird, gehen die Slaves davon aus,
dass sich die Zone nicht geändert hat => die Zone wird auf den Slaves nicht aktualisiert. Vermutlich stellen Punkt 3 ein Problem dar.
# dig @178.40.204.125 domain.de SOA

;; ANSWER SECTION:
domain.de. 86400 IN SOA ns03.domain.de.
webmaster.domain.de. 2010020201 28800 7200 604800 86400

;; AUTHORITY SECTION:
domain.de. 86400 IN NS ns1.first-ns.de.
domain.de. 86400 IN NS robotns2.second-ns.de.
domain.de. 86400 IN NS robotns3.second-ns.com.


# dig @ns1.first-ns.de domain.de. SOA

;; ANSWER SECTION:
domain.de. . 86400 IN SOA ns03.domain.de.
webmaster.domain.de. 2010020201 28800 7200 604800 86400

;; AUTHORITY SECTION:
domain.de. 86400 IN NS ns03.domain.de.
domain.de. 86400 IN NS ns1.first-ns.de.
domain.de. 86400 IN NS robotns2.second-ns.de.
domain.de. 86400 IN NS robotns3.second-ns.com.


Beide Nameserver liefern die Zone integrative-schule-berg.de mit gleichem Serial (2010020201) aber unterschiedlichen NS Records aus. D.h. die Slaves liefern aktuell ein "altes" Zonefile aus, weil sich im "neuen" Zonefile die Serial nicht geändert hat.

Hat jemand eine Idee woran das liegen könnte?

Gruß

STEFAN
 

Till

Administrator
Dann öndere mal etwas im dns record, geh auf speichern und scahu nochmal in die DB, ob sich die serial geändert hat.
 

stefanr

Member
Hallo Till,

ja da wird die Serial geändert und auch beim löschen wird dann wieder der
Index eines rauf gezählt.
Ich denke das sich das Problem noch immer an der notify bemerkbar macht die nicht ordentlich an Hetzner geschikt wird.

Leider kann ich das neuere mydns Paket nirgends finden. Vielleicht hat es jemand ja noch als tar.gz irgendwo liegen, andererseits werden die schon einen Grund haben wenn Sie das Paket wieder entfernen.

Gruß

STEFAN
 

Till

Administrator
@stefanr: Du kannst ansonsten auch mal versuchen, eine Version aus deren svn bzw. cvs zu ziehen, um zu sehen ob die geht.
 

stefanr

Member
@Quest: ich bin mir ziemlich sicher das ich mich an die Anleitung gehalten habe nur das ich die aktuelle Version genutzt habe und nicht copy&paste aus der Anleitung

/usr/local/sbin/mydns --version
mydns (mydns) 1.2.8.27 (MySQL 5.0.51a)

Copyright (C) 2002-2005 Don Moore 2007-2008 Howard Wilkinson
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


@Till: Das würde ich dann als nächstes versuchen, wollte nur nicht einfach los legen wenn es bei allen anderen ja auch funktioniert, bin ja nicht der erste bei Hetzner :)


macht es Sinn über folgende Variablen im config File nachzudenken?

notify-enabled = boolean (`yes') Support DNS NOTIFY message generation if this is enabled.
notify-source = IPv4 address (`0.0.0.0') IPv4 address from which NOTIFY messages will be sent - set to 0.0.0.0 or leave blank for the default of using the outgoing interface address.
notify-source6
= IPv6 address (`;;') IPv6 address from which NOTIFY messages will be sent - set to :: or leave blank for the default of using the outgoing interface address.
notify-timeout
= seconds (`60') Number of seconds before first retry of NOTIFY message
notify-retries
= count (`5') Number of times to retry the NOTIFY message before giving up.
notify-algorithm
= string (`linear') Select type of notify algorithm to use - select oneof Linear - each timeout is equal to notify-timeout, Exponential - double timeout on each retry, Progressive - increase timeout by number of retries.


meine config

cat /etc/mydns.conf
## AUTOMATICALLY GENERATED BY DEBCONF. DO NOT MODIFY DATABASE
## INFORMATION (database, db-*)...
## PLEASE RUN 'dpkg-reconfigure mydns-mysql' INSTEAD.
## CHANGES TO THE FOLLOWING DIRECTIVES ARE NOT PRESERVED, BUT REPLACED,
## ON UPGRADE:
## user, group, pidfile, db-*, database

##
## /etc/mydns.conf
## Thu Aug 2 16:36:26 2007
## For more information, see mydns.conf(5).
##


# DATABASE INFORMATION

db-host = localhost # SQL server hostname
db-user = ispconfig # SQL server username
db-password = xxx # SQL server password
database = dbispconfig # 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)
no-listen = # Do not listen on these addresses


# CACHE OPTIONS

zone-cache-size = 2048 # Maximum number of elements stored in the zone cache
zone-cache-expire = 60 # Number of seconds after which cached zones expires
reply-cache-size = 2048 # 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
recursive = # Location of recursive resolver
allow-axfr = yes # Should AXFR be enabled?
allow-tcp = yes # Should TCP be enabled?
allow-update = no # Should DNS UPDATE be enabled?
ignore-minimum = no # Ignore minimum TTL for zone?
soa-table = dns_soa # Name of table containing SOA records
rr-table = dns_rr # Name of table containing RR data
soa-where = server_id = 1 # Extra WHERE clause for SOA queries
rr-where = server_id = 1 # Extra WHERE clause for RR queries
use-soa-active = yes # To fix bug 295 where active or inactive status is ignored.
use-rr-active = yes # To fix bug 295 where active or inactive status is ignored.


Gruß

STEFAN
 
Zuletzt bearbeitet:

Till

Administrator
Starte mal mydns auf der shell neu und dann teste nach ein paar minuten nochmal, ob Hetzner die Änderungen übernommen hat. Wenn das nicht hilft, versuch es mal mit der svn version von mydns.
 

stefanr

Member
So gerade noch einmal den mydns auf der console neugestartet danach eigenen Nameserver nach domain.de ID und Hetzner Nameserver gefragt:

dig @eigener_Nameserver domain.de SOA = ID "2010020603"
dig @ns1.first-ns.de domain.de SOA = ID "2010020603"

alles ok soweit. Dann DNS A Record zu domain.de hinzugefügt Abfrage ohne DNS neustart

dig @eigener_Nameserver domain.de SOA = ID "2010020803"
dig @ns1.first-ns.de domain.de SOA = ID "2010020603"

also keine Veränderung 5min gewartet

dig @ns1.first-ns.de domain.de SOA = ID "2010020603"

immer noch nicht. mydns neustart auf console danach DNS Abfrage auf Hetzner sehr lange Antwortzeit und Fehlermeldung "connection timed out; no servers could be reached". Dann nach 2min wieder zügig allerdings noch mit alter Serial

dig @ns1.first-ns.de domain.de SOA = ID "2010020603"

werde das jetzt in 10-20min noch mal abfragen, sollte aber doch eigentlich Zeitnah upgedatet werden oder habe ich einen Denkfehler?

Gruß
STEFAN
 

Werbung

Top