[Howto] DNS-Server

  • Zuerst muß das Paket "bind" mit "ipkg install bind" installiert werden.
    Nun wird in das Verzeichnis "/opt/etc/named" gewechselt
    und die Datei "named.conf" erstellt.
    In die "named.conf" wird folgendes mit den eigenen Anpassungen eingetragen:


    mylocaldomain ersetzt du mit deiner Domain:
    192.168.0 mit deinem IP_Bereich.
    192.168.0.1 mit der IP-Adresse deines Routers.
    0.168.192.in-addr.arpa ist der IP-Bereich rückwärts.
    myNAS ist der Name deines NAS.
    myNAS habe ich hier die IP-Adresse 192.168.0.2 gegeben.
    directory "/opt/var/named" ist das Verzeichnis, in dem die Zonen-Datei liegt.


    Code
    options {directory "/opt/var/named";allow-query { 192.168.0/24; 127.0.0.1; };forward only;forwarders { 192.168.0.1; };notify no;};zone "." in {type hint;file "zone.root";}; zone "localhost" {type master;file "zone.localhost";notify no;};zone "mylocaldomain.local" {type master;file "zone.local.mylocaldomain";notify no;};zone "0.0.127.in-addr.arpa" {type master;file "zone.0.0.127";notify no;};zone "0.168.192.in-addr.arpa" {type master;file "zone.0.168.192";notify no;};


    Wenn diese Datei gespeichert ist, wird in das Verzeichnis "/opt/var/named" gewechselt und
    erstellen 4 Dateien mit diesem Inhalt:


    /opt/var/named/zone.0.0.127

    Code
    $TTL 1D@ IN SOA localhost. admin (12072008   ; Serial8H  ; Refresh2H ; Retry1W  ; Expire11h) ; Minimum TTL;@ IN NS localhost.1.0.0.127.in-addr.arpa IN PTR localhost.


    /opt/var/named/zone.localhost

    Code
    $TTL 1D@ IN SOA localhost. admin (12072008   ; Serial8H  ; Refresh2H ; Retry1W  ; Expire11h) ; Minimum TTL;@ IN NS localhost.localhost	IN A 127.0.0.1


    /opt/var/named/zone.0.168.192

    Code
    $TTL 1D@ IN SOA myNAS admin (12072008   ; Serial8H  ; Refresh2H ; Retry1W  ; Expire11h) ; Minimum TTL;@ IN NS localhost.1.0.168.192.in-addr.arpa. IN PTR router.mylocaldomain.local.2.0.168.192.in-addr.arpa. IN PTR myNAS.mylocaldomain.local.3.0.168.192.in-addr.arpa. IN PTR pc3.mylocaldomain.local.


    /opt/var/named/zone.local.mylocaldomain

    Code
    $TTL 1D@ IN SOA myNAS admin (12072008   ; Serial8H  ; Refresh2H ; Retry1W  ; Expire11h) ; Minimum TTL	;@ IN NS localhost.localhost. IN A 127.0.0.1loopback. IN CNAME localhostrouter.mylocaldomain.local.	IN A 192.168.0.1myNAS.mylocaldomain.local.		IN A 192.168.0.2pc3.mylocaldomain.local.		IN A 192.168.0.3www.mylocaldomain.local.				IN CNAME myNAS


    EDIT: IP-Adressen der Root-Server hinzugefügt
    /opt/var/named/zone.root

    Code
    ;       This file holds the information on root name servers needed to;       initialize cache of Internet domain name servers;       (e.g. reference this file in the "cache  .  <file>";       configuration file of BIND domain name servers).;;       This file is made available by InterNIC ;       under anonymous FTP as;           file                /domain/named.root;           on server           FTP.INTERNIC.NET;       -OR-                    RS.INTERNIC.NET;;       last update:    Feb 04, 2008;       related version of root zone:   2008020400;; formerly NS.INTERNIC.NET;.                        3600000  IN  NS    A.ROOT-SERVERS.NET.A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30;; formerly NS1.ISI.EDU;.                        3600000      NS    B.ROOT-SERVERS.NET.B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201;; formerly C.PSI.NET;.                        3600000      NS    C.ROOT-SERVERS.NET.C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12;; formerly TERP.UMD.EDU;.                        3600000      NS    D.ROOT-SERVERS.NET.D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90;; formerly NS.NASA.GOV;.                        3600000      NS    E.ROOT-SERVERS.NET.E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10;; formerly NS.ISC.ORG;.                        3600000      NS    F.ROOT-SERVERS.NET.F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2f::f;; formerly NS.NIC.DDN.MIL;.                        3600000      NS    G.ROOT-SERVERS.NET.G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4;; formerly AOS.ARL.ARMY.MIL;.                        3600000      NS    H.ROOT-SERVERS.NET.H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803f:235;; formerly NIC.NORDU.NET;.                        3600000      NS    I.ROOT-SERVERS.NET.I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17;; operated by VeriSign, Inc.;.                        3600000      NS    J.ROOT-SERVERS.NET.J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30;; operated by RIPE NCC;.                        3600000      NS    K.ROOT-SERVERS.NET.K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fd::1;; operated by ICANN;.                        3600000      NS    L.ROOT-SERVERS.NET.L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42;; operated by WIDE;.                        3600000      NS    M.ROOT-SERVERS.NET.M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33M.ROOT-SERVERS.NET.      3600000      AAAA  2001:dc3::35; End of File


    /EDIT


    Bei PC-Namen mit voller Domain-Adresse erhalten am Ende einen Punkt: http://www.mylocaldomain.local. .
    Bei PC-Namen ohne Domain-Adresse wird intern die Domain-Adresse angefügt: www .
    Ich habe feststellen müssen, das die Adressen hauptsächlich mit voller Domain-Adresse verwendet werden muß.
    IN A ist eine Zuweisung von PC-Namen zu einer IP-Adresse.
    IN CNAME ist ein ALIAS zu einem schon angegebenen PC-Namen.
    IN PTR ist eine Zuweisung einer IP-Adresse zu einem PC-Namen.


    Der DNS-Server wird mit "chroot /share/HDA_DATA/optware /opt/etc/init.d/S09named start gestartet.
    Damit es auch bei jedem Reboot vom System mitgestartet wird, mußt es in die autorun.sh eintragen werden.

    Code
    mount -t ext2 /dev/mtdblock5 /tmp/configecho "/opt/etc/init.d/S09named start" >> /tmp/config/autorun.shchmod u+x /tmp/config/autorun.shumount /tmp/config


    Edit:
    Zudem habe ich mir das Startscriptkomplett abgeändert.
    Hie meine Version:


    EDIT 2010-05-15 :
    - chroot entfernt
    - Alternative zur autorun.sh habe ich ein QPKG erstellt, der das Start-Script beinhaltet und beim Booten ausführt.
    ! Das QPKG installiert nicht das bind.ipkg und beinhaltet keine Konfigurationsdateien. !

  • Hallo Leute,


    ich finde die DNS-Lösung sehr interessant für das eigene Netzwerk, aber es quälen mich ein paar Fragen zum DNS-Server.
    1. Wie kann ich dem DNS-Server zu einer automatischen Aktualisierung zwingen, wenn sich Computer im Netzwerk registrieren? Bzw. muss ich die IP-Adressen den Computern statisch zuweisen in den Zonen-Dateien oder geht das auch dynamisch? Schließlich vergibt der DHCP sie auch dynamisch! Und jeden Eintrag im DNS-Server zu Pflegen ist sehr aufwendig.
    2. Was muss ich in der Netzwerkkonfiguration der Windows-Rechner eintragen, damit sie den DNS-Server bzw. die lokale Namesauflösung benutzen.


    MfG


    Phiku

  • Zitat von "phiku"

    1. Wie kann ich dem DNS-Server zu einer automatischen Aktualisierung zwingen, wenn sich Computer im Netzwerk registrieren? Bzw. muss ich die IP-Adressen den Computern statisch zuweisen in den Zonen-Dateien oder geht das auch dynamisch? Schließlich vergibt der DHCP sie auch dynamisch! Und jeden Eintrag im DNS-Server zu Pflegen ist sehr aufwendig.


    Ich habe mich damit noch nicht beschäftigt.


    Es gibt aber auch ein Paket namens "dnsmasq", das soll einen DNS und DHCP-Server beinhalten und evtl. auch das gewünschte Verhalten mit der dynamischen Adreßvergabe.


    Zitat von "phiku"

    2. Was muss ich in der Netzwerkkonfiguration der Windows-Rechner eintragen, damit sie den DNS-Server bzw. die lokale Namesauflösung benutzen.


    Einfach als primären DNS-Server in den Netzwerk-Einstellungen eintragen.

  • Zitat von "phiku"


    1. Wie kann ich dem DNS-Server zu einer automatischen Aktualisierung zwingen, wenn sich Computer im Netzwerk registrieren? Bzw. muss ich die IP-Adressen den Computern statisch zuweisen in den Zonen-Dateien oder geht das auch dynamisch? Schließlich vergibt der DHCP sie auch dynamisch! Und jeden Eintrag im DNS-Server zu Pflegen ist sehr aufwendig.


    Die Frage ist zwar schon etwas älter - so hab ich es gelöst!
    http://forum.qnapclub.de/viewtopic.php?f=80&t=6072


    vg kasimodo

  • Hallo zusammen,


    ich wollte auf Basis dieses Howtos auf meiner TS-659-Pro den DNS installieren stieß aber auf das gleiche Problem wie
    hier http://forum.qnapclub.de/viewtopic.php?f=33&t=9299.


    Allerdings finde ich es seltsam und ziemlich schräg einen cronjob zu definieren, der alle 6 Minuten prüft, ob eine separate autostart erfolgreich durchgeführt wurde, nur weil die autorun.sh scheinbar nicht funktioniert. Ich habe daraufhin etwas herumg gesucht und folgendes festgestellt.
    In der Ts-659-Pro wird die autorun.sh bereits ausgeführt, wenn
    1.) /opt noch nicht einen symlink auf /share/MD0_DATA/.qpkg/Optware ist und
    2.) unter /share/MD0_DATA/ das .qpkg/Optware noch nicht entpackt ist.


    Das ist auch zu lösen ohne einen cronjob zu bauen, der dann ständig sinnlos prüft, ob er noch einmal ausgeführt werden muß.


    Zunächst habe ich mir die autorun.sh so modifiziert, daß sie (ähnlich wie bei der Lösung über die crontabs) eine autostart unter /share/MD0_DATA/Config ausführt, sofern sie vorhanden ist. Ich prüfe vorher mittels einer Schleife, ob die Datei schon erreichbar ist. Damit es im Fehlerfall keine Endlosschleife gibt, habe ich eine Obergrenze an Schleifendurchläufen definiert (maxtrials). Wenn die autostart nicht gefunden wird, schreibe ich einen Fehler in /var/log/messages. Die autostart starte ich als Hintergrundprozess, damit die autorun.sh durch eine Fehler in eine Endlosschleife mündet und den weiteren Ablauf aufhält. Hier meine autorun.sh:

    Code
    maxtrials=10trials=0until [ -f /share/MD0_DATA/Config/autostart -o $trials -eq $maxtrials ]; do  sleep 2  trials=`expr $trials + 1`doneif [ -f /share/MD0_DATA/Config/autostart ]; then  /share/MD0_DATA/Config/autostart &else  echo "`date`: autostart after $maxtrials trials not startet" >> /var/log/messagesfi


    Für den autostart unter /share/MD0_DATA/Config habe ich das Konstrukt mit einer autostart und autostart_job übernommen, um ggf. weitere jobs integrieren zu können. In der autostart führe ich die autstart_job in einer Schleife so lange aus, bis sie erfolgreich beendet wurde (natürlich wieder mit einer Obergrenze an Schleifendurchläufen. Im Negativfall gibt es einen Fehlermeldung unter /var/log/messages. Die autostart ist so gestaltet, daß sie auch nach wie vor als cronjob betrieben werden kann. Meine autostart sieht so aus:

    Code
    if [ ! -f "/share/HDA_DATA/start_config" ]; then  /share/MD0_DATA/Config/autostart_job  maxtrials=10  trials=0  until [ -f "/share/HDA_DATA/autostart_job_successful" -o $trials -eq $maxtrials ]; do    sleep 10    trials=`expr $trials + 1`    /share/MD0_DATA/Config/autostart_job  done  if [ -f "/share/HDA_DATA/autostart_job_successful" ]; then    touch /share/HDA_DATA/start_config  else    echo "`date`: autostart_job not finished successfuly after $maxtrials trials" >> /var/log/messages  fifi


    Die eigentliche Arbeit macht die autostart_job. Auch hier prüfe ich mittels einer Schleife ob das Startscript für das named Paket existiert bzw. schon erreichbar ist (wieder mit Obergrenze maxtrials). Wenn die Datei erreichbar ist, prüfe ich mittels S09named start, ob der nameserver schon läuft und starte ihn, wenn das noch nicht der Fall ist. Anschließend wird erneut der status des nameservers geprüft. Wenn er läuft wird der job als successful beendet ansonsten gibt es einen Fehler in /var/log/messages. Hier meine autostart_job:

    Code
    maxtrials=10trials=0# Pruefe ob das Startscript fuer den Nameserver schon existiertuntil [ -f /share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named -o $trials -eq $maxtrials ]; do  sleep 2  trials=`expr $trials + 1`done# starte DNS-Server wenn er noch nicht laeuftif [ -f /share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named ]; then  running=`/share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named status`  if [ ! -n "$running" ]; then    touch /share/HDA_DATA/start_DNS    /share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named start > /share/HDA_DATA/named.log  fi  # Nameserver erfolgreich gestartet  started=`/share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named status`  if [ -n "$started" ]; then    touch /share/HDA_DATA/autostart_job_successful  else    echo "`date`: named not startet" >> /var/log/messages  fielse  echo "`date`: named start script does not exist" >> /var/log/messagesfi


    Interessanterweise mußte ich auch das Startscript S09named von weiter oben für die TS-659-Pro modifizieren. Entweder ist die Scriptengine auf der TS-659 etwas anders oder in dem Code oben sind ein paar heftige Script-Fehler enthalten. Hier eine Version, die auf der TS-659-Pro funktioniert:


    Bei mir funktioniert der nameserver jetzt automatisch nach dem reboot ohne cronjob. Allerdings kann man unter /var/log/messages sehen, daß das Startscript S09named erst im 3. Versuch erfolgreich den nameserver starten kann. Das sind 20 Sekunden.
    Ich hoffe ich kann damit den Besitzern der TS-659-Pro ein wenig weiterhelfen.


    Gruß Jafar

  • Hi Leute,


    das wichtigste habe ich inzwischen übersehen, das chroot war bei einem der älteren Optware notwendig, inzwischen nichtmehr.


    Stefan