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.