[Howto] QNAP dynamischs DNS(DDNS); DHCP; PXE

  • Für diese Beschreibung habe ich mit Absicht eine Konfiguration gewählt, die etwas abweicht von einem
    StandartNetz im Homebereich. Siehe auch die gewählten Adressbereiche!


    Aufgabe:
    --------
    Zwei Netzsegmente sollen an je einem Lan Anschluß vom QNAP-NAS TS-419 eingerichtet werden.
    Für beide Netze soll DHCP, DNS und PXE Boot realisiert werden.
    DNS soll dynamisch durch den DHCP Server aktualisiert werden. Sowohl Clients mit dynamisch durch DHCP vergebene Adresse als auch statisch in dhcp.conf vergebene Adressen werden mit ihren Namen im DNS registriert.
    - Beide Netze sollen gemeinsam einen Router im ersten Netzsegment als Zugang zum WWW nutzen.
    - Clients aus beiden Netzen können über ihre Netzwerkarte mit PXEboot starten. (z.B. für netzinstallation, acronis ect.)


    vorh.Hardware: NAS QNAP TS-419 FW: 3.1.2 Build 1014 Raid5


    Vorbereitung:
    ---------------
    - WinSCP und Putty instalieren


    - wenn noch nicht erfolgt - Optware-ipkg installieren
    (im QNAP-Web-Tool unter Anwendungen , QPK-Plug-ins)


    - Für unser Beispiel beide Netzwerkanschlüsse feste IP zuweisen. DHCP NICHT aktivieren!
    (im QNAP-Web-Tool unter Systemadministration , Netzwerkeinstellungen)


    Beispiel:
    eth0 IP: 10.128.5.174 Mask: 255.255.255.240 GW: 10.128.5.161 (IP vom Router - am Router DHCP ausschalten!)
    eth1 IP: 192.168.200.0 Mask: 255.255.255.0 GW: 192.168.200.200


    Haken bei "Netzwerk Port-Trunking aktivieren" entfernen. DNS Einträge nicht relevant!


    - Auf dem Router eine Route zum Netz 192.168.200.0 einrichten GW: 10.128.5.174


    Installation notwendiger Pakete:
    -------------------------------------
    - Putty starten und mit NAS verbinden.
    - an der Konsole für die Installation vom DNS Paket eingeben:


    ipkg install bind


    - an der Konsole für die Installation vom TFTP Paket (für PXE Boot) eingeben:


    ipkg install tftp-hpa


    DHCP brauch nicht extra instaliert werden, da in der aktuellen Firmware schon vorhanden!


    "autorun.sh" erstellen
    ------------------------
    Die Funktion der "autorun.sh" wurde oft schon beschrieben.
    In dieser Datei können alle individuelle Anpassungen vorgenommen werden, die auch nach einem Neustart verbleiben sollen.


    Da ich nicht bei jeder Anpassung den im WIKI beschriebenen Weg gehen will (an der Konsole)
    mount -t ext2 /dev/mtdblock5 /tmp/config


    dann unter /tmp/config die autorun.sh anlegen (bzw. editieren) und anschließend (an der Konsole)
    umount /tmp/config


    lege ich einmalig eine "autorun.sh" nach WIKI mit folgenden Inhalt an:


    autorun.sh

    Bash
    #!/bin/sh#sym-link /opt to /opt    rm -rf /opt    ln -sf /share/MD0_DATA/.qpkg/Optware /opt# Start /opt/autorun.sh  /opt/autorun.sh


    Eine zweite "autorun.sh" wird direkt unter /opt angelegt.
    Diese kann man dann einfach mit WinSCP ohne ständiges mount und umount bearbeitet und erfüllt auch ihren Zweck!
    Der Inhalt dieser zweiten "autorun.sh" wird weiter unten beschrieben.


    Datei + Verzeichnisstruktur (für Beispiel)
    ------------------------------------------

    Code
    |/tmp  |    /config  |           | autorun.sh  |/opt      | autorun.sh      |      |/etc      |    | dhcpd.conf      |    | resolve.conf      |    |      |    |/init.d      |    |       | dhcpd.sh      |    |       | S09named      |    |            |    |/named      |          | named.conf      |          | rndc.conf      |/var                |/named                |zone.hm6.loc                |zone.5.128.10                |zone.200.168.192                |zone.localhost                |zone.0.0.127                |zone.root


    Erweitern der resolv.conf
    --------------------------
    Die orginale resolv.conf unter /etc enthält keinen Domain Eintrag.
    DNS ist ja auf dem QNAP-NAS erstmal nicht vorgesehen.
    Im Beispiel ist die Domain "hm6.loc" ! Eintrag "nameserver" 127.0.0.1 (NAS soll ja DNS Server werden)


    resolv.conf

    Code
    domain hm6.locnameserver 127.0.0.1


    Einrichten RNDC u. DDNS
    -----------------------------
    rndc bedeutet (remote) name daemon controller. Neben Befehlen zum Starten und Stoppen des Daemons (named über S09named) sowie zum Neuladen der Konfiguration und von Zone-Files wird der generierte Schlüssel auch für die dynamische Zone-Updates über DHCP benötigt. Dafür wird die Datei rndc.conf erstellt in der u.a. auch der Schlüssel enthalten ist.


    Anlegen der rndc.conf - Eingabe Konsole (Putty):
    rndc-confgen >/opt/etc/named/rndc.conf


    Ihr müsst natürlich nun eure Datei rncd.conf und euren Schlüssel in der named.conf und dhcpd.conf benutzen. Nicht die aus den Beispieldateien!


    Beispiel rndc.conf

    Code
    # Start of rndc.confkey "rndc-key" {algorithm hmac-md5;secret "tjXskUrMW26Bd3kcZehjOw==";};options {default-key "rndc-key";default-server 127.0.0.1;default-port 953;};# End of rndc.conf# Use with the following in named.conf, adjusting the allow list as needed:# key "rndc-key" {#       algorithm hmac-md5;#       secret "tjXskUrMW26Bd3kcZehjOw==";# };## controls {#       inet 127.0.0.1 port 953#               allow { 127.0.0.1; } keys { "rndc-key"; };# };# End of named.conf


    Beispiel named.conf

    Code
    #/opt/etc/named/named.confkey "rndc-key" {	algorithm hmac-md5;	secret "tjXskUrMW26Bd3kcZehjOw==";};controls {	inet 127.0.0.1 port 953	allow { 127.0.0.1; } keys { "rndc-key"; };};options {	directory "/opt/var/named";	allow-query { 10.128.5/24; 192.168.200/24; 127.0.0.1; };#	forward only;	forwarders { [color=#FF0000]10.128.5.161[/color]; };	notify no;};zone "hm6.loc" {type master;file "zone.hm6.loc";allow-update { key rndc-key; };};zone "5.128.10.in-addr.arpa" {type master;file "zone.5.128.10";allow-update { key rndc-key; };};zone "200.168.192.in-addr.arpa" {type master;file "zone.200.168.192";allow-update { key rndc-key; };};zone "." in {type hint;file "zone.root";};zone "localhost" {type master;file "zone.localhost";};zone "0.0.127.in-addr.arpa" {type master;file "zone.0.0.127";};


    Alle Zonen-Files sind als Beispiel im Dateianhang und werden nach /opt/var/named kopiert.
    Anpassungen an euer Netz vornehmen!


    Einrichten DHCPD
    --------------------
    DHCP ist schon Bestandteil der aktuellen Firmware. Minimale Möglichkeit der Konfiguration im WEBIF vorhanden.
    Für die hier vorgesehene Konfiguration kann man das Webfrontend vergessen. Dort wird DHCP DEAKTIVIERT!


    Das in /etc/init.d vorhandene Script "dhcpd.sh" habe ich etwas angepasst und dieses neue Script unter
    /opt/etc/dhcpd.sh abgelegt. Script ist in den Beispieldateien im Anhang vorhanden und kann zusammen mit den anderen
    Files mit WINSCP zum NAS kopiert werden. Rechte auf ausführen setzen!
    Beim Scriptstart vom angepassten dhcpd.sh wird die Konfiguration nur noch aus /opt/etc/dhcpd.conf ausgelesen. Die
    dhcpd.conf wird nicht mehr aus den NAS Einträgen im WEBIF erstellt.


    Angepasste Script "dhcpd.sh"

    Bash
    #!/bin/sh# dhcpd         This shell script takes care of starting and stopping#               dhcpd.## description: dhcpd provide access to Dynamic Host Control Protocol.#DEV="eth0 eth1"# See how we were called.case "$1" in  start)	# Stop daemons	echo -n "Stoping dhcpd"	echo "."	/bin/kill -HUP `/bin/pidof dhcpd`	# Start daemons	echo -n "Starting dhcpd: "	if [ `/sbin/getcfg Network "BONDING Support" -u -d FALSE` = TRUE ]; then		DEV=bond0	else		DEV=	fi	[ -d /etc/config/dhcp ] || /bin/mkdir /etc/config/dhcp;	[ -d /var/state ] || /bin/mkdir /var/state	if [ ! -L /var/state/dhcp ]; then		/bin/ln -sf /etc/config/dhcp /var/state/dhcp		/bin/touch /var/state/dhcp/dhcpd.leases	fi	/sbin/daemon_mgr dhcpd start "/usr/local/sbin/dhcpd -q -cf /opt/etc/dhcpd.conf $DEV"#2>/dev/null 1>/dev/null"	echo -n "dhcpd"	echo "."	touch /var/lock/subsys/dhcpd#	echo -n "ddns update"#	/etc/init.d/ddns_update.sh > /dev/null#	echo "."	;;  stop)	# Stop daemons.	echo -n "Shutting down dhcpd: "	/sbin/daemon_mgr dhcpd stop /usr/local/sbin/dhcpd	#kill -HUP `/bin/pidof dhcpd`#	local pid	pid=`/bin/pidof dhcpd`	if [ ! -z $pid ]; then		kill $pid	fi	echo -n "dhcpd"	echo "."	rm -f /var/lock/subsys/dhcpd	;;  restart)	$0 start	RETVAL=$?	;;  *)	echo "Usage: dhcpd { [start]|stop|[restart] }"	exit 1esacexit 0


    DHCP wird nur über die dhcpd.conf eingerichtet! Auch die Einträge (optionen) für den PXEBoot sind im u.a. Beispiel vorhanden.


    Beispiel dhcpd.conf (Einträge anpassen! auch den Schlüssel!)

    Code
    # File /etc/dhcpd.conf# Abschnitt Global (für alle Abschnitte gültig)   server-identifier 10.128.5.174;   option domain-name "hm6.loc";   default-lease-time 600; # zehn Minuten   max-lease-time 3600;    # eine Stunde   authoritative;#lease-file-name "/var/lib/dhcpd/dhcpd.leases";#max-lease-time 86400;#default-lease-time 86400;# Fuer DDNS   ddns-update-style interim;   ddns-updates on;   ignore client-updates;   #allow client-updates;    #allow unknown-clients;   #do-forward-updates on;   # Dynamischer Update DNS, statische Adressen auch im DNS updaten   update-static-leases on;   ddns-ttl 600; key "rndc-key" {       algorithm hmac-md5;       secret "tjXskUrMW26Bd3kcZehjOw=="; };zone hm6.loc {  primary 127.0.0.1;  key rndc-key;}zone 5.128.10.in-addr.arpa {  primary 127.0.0.1;  key rndc-key;}zone 200.168.192.in-addr.arpa {  primary 127.0.0.1;  key rndc-key;}# Fuer PXE Boot   allow booting;   allow bootp;   next-server 10.128.5.174;   filename "pxelinux.0";  # Abschnitt für Subnet 0 (an eth0)   subnet 10.128.5.160 netmask 255.255.255.240 {     range 10.128.5.165 10.128.5.169;     option broadcast-address 10.128.5.175;     option subnet-mask 255.255.255.240;     option domain-name-servers 10.128.5.174, 10.128.5.161;     option routers 10.128.5.161;     #option netbios-name-servers 192.168.0.1;    host macius {        hardware ethernet 00:E0:00:18:00:00;        fixed-address 10.128.5.162;    }    host cpl-510n {        hardware ethernet 00:15:99:04:C6:26;        fixed-address 10.128.5.172;    }    host NAS-4220 {        hardware ethernet 00:01:D2:02:22:75;        fixed-address 10.128.5.173;    }  }# Abschnitt für Subnet 1 (an eth1)   subnet 192.168.200.0 netmask 255.255.255.0 {     range 192.168.200.10 192.168.200.50;     option broadcast-address 192.168.200.255;     option subnet-mask 255.255.255.0;     option domain-name-servers 10.128.5.174;     option routers 192.168.200.200;     #option netbios-name-servers 192.168.1.1;  }


    Alle Startoptionen werden sind in der "/opt/autorun.sh" eingetragen. Somit werden die Dienste nach einem Neustart vom NAS immer geladen. Rechte setzen nicht vergessen! Die USB/RS232 Unterstützung ist in einem anderen Beitrag im Forum beschrieben.
    Eine Beispielkonfiguration für PXEBoot ist in den Beispieldateien im Anhang vorhanden. Ich benutze pxelinux aus dem SYSlinux Projekt.


    "/opt/autorun.sh"


    Test DHCP/DDNS/PXE
    --------------------------
    Also Neustart von einem Clients, der seine IP über DHCP bekommen soll und ein "ipconfig /all" (Windows) sollte die
    richtige Konfiguration anzeigen.Ist ein funktionierendes "nslookup" auf eine IP oder deren Name erfolgreich -> DDNS ist OK.
    Achtung! Beim Test "nslookup" mit putty auf dem QNAP-NAS erhält man eine Ausgabe von "busybox"! Zumindestens auf den beiden QNAP-NAS TS-419U und TS-419P mit denen ich getestet habe. Ein Symlink "nslookup" unter
    "/mnt/ext/usr/bin" hat eine Verknüpfung auf "/bin/busybox" ! Diesen Symlink überprüfen und wenn verknüpft mit
    busybox, dann löschen!


    NSLOOKUP sollte unter /share/MD0_DATA/.qpkg/Optware/bin zu finden sein!


    Möchte man überprüfen ob die Clients richtig in den ZonenDateien eingetragen werden, dann vorher an der Puttyconsole z.B."S09named restart" eingeben. Dies ist notwendig da sich die Einträge erst mal temp. in den Journalfiles befinden. Erst nach einer Weile werden diese in die Zonendateien übertragen. Bei einem stop, restart bzw. start vom daemon wird dieser vorgang sofort ausgeführt.


    PXEBoot- PC über Netzweradapter (bootrom) booten! Client sollte über DHCP eine IP bekommen und das Beispielmenu sollte starten! Achtung! Netzwerkkarten mit SIS900 chip machen oft Probleme. Wenn die nicht bis zum Menue kommen liegt es nicht an eurer Konfiguration!


    Alle Files zum Beispiel!

  • Super Tutorial!


    Leider erhalte ich beim Starten von Bind eine schöne Fehlermeldung...


    Code
    [/opt/etc/named] # /opt/etc/init.d/S09named restartShutting down DNS Services:rndc: connect failed: 127.0.0.1#953: connection refusedStarting DNS Services: started


    Googlen hat bis jetzt nichts gebracht... Ich freue mich über jegliche Hilfe!


    Er versucht mir zwar zu erklären, dass DNS Service gestartet ist.. Jedoch per nslookup bekomme ich keine Antwort...
    rndc.conf und named.conf haben gleichen Schlüssel und alles nach Anleitung.. GIbts vielleicht ein Rechteproblem?





    Evtl. Firewall? Ôo


    Danke!

  • hallo,


    ich vermute mal ein "/opt/sbin/rndc -s 127.0.0.1 status" bringt auch einen Fehler.
    Wenn du alles so gemacht hast wie beschrieben und auch alle Pfade stimmen, dann sieht es nach einem Schreibfehler in den conf dateien aus.
    - bitte mal angaben zum path zur named.conf und rndc.conf.
    - die beiden *.conf dateien mal hier hochladen oder per PN


    Achtung! Ich bin ab morgen eine Woche im Urlaub. wenn ich die Infos heute noch bekomme dann melde ich mich sofort.
    Sonst geht es erst in der nächsten Woche.


    RNDC wird nicht unbedingt für DNS benötigt(locales netz). RNDS für einen nopublic DNS war nur mal eine Spielerei von mir - zum Lernen und Üben. Ein public Nameserver muss immer abgesichert werden!!!


    mit nslookup zuerst auf dem NAS testen. wenn es da funzt dann auf dem Client!


    In der Forward- und Reverszonendatei nicht die Eintrage für das NAS vergessen! die müssen fest drin sein, da für das NAS keine Dynamische Zuordnung über DHCP erfolgt!


    vg kasimodo

  • Vielen Dank für die schnelle Antwort! :thumb:


    Anscheinend war ein Fehler in einer Zonendatei (Syntax?)... Jedenfalls habe ich die Zonendatein erneut angelegt und jetzt funktioniert es. :)


    Vielen Dank und schöne Grüße.


    Edit:


    Nun habe ich leider ein Problem mit DHCP =( DHCP lässt sich starten, nur wird leider keine Adresse zugewiesen...


    Ich vermute mal ich habe in der dhcpd.conf einen Fehler...:


    Weiß jemand Rat? Vielen Dank im vorraus! =)

  • Hallo blackhat,


    folgende Punkte sind mir in deiner conf aufgefallen:


    Benutzt du das angepasste Startscript? Ich habe dies etwas geändert, damit DHCP auf beiden NetzwerkInterfaces funzt! u.a. geänderte Variable "DEV ="
    "lease-file-name" -> wurde nicht angegeben (auskommentiert) - bei dir "/var/lib/dhcpd/dhcpd.leases" (bei mir "/tmp/dhcpd.leases")
    Eine weitere (spätere) Änderung -> siehe auch Code unten!
    Der file "dhcpd.leases" muss vorhanden sein und wird in der angepasten dhcpd.sh angelegt! muss in beiden Files identisch sein!

    Code
    if [ ! -e /tmp/dhcpd.leases ]; then        /bin/touch /tmp/dhcpd.leases    fi



    meine aktuelle dhcpd.sh (nicht aufgeräumt! :oops: )


    Es ist besser wenn dynamische Adressbereiche sich nicht mit dem Adressbereich für statisch IP-Adressen (server, nas, router, drucker,ect) überschneiden. "range" anderen Bereich auswählen. Die Anzahl z.Z. vorhandener Clients im HomeNetz + Reserve! 20 - 50 Adressen sollten wohl daheim reichen. ;) Bei ca. 2000 IP-Adressen auf Arbeit muss man(n) das schon etwas anders organisieren. :D


    Es fehlt für die dyn.Aktualisierung im DNS der Verweis auf die zweite reverse Zonendatei. (in-addr.arpa) für Subnetz 10.0.0.0 in deiner dhcp.conf.


    vg kasimodo

  • Moin, moin kasimodo,


    sehr interessant was du da gemacht hast. Ich habe auch vor ein PXE-System auf einem TS-439 aufzusetzen.
    Ich bin aber leider noch nicht ganz so fit im Bezug auf Linux, ich übe gerade noch.


    Ich habe eine prinzipielle Frage, ich habe das NAS über einen Netzwerkanschluss am Netz hängen. DHCP usw. kommt alles von einer Fritzbox, das soll auch so bleiben.
    Kann ich den zweiten Netzwerkanschluss völlig unabhängig für ein PXE-Boot einrichten, ohne meine andere Netzwerkkonfiguration ändern zu müssen?


    Danke und Gruss MerlinK

  • hallo MerlinK,


    zu deiner Frage: man kann!
    aber mit Einschränkungen, da die Fritzbox (auch) als DHCP Server laufen soll!


    Jedes Netzwerkinterface (eth0 bzw. eth1)von deinem NAS ist in einem anderen Netz (ipnetz-1 bzw.ipnetz-2).
    Nur in einem der Netze (in dem NICHT die Fritzbox DHCP-Server ist) wird PXE-Boot bei entsprechender Konfiguration vom NAS funzen!


    Der DHCP Dienst auf der Fritzbox unterstützt nicht die notwendigen Options um PXE-Boot zu realisieren.
    Dazu müsste die Fritzbox eine andere Firmware bekommen (Googel ->FREETZ)


    Für das zweite IpNetz müsste dann auf dem NAS ein weiterer DHCP-Dienst eingerichtet, der dann nur an das zweiten Netzwerkinterface gebunden wird.
    Und dazu auch der TFTP-Dienst. pxelinux, menü ect.


    DHCPD ist in der Firmware schon vorhanden. Unterstützt wir DHCP standartmäßig vom NAS nur an eth0! Wenn du eth1 nutzen möchtest, dann muss das Startscript angepasst werden ( DEV = eth1). Die dhcpd.conf nach deinen Vorstellungen anpassen.


    Einfacher (ohne Startscript anpassen) eth0 für das zweite Netz nutzen (DHCP in der webgui aktivieren) und eth1 vom NAS in das Netz einklinken, in dem die Fritzbox DHCP macht. Dann über die autorun.sh die dhcpd.conf tauschen, tftpd starten und ein dhcpd restart.


    vg kasimodo

  • Wäre es evtl, möglich das ganze als QPKG hier zur Verfügung zu stellen ? ich habe die Anleitung 1 zu 1 übernommen, jedoch nur die IP Adresse angepasst. Leider läuft es auf meiner TS 469L nicht so wie ich mir das gedacht habe ..


    Ich wäre sehr dankbar für Hilfe.