Artikel mit ‘Dynamischer DNS’ getagged

Einrichten einer dynamischen DNS aktualisierung auf dem eigenen DNS-Server

Mittwoch, 09. Februar 2011

Problem:

In einer Außenstelle ist ein Linux-Server der von Außen erreichbar sein soll. Das Problem ist, dass diese Niederlassung einen „normalen“ Internetanschluß, mit dynamischer IP-Adresse, hat.

Lösung:

auf dem DNS-Server:
System: Debian Lenny
Voraussetzung: BIND9 muss als DNS-Server laufen.

Nicht jeder soll die IP-Adresse ändern dürfen, daher muss eine Authentifizierung eingerichtet werden. Die Authentifizierung soll über einen Privaten und einen öffentlichen Schlüßel passieren.

Zuerst müssen wir die Schlüßel, für die Authentifizierung, erzeugen (dies dauert je nach Hardware relativ lange):

Es gibt mehrere Verschlüsselungsvarianten hier wird RSASHA1 als Verschlüsselungsvariante verwendet.

cd /var/cache/bind/
dnssec-keygen -a RSASHA1 -b 1024 -k -n HOST hostname.domain.tld

hostname und domain.tld an die entsprechende Domain anpassen.

Danach muss in der Zonendatei /var/cache/bind/domain.tld.db eine Änderung vorgenommen werden.

$ORIGIN .
$TTL 600
domain.tld          IN SOA  ns.domain.tld. hostmaster.domain.tld. (
                                200804111  ; serial
                                28800      ; refresh (8 hours)
                                7200       ; retry (2 hours)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      ns.domain.tld.
                        NS      ns.andere-domain.tld.
                        MX      10 mail1.domain.tld.
                        MX      20 mail2.domain.tld.
$ORIGIN domain.tld.
$INCLUDE /etc/bind/Kzuhause.domain.tld+005+12345.key
www                  A       123.456.789.1

und in der Datei /etc/bind/named.conf muss folgendes für jede Domain geändert, werden die per dynamischem DNS geändert werden soll.

//
// Do any local configuration here
//
// vi: ts=4 sw=4

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "domain.tld" {
    type master;
    notify no;
    file "/etc/bind/db.domain.tld";

    update-policy {
        grant .domain.tld. name .domain.tld. A TXT;
    };
};

Der angegebene Host darf nun die beiden Einträge A und TXT ändern.
Der Server ist nun vorbereitet, jetzt kommt die Hostkonfiguration.

auf dem Client-Host:
Voraussetzungen:
Installierte Packete:
bind-utils, lynx

Als erstes müssen die vorher erstellen Schlüßeldateien auf den Host-Computer kopiert werden.

Mit diesem Script erledigt man das Update der IP-Adresse auf dem DNS-Server automatisch.

#!/bin/sh
# ddns.sh
# Update des DNS via nsupdate
# Usage: ddns.sh
TTL=3600
SERVER=<DNS-Server-IP>
HOSTNAME=.domain.tld
KEYFILE=K.domain.tld.+005+12345.key
IP=`lynx -dump www.bl-its.at | grep "Ihre IP Adresse" -A 1 | tail -n 1`

nsupdate -v -k $KEYFILE > /dev/null << EOF
server $SERVER
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $IP
send
exit

Die Appostroph-Zeichen „`“ müssen nach rechts geneigt sein ansonsten funktioniert das Script nicht. Auf der Seite „www.bl-its.at“ wir unter anderem auch die IP-Adresse des anfragenden Hosts angezeigt. Es kann natürlich jede beliebige Seite verwendet werden, die die öffentliche IP-Adresse anzeigt.

Anschließend noch einen CRON-Job anlegen und alle x-Minuten (in meinem Fall alle 30 Minuten) wird die aktuelle öffentliche IP-Adresse im DNS-Server eingetragen.

vi /etc/crontab

folgendes hinzufügen:

*/30 * * * * root /root/ddns.sh

Fertig!

Nochmal zu sicherheit testen ob alles OK ist.