Beispiel für DNS mit Hetzners Slave DNS

Dieses Thema im Forum "Tipps - Tricks - Mods" wurde erstellt von Quest, 27. Jan. 2010.

  1. Quest

    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
     
  2. Germanius

    Germanius New 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.
     
  3. stefanr

    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
     
  4. Quest

    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.
     
  5. stefanr

    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[​IMG] 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
     
  6. stefanr

    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
     
  7. Till

    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.
     
  8. Falcon37

    Falcon37 New Member

    Danke für's posten :)
     
  9. stefanr

    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: 1. Feb. 2010
  10. stefanr

    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
     
  11. stefanr

    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
     
  12. Till

    Till Administrator

    Welche ISPConfig Version? Welche Serial steht in der mysql DB?
     
  13. stefanr

    stefanr Member

    Hallo Till,

    ISP: 3.0.1.6
    Serial: 2010020603

    Gruß

    STEFAN
     
  14. Till

    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.
     
  15. stefanr

    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
     
  16. Quest

    Quest Member

  17. Till

    Till Administrator

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

    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: 8. Feb. 2010
  19. Till

    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.
     
  20. stefanr

    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
     

Diese Seite empfehlen