Good to Know Database

CentOS 6: Dynamischen DNS-Server (DDNS) einrichten


Jeder Rechner in einem Netzwerk und im Internet wird durch seine IP-Adresse adressiert. Da diese Form der Adressierung sehr umständlich ist und sich die IP-Adressen ändern können, wird zu diesem Zweck ein eindeutiger Namen verwendet. Die so genannte Namensauflösung wird von einem Domain Name Server (DNS) vorgenommen. Ich möchte hier beschreiben wie Sie einen eigenen dynamischen DNS-Server (DDNS-Server) für Ihr Netzwerk einrichten.

Installation und Konfiguration

Zuerst müssen Sie die Pakete bind, bind-chroot, bind-libs und bind-utils installieren.

[root@centos6 ~]# yum install bind bind-chroot bind-libs bind-utils

Damit nur autorisierte Systeme den DNS-Server kontrollieren können, müssen Sie einen rndc-Schlüssel (Remote Name Daemon Controller) erstellen welcher für die Kommunikation zwischen DHCP- und DNS-Server verwendet wird.

Sollte die Datei /etc/rndc.key noch nicht existieren, erstellen Sie diese mit dem folgenden Befehl.

[root@centos6 ~]# rndc-confgen -a
wrote key file "/etc/rndc.key"

Anschließend ändern Sie die Zugriffsrechte der Datei, dass diese von allen Benutzern gelesen aber nur vom Eigentümer bearbeitet werden kann.

[root@centos6 ~]# chmod 0644 /etc/rndc.key

Nachdem Sie die Zugriffsrechte der rndc.key geändert haben, erstellen Sie die Konfigurationsdatei named.conf in welcher die Einstellungen für den BIND (Berkeley Internet Name Domain) eingetragen werden.

[root@centos6 ~]# vi /etc/named.conf

Die folgenden Abschnitte können Sie mit ein paar Änderungen übernehmen.

Mit der ersten Konfigurationszeile binden Sie die rndc.key ein.

include "/etc/rndc.key";

Der nächste Abschnitt legt fest, über welche Adresse und an welchem Port der Nameserver Konrollbefehle entgegen nimmt und welcher rndc-Schlüssel genutzt werden soll.

controls {
     inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
     };

Die Einstellung directory im Options-Abschnitt legt fest, in welchem Verzeichnis die Zonendateien abgelegt werden. Die Option managed-keys-directory gibt das Verzeichnis an, in welchem die verwalteten Schlüssel zwischengespeichert werden. Durch pid-file können Sie die Datei festlegen, in welcher die Prozess-ID des Nameservers gespeichert wird.

options {
     directory "/var/named";
     managed-keys-directory "/var/named/dynamic";
     pid-file "/var/run/named/named.pid";

Wenn Sie mehrere Netzwerkkarten in Ihrem Server verwenden, können Sie mit der folgenden Option einstellen auf welchen Schnittstellen der DNS-Server Anfragen annehmen soll.

     listen-on {
          127.0.0.1;
          192.168.10.1;
          192.168.11.1;
          };

Soll der DNS-Server nur Anfragen aus bestimmten Netzwerken beantworten, tragen Sie diese Netzwerkbereiche hier ein.

     allow-query {
          127.0.0.1;
          192.168.10.0/24;
          192.168.11.0/24;
          };

Wenn der DNS-Server eine Anfrage bekommt welche er nicht beantworten kann, wird diese bei aktivierter Rekursion an einen anderen Nameserver weitergeleitet und versucht den Namen aufzulösen. Sollten Sie die Rekursion nicht aktivieren, antwortet der DNS-Server mit einer Liste von Nameservern welche möglicherweise die Anfrage beantworten können.
Um die Rekursion zu aktivieren fügen Sie die folgende Zeile in Ihre named.conf ein.

     recursion yes;

Mit dem nächsten Abschnitt können Sie noch einstellen in welchen Subnetzen die Rekursion verfügbar werden soll.

     allow-recursion {
          127.0.0.1;
          192.168.10.0/24;
          192.168.11.0/24;
          };

Damit die Anfragen auch weitergeleitet werden können, müssen Sie noch die Adressen der DNS-Server angeben, an welche die Anfrage weitergeleitet wird beziehungsweise welche Nameserver dem Client zurückgegeben werden.

     forwarders {
          192.168.10.2;
          };

Mit der nächsten Option wird festgelegt das ausgehende DNS-Anfragen nur über den Port 53 laufen.

     query-source address * port 53;

Damit ein Angreifer nicht die BIND-Version auslesen kann, fügen Sie noch die folgende Zeile im Options-Abschnitt ein.

     version "REFUSED";
     };

Am Ende der named.conf werden noch die Zonen angegeben welche der DNS-Server verwalten soll. Die erste Zone ist die Root-Zone in welcher die Adressen der Root-Nameserver definiert werden.

zone "." IN {
     type hint;
     file "named.ca";
     };

Der darauf folgende Abschnitt ist für die Domain home.lan in welcher sich die Clients befinden. Als type geben wir master an da wir diesen DNS-Server als Master für die Domain home.lan verwenden wollen. Für die Zuordnung der Domainnamen wird die Datei  home.lan.zone verwendet auf welche wir später noch zurückkommen werden. Des Weiteren wird das Updaten der Zonendatei erlaubt und der dazugehörige rndc-Schlüssel angegeben.

zone "home.lan" IN {
     type master;
     file "home.lan.zone";
     allow-update { key "rndc-key"; };
     notify yes;
     };

Mit der Zone home.lan können Sie einen Rechnernamen in dessen IP-Adresse auflösen. Um einen Rechnernamen zu ermitteln von welchem nur die IP-Adresse bekannt ist, wird das so genannte Reverse-Lookup verwendet.

Damit Sie auch Reverse-Lookup verwenden können, müssen Sie noch die Zone anlegen. Da wir hier die IP-Adressen 192.168.10.x verwenden, wird die Zone 10.168.192.in-addr.arpa heißen.

zone "10.168.192.in-addr.arpa" in {
     type master;
     file "192.168.10.zone";
     allow-update { key "rndc-key"; };
     notify yes;
     };

Hiermit ist die named.conf vollständig und kann gespeichert werden.

Wie bereits erwähnt, existiert für jede Zone eine eigene Datei in welcher die Zuordnungen hinterlegt sind. Für die Root-Zone müssen Sie nur die Vorlage nach /var/named/chroot/var/named/ kopieren.

[root@centos6 ~]# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.ca /var/named/chroot/var/named/

Die Zonendatei für die Zone home.lan wurde bereits im dazugehörigen Zoneneintrag angegeben und muss jetzt noch erstellt werden. In diesem Beispiel wäre dies die Datei /var/named/home.lan.zone.

[root@centos6 ~]# vi /var/named/chroot/var/named/home.lan.zone

Diese Datei enthält zuerst einige Zoneninformationen wie zum Beispiel die Adresse des FTP-, Mail-, Name- und NTP-Servers. Des Weiteren werden alle DNS-Namen und IP-Adressen eingetragen welche über den DNS-Server aufgelöst werden sollen. Für die hier beschriebene Beispielkonfiguration könnte die home.lan.zone wie folgt aufgebaut sein.

$ORIGIN .
$TTL 172800     ; 2 days
home.lan                IN SOA  server.home.lan. root.server.home.lan. (
                                2012101100 ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      server.home.lan.
                        MX      10 server.home.lan.
$ORIGIN home.lan.
ftp                     CNAME   server
mail                    CNAME   server
ns                      CNAME   server
ntp                     CNAME   server
router                  A       192.168.10.2
server                  A       192.168.10.1

Jetzt muss noch die Datei für das Reverse-Lookup erstellt werden. Wie in der named.conf festgelegt, wird dazu die Datei /var/named/192.168.10.zone verwendet.

[root@centos6 ~]# vi /var/named/chroot/var/named/192.168.10.zone

Der Aufbau dieser Datei ist ähnlich zu der soeben erstellten home.lan.zone. Hier wird allerdings zuerst die IP-Adresse angegeben und danach der Domainname.

$ORIGIN .
$TTL 172800     ; 2 days
10.168.192.in-addr.arpa IN SOA  server.home.lan. root.server.home.lan. (
                                2012101100 ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      server.
$ORIGIN 10.168.192.in-addr.arpa.
1                       PTR     server.home.lan.
2                       PTR     router.home.lan.

Nachdem Sie die Zonendateien erstellt haben, ändern Sie noch die Zugriffsberechtigungen.

[root@centos6 ~]# chown named:named /var/named/chroot/var/named/home.lan.zone /var/named/chroot/var/named/192.168.10.zone

Damit das Updaten der Zonendateien aktiviert wird, müssen Sie dies noch in der /etc/sysconfig/named erlauben.

[root@centos6 ~]# vi /etc/sysconfig/named

Fügen Sie die folgende Zeile in die Datei ein.

ENABLE_ZONE_WRITE=yes

Da in diesem Beispiel der DNS-Server in einer Chroot-Umgebung gestartet werden soll, müssen Sie noch ein weiteres Verzeichnis und darin die Datei managed-keys.bind anlegen.

[root@centos6 ~]# mkdir /var/named/chroot/var/named/dynamic
[root@centos6 ~]# touch /var/named/chroot/var/named/dynamic/managed-keys.bind

Damit der Benutzer named, unter welchem der Nameserver ausgeführt wird, auf dieses Verzeichnis zugreifen kann, müssen Sie die Zugriffsrechte wie folgt setzen.

[root@centos6 ~]# chown -R named:named /var/named/chroot/var/named/dynamic/
[root@centos6 ~]# chmod 0770 /var/named/chroot/var/named/dynamic/

Überprüfen Sie anschließend die Zugriffsrechte wie folgt.

[root@centos6 ~]# ls -lad /var/named/chroot/var/named/dynamic/
drwxrwx---. 2 named named 4096 11. Okt 10:02 /var/named/chroot/var/named/dynamic/
[root@centos6 ~]# ls -la /var/named/chroot/var/named/dynamic/managed-keys.bind
-rw-r--r--. 1 named named 0 11. Okt 10:02 /var/named/chroot/var/named/dynamic/managed-keys.bind

DNS-Server starten

Wenn Sie alle Einstellungen vorgenommen haben, müssen Sie noch den UDP-Port 53 und den TCP-Port 53 in der Firewall freigeben. Dazu rufen Sie die folgenden Befehle auf.

[root@centos6 ~]# iptables -I INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
[root@centos6 ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT

Speichern Sie anschließend die erstellten Firewall-Regeln mit dem folgenden Befehl dauerhaft in die /etc/sysconfig/iptables.

[root@centos6 ~]# service iptables save

Nachdem Sie die Firewall-Regel dauerhaft gespeichert haben, können Sie den DNS-Server starten.

[root@centos6 ~]# service named start

Damit auch Ihr Server in der Lage ist eine Namensauflösung über den DNS-Server durchzuführen, müssen Sie diesen in der resolv.conf bekannt geben.

[root@centos6 ~]# vi /etc/resolv.conf

Fügen Sie hier die folgenden Zeilen ein.

search home.lan
nameserver 192.168.10.1

Um den DNS-Server zu testen, können Sie die folgenden Befehle verwenden. Mit dem ersten Befehl wird die Namensauflösung überprüft.

[root@centos6 ~]# host server.home.lan

Als Ergebnis erhalten Sie folgende Ausgabe in welcher Sie die IP-Adresse überprüfen sollten.

server.home.lan has address 192.168.10.1

Der zweite Befehl überprüft den Reverse-Lookup-Eintrag für die IP-Adresse des Servers.

[root@centos6 ~]# host -i 192.168.10.1

Die Ausgabe sollte wie folgt aussehen.

1.10.168.192.in-addr.arpa domain name pointer server.home.lan.

Sollten diese Befehle eine fehlerhafte Ausgabe ausgeben, überprüfen Sie die Zonendateien, die named.conf sowie das Logfile.

[root@centos6 ~]# tail -f /var/log/messages | grep named

Sobald der DNS-Server funktioniert, können Sie die Init-Skripte für den named erstellen. Dadurch wird dieser beim Systemstart automatisch gestartet.

[root@centos6 ~]# chkconfig named on

DHCP-Server konfigurieren

Damit der DHCP-Server den Nameserver über die vergebenen IP-Adressen informiert und die Rechnernamen übergibt, müssen Sie an der dhcpd.conf einige Änderungen vornehmen.

[root@centos6 ~]# vi /etc/dhcp/dhcpd.conf

Zuerst fügen Sie den folgenden Abschnitt für den rndc-Schlüssel ein. Bei der Option secret geben Sie den Schlüssel aus der /etc/rndc.key an.

key rndc-key {
     algorithm hmac-md5;
     secret "ZoSPmwAle0DiJTOrBVfYvw==";
     };

Anschließend ändern Sie die Option ddns-update-style wie folgt ab.

ddns-update-style interim;

Zum Schluss fügen Sie noch die Lookup- und Reverse-Lookup-Zonen ein welche aktualisiert werden sollen.

zone home.lan. {
     primary 127.0.0.1;
     key rndc-key;
     }

zone 10.168.192.in-addr.arpa. {
     primary 127.0.0.1;
     key rndc-key;
     }

Nachdem Sie die dhcpd.conf abgespeichert haben, müssen Sie den DHCP-Server neu starten.

[root@centos6 ~]# service dhcpd restart

Logdatei überprüfen

Wenn Sie jetzt die Logdatei /var/log/messages überprüfen, sollten Sie beim Anmelden eines neuen Clients die folgenden Meldungen vorfinden. Wie Sie an den Logmeldungen sehen, fordert hier ein Client eine neue IP-Adresse vom DHCP-Server an. Anschließend wird der Domainname des Clients mit der dazugehörigen IP-Adresse in die Zonendateien des Nameservers eingetragen.

Oct 10 10:14:20 centos6 dhcpd: DHCPDISCOVER from 00:27:10:a7:1f:04 via eth0
Oct 10 10:14:20 centos6 dhcpd: DHCPOFFER on 192.168.10.105 to 00:27:10:a7:1f:04 (windows7) via eth0
Oct 10 10:14:20 centos6 named[19867]: update-security: info: client 127.0.0.1#51823: signer "rndc-key" approved
Oct 10 10:14:20 centos6 named[19867]: update: info: client 127.0.0.1#51823: updating zone 'home.lan/IN': adding an RR at 'windows7.home.lan' A
Oct 10 10:14:20 centos6 named[19867]: update: info: client 127.0.0.1#51823: updating zone 'home.lan/IN': adding an RR at 'windows7.home.lan' TXT
Oct 10 10:14:20 centos6 dhcpd: Added new forward map from windows7.home.lan to 192.168.10.105
Oct 10 10:14:20 centos6 named[19867]: update-security: info: client 127.0.0.1#41263: signer "rndc-key" approved
Oct 10 10:14:20 centos6 named[19867]: update: info: client 127.0.0.1#41263: updating zone '10.168.192.in-addr.arpa/IN': deleting rrset at '105.10.168.192.in-addr.arpa' PTR
Oct 10 10:14:20 centos6 named[19867]: update: info: client 127.0.0.1#41263: updating zone '10.168.192.in-addr.arpa/IN': adding an RR at '105.10.168.192.in-addr.arpa' PTR
Oct 10 10:14:20 centos6 named[19867]: notify: info: zone 10.168.192.in-addr.arpa/IN: sending notifies (serial 2012101103)
Oct 10 10:14:20 centos6 dhcpd: added reverse map from 105.10.168.192.in-addr.arpa. to windows7.home.lan
Oct 10 10:14:20 centos6 dhcpd: DHCPREQUEST for 192.168.10.105 (192.168.10.1) from 00:27:10:a7:1f:04 (windows7) via eth0
Oct 10 10:14:20 centos6 dhcpd: DHCPACK on 192.168.10.105 to 00:27:10:a7:1f:04 (windows7) via eth0

Wenn sich der Client abmeldet und die ihm zugewiesene IP-Adresse freigibt, werden die entsprechenden Einträge in den Zonendateien wieder gelöscht.

Oct 10 10:15:40 centos6 named[19867]: update-security: info: client 127.0.0.1#60606: signer "rndc-key" approved
Oct 10 10:15:40 centos6 named[19867]: update: info: client 127.0.0.1#60606: updating zone 'home.lan/IN': deleting an RR at windows7.home.lan A
Oct 10 10:15:40 centos6 dhcpd: if windows7.home.lan IN TXT "31347f59d295bd3af2718d0777987de522" rrset exists and windows7.home.lan IN A 192.168.10.105 rrset exists delete windows7.home.lan IN A 192.168.10.105: success.
Oct 10 10:15:40 centos6 named[19867]: update-security: info: client 127.0.0.1#59664: signer "rndc-key" approved
Oct 10 10:15:40 centos6 named[19867]: update: info: client 127.0.0.1#59664: updating zone 'home.lan/IN': deleting an RR at windows7.home.lan TXT
Oct 10 10:15:40 centos6 dhcpd: if windows7.home.lan IN A rrset doesn't exist and windows7.home.lan IN AAAA rrset doesn't exist delete windows7.home.lan IN TXT "31347f59d295bd3af2718d0777987de522": success.
Oct 10 10:15:40 centos6 named[19867]: update-security: info: client 127.0.0.1#52909: signer "rndc-key" approved
Oct 10 10:15:40 centos6 named[19867]: update: info: client 127.0.0.1#52909: updating zone '10.168.192.in-addr.arpa/IN': deleting rrset at '105.10.168.192.in-addr.arpa' PTR
Oct 10 10:15:40 centos6 named[19867]: notify: info: zone 10.168.192.in-addr.arpa/IN: sending notifies (serial 2012101104)
Oct 10 10:15:40 centos6 dhcpd: removed reverse map on 105.10.168.192.in-addr.arpa.
Oct 10 10:15:40 centos6 dhcpd: DHCPRELEASE of 192.168.10.105 from 00:27:10:a7:1f:04 (windows7) via eth0 (found)


Dieser Eintrag wurde am 11.10.2012 erstellt.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_33_1894.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer