Skip to content

DHCP-Server und automatische DNS-Zone-Updates

Für lokale Netze ist ein DHCP-Server eine nützliche Einrichtung, ermöglicht er doch die automatische Adreßvergabe. Die meisten Consumer-DSL-Router (und nicht nur diese) haben entsprechende Funktionalitäten eingebaut; noch schöner und flexibler ist es aber natürlich, selbst einen entsprechenden Dienst bereitzustellen, weil man ihn dann genau so konfigurieren kann, wie man ihn gerne hätte, um neben der automatischen Vergabe von IP-Adressen auch bestimmten Rechnern feste Adressen zuzuweisen und zugleich im internen Netz eine Namensauflösung zu organisieren.

Dafür bedarf es im Prinzip dreierlei:

  • Zunächst benötigt man einen DHCP-Server (dhcpd), bspw. den des ISC, der dann so konfiguriert werden muß, daß er die erwünschten Adressen an die Clients zuweist.
  • Dann benötigt man einen DNS-Server, bspw. den BIND des ISC, der dann so konfiguriert werden muß, daß er Namen im lokalen Netz zu IPs auflöst und umgekehrt lokale IPs zu den richtigen Namen.
  • Und letztlich muß man in einem zweiten Schritt die beiden so miteinander verheiraten, daß der DHCP-Server dem DNS-Server erzählt, welche IPs er an welche Maschinen dynamisch vergeben hat.

All das ist vergleichsweise einfach unter Debian möglich.

Im folgenden Beispiel gehe ich davon aus, daß das lokale Netz den IP-Bereich von 10.0.0.1-10.0.0.254 (10.0.0.1/24) umfassen soll und die Domain example.org verwendet wird. Der Host, auf dem DHCP- und DNS-Server laufen, heißt server.example.org und hat die (fest konfigurierte) IP-Adresse 10.0.0.1.

1. Installation und Einrichtung des DNS-Servers

aptitude -r install bind9

Die DNS-Zonen für das lokale Netz sollen später dynamische Updates zulassen; aufgrund der dann notwendigen Schreibrechte für den Benutzer bind auf diese Dateien darf man sie unter Debian nicht in /etc/bind/ anlegen, sondern im dafür vorgesehenen Verzeichnis /var/lib/bind. Also legen wir eine Zone-Datei /var/lib/bind/example.org für die Vorwärtsauflösung an, in der auch schon die Maschinen stehen, die feste IP-Adressen vergeben bekommen sollen:

$ORIGIN .
$TTL 604800     ; 1 week
example.org            IN SOA  server.example.org. hostmaster.server.example.org. (
                                2011012101 ; serial
                                28800      ; refresh (8 hours)
                                7200       ; retry (2 hours)
                                604800     ; expire (1 week)
                                39600      ; minimum (11 hours)
                                )
                        NS      server.example.org.
$ORIGIN example.org.
server                  A       10.0.0.1
desktop                 A       10.0.0.11
laptop1                 A       10.0.0.21
laptop2                 A       10.0.0.22

Und dasselbe dann für die Rückwärtsauflösung:

$ORIGIN .
$TTL 604800     ; 1 week
0.0.10.in-addr.arpa            IN SOA  server.example.org. hostmaster.server.example.org. (
                                2011012101 ; serial
                                28800      ; refresh (8 hours)
                                7200       ; retry (2 hours)
                                604800     ; expire (1 week)
                                39600      ; minimum (11 hours)
                                )
                        NS      server.example.org.
$ORIGIN 0.0.10.in-addr.arpa.
1            PTR    server.example.org.
11            PTR    desktop.example.org.
21            PTR    laptop1.example.org.
22            PTR    laptop2.example.org.

Jetzt werden die Zonen in die Nameserver-Konfiguration eingebunden, und zwar durch Anpassen der Datei /etc/bind/named.conf.local:

zone "example.org" {
  type master;
  file "/var/lib/bind/zone.example.org";
};

zone "0.0.10.in-addr.arpa" {
  type master;
  file "/var/lib/bind/zone.10.0.0";
};

Nach einem Reload der Zonen (rndc reload) sollte die Auflösung vor- und rückwärts funktionieren, was man mit host laptop1.example.org und dann mit host 10.0.0.21 testen kann.

2. Installation und Einrichtung des DHCP-Servers

aptitude -r install isc-dhcp-server

Nun ist /etc/dhcp/dhcpd.conf (ggf. nach Sicherung der Originaldatei) anzupassen:

server-name Server;

option domain-name "example.org";
option subnet-mask 255.255.255.0;
option domain-name-servers 10.0.0.1; # der oder die DNS-Server

default-lease-time 86400; # 24 h
max-lease-time 172800;    # 48 h

authoritative;
ignore client-updates;

subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.101 10.0.0.199;          # DHCP-Adressen werden zwischen .101 und .199 vergeben
  option broadcast-address 10.0.0.255;
  option routers 10.0.0.200;            # das Gateway ins Internet, bspw. der DSL-Router
}

Das genügt zunächst einmal; nach einem /etc/init.d/isc-dhcp-server restart sollte der DHCP-Dienst funktionieren und IP-Adressen zwischen 10.0.0.101 und 10.0.0.199 vergeben. Die vergebenen Adressen lassen sich unter /var/lib/dhcp/dhcpd.leases ersehen.

Im Logfile (standardmäßig /var/log/daemon.log) kann man die Vergabe der Leases verfolgen; dort ersieht man auch die MAC-Adressen der Hosts, die sich per DHCP Adressen holen. Mit Hilfe dieser MAC-Adressen kann man dann den Hosts, die feste Adressen per DHCP vergeben erhalten sollen (im Beispiel sind das desktop, laptop1 und laptop2), ebensolche zuweisen. Nehmen wir an, desktop hat die MAC-Adresse 00:30:05:5a:db:a0, dann müßte der entsprechende Eintrag in der /etc/dhcp/dhcpd.conf folgendermaßen lauten:

host desktop {
  hardware ethernet 00:30:05:5a:db:a0;
  fixed-address 10.0.0.11;
}

Nach einem erneuten Restart des DHCP-Servers wird desktop jetzt immer fest diese DHCP-Adresse zugewiesen bekommen.

3. Dynamische Aktualisierung der DNS-Zonen

Der letzte Schritt sorgt jetzt dafür, daß durch den DHCP-Server dynamisch vergebene Adressen (10.0.0.101-199) in den Zonen-Dateien des Nameservers mit dem entsprechenden Namen erfasst werden. Diese Updates kann man entweder durch jedes Programm, das auf dem Server läuft, erlauben, oder kryptographisch absichern. Ich stelle hier ersteres dar.

Die Konfiguration des DNS-Servers in /etc/bind/named.conf.local ist folgendermaßen zu ergänzen:

zone "example.org" {
  type master;
  file "/var/lib/bind/zone.example.org";
  allow-update { localhost; };
};

zone "0.0.10.in-addr.arpa" {
  type master;
  file "/var/lib/bind/zone.10.0.0";
  allow-update { localhost; };
};

Reloaden der Konfiguration nicht vergessen!

Die Konfiguration des DHCP-Servers in /etc/dhcp/dhcpd.conf ist folgendermaßen zu ergänzen:

[...]

ddns-update-style interim;
ignore client-updates;

subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.101 10.0.0.199; # DHCP-Adressen werden zwischen .101 und .199 vergeben
  option broadcast-address 10.0.0.255;
  option routers 10.0.0.200; # das Gateway ins Internet, bspw. der DSL-Router
  ddns-domainname "gast.example.org"

  zone example.org. {
    primary 127.0.0.1;
  }

  zone 0.0.10.in-addr.arpa. {
    primary 127.0.0.1;
  }
}

Restart des DHCP-Servers nicht vergessen!

Nunmehr wird die Maschine, die sich - bspw. - als gastnetbook meldet und eine IP möchtet, bspw. die IP 10.0.0.105 zugewiesen bekommen; in die Nameserver-Zonen werden jetzt entsprechende Einträge für 10.0.0.105 und gastnetbook.gast.example.org vorgenommen. Das erfolgt zunächst in Dateien, die den Namen der jeweiligen Zone plus die Endung “.jnl” (für “Journal”) tragen; regelmäßig werden aber auch die Zonendateien aktualisiert.

Manuelle Änderungen der DNS-Zonen dürfen dann nicht mehr ohne weiteres vorgenommen werden! Zunächst müssen die dynamischen Updates unterbrochen werden, danach kann man Änderungen vornehmen und die dynamischen Updates wieder starten:

rndc freeze example.org
vim /var/lib/bind/zone.example.org
rndc thaw example.org

oder

rndc freeze 0.0.10.in-addr.arpa 
vim /var/lib/bind/zone.10.0.0
rndc thaw 0.0.10.in-addr.arpa

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Chief-Wiggem am :

Chief-Wiggem

Hallo,

als erstes vielen dank für dieses Tutorial es hat 1a funktioniert. Jetzt habe ich ein Windows 7 Notebook ins netz gepackt. Es bekommt per DHCP eine IP zugewiesen aber es wird nicht an den DNS-Server weiter gegeben. Was kann ich machen?

Kommentar schreiben

HTML-Tags werden in ihre Entities umgewandelt.
Markdown-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Gravatar, Identicon/Ycon Autoren-Bilder werden unterstützt.
Formular-Optionen