Debian DHCP DNS
Allgemein
Heutige DSL-Router bieten bereits die Möglichkeit, Clients dynamische eine IP-Adresse per DHCP zu vergeben. Sie bieten auch Nameserver Funktionalität. D.h. Clients via Namen, anstatt via IP-Adresse anzusprechen.
Die in Heimroutern eingebauten DHCP- und DNS-Server bieten nicht die vollen Möglichkeiten und Konfigurationsoptionen von "ausgewachsenen" DHCP- und DNS-Servern. Im Folgenden wird beschrieben, wie die Linux- Standard DHCP- (ISC-DHCP-SERVER) und DNS-Server (BIND9) installiert und konfiguriert werden.
Der Nameserver benötigt eine interne Domain (INT_DOMAIN), die sich von einer evtl. extern zugänglichen Domain (z.B. via DynDNS) unterscheiden sollte, da es ansonsten zu Problemen mit der Namensauflösung kommt. Häufig wird für interne Domains example.com verwendet. Die Fritzboxen verwenden fritz.box. Es könnte aber z.B. auch test.lan oder dergleichen verwendet werden. Der Domainnamen und Nameserver wird den Clients via DHCP-Server bekannt gegeben. Bei Clients mit statischen IP-Adressen, muss sowohl die Domain als auch die IP-Adresse des Nameserver manuell konifuriert werden. Es ist auch möglich, Clients via DHCP immer die selbe IP-Adresse zuteilen zu lassen.
DHCP-Server
Allgemein
Dem DHCP-Server muss die interne Domain bekant gegeben werden, damit dieser die Domain an die clients weitergeben kann. Desweiteren ist die Adresse des Nameservers erforderlich. Auch der Standardgateway kann mittels option routers bekannt gegeben werden. Die Lease-Time (Gültigkeitsdauer einer zugeteilten IP-Adresse ist konfigurierbar. Die Default-Lease-Time definiert die Zeit, nachdem der Client eine neue Anfrage an den DHCP-Server sendet, um die zugeteilte IP-Adresse zu verlängern. Üblicherweise senden Clients nach der Hälfte der Default-Lease-Time eine Anfrage an den Server. Die Max-Lease-Time bestimmt die Zeit, nach der eine zugeteilte IP-Adfresse wieder frei wird, wenn der jeweilige Client keine Anfrage zur Verlängerung der Zuteilung sende. Beide Zeiten werden in Sekunden angegeben. Die Standardwerte sind relativ kurz, sodass sehr viele Anfragen an den Server gesendet werden, und IP-Adressen relativ schnell bei Inaktivität verfallen. Im Folgenden wird deshalb als Default-Lease ein Tag (86400 s) und als Max-Lease eine Woche (2073600 s) verwendet. Die Zeiten evtl. eigenen Belangen anpassen.
Installation
apt-get install isc-dhcp-server
Konfiguration
vi /etc/dhcp/dhcpd.conf
Folgende Einstellungen vornehmen.
option domain-name INT_DOMAIN; option domain-name-servers IP_Des_DNS-Servers; default-lease-time 86400; max-lease-time 2073600; authoritative;
Mittels einer Subnet-Definition wird dem DHCP-Server der IP-Bereich mitgeteilt, aus dem er die IP-Adressen zuteilen soll. Dieser Bereich wird mit der range Direktive festgelegt.
subnet 192.168.178.0 netmask 255.255.255.0 { range 192.168.178.20 192.168.178.120; option subnet-mask 255.255.255.0; option broadcast-address 192.168.178.255; option routers 192.168.175.1; option domain-name-servers 192.168.178.1; }
Durch obiges Beispiel wird festgelegt, dass der zu verwendende IP-Bereich des Netzwerks von 192.168.178.1 bis 192.168.178.254 liegt. Es werden dynamische Adressen im Bereich 192.168.178.20 bis 192.168.178.120 vergeben. Der Router (z.B. Fritzbox) hat die Adresse 192.168.178.1. Als DNS-Server wird hier die selbe IP-Adresse verwendet.
Statische DHCP-Hosts
Einzelnen Rechnern z.B. Server kann vom DHCP-Server immer die selbe IP-Adresse vergeben werden, damit sich diese nicht ändert. Dies geschieht mit einem Host-Block. Die Adressen fest vergebener Hosts sollte außerhalb des dynamischen IP-Bereiches liegen. Statische Hosts werden im Subnet-Bereich der dhcpd.conf festgelegt.
vi /etc/dhcp/dhcpd.conf
Z.B. Webserver:
subnet 192.168.178.0 netmask 255.255.255.0 { range 192.168.178.20 192.168.178.120; option subnet-mask 255.255.255.0; ... host webserver { hardware ethernet 00:50:C2:20:01:D9; fixed-address 192.168.178.250; hostname="webserver"; } }
Der DHCP-Server erkennt den Host an der MAC-Adresse (Eintrag hardware ethernet) und teilt dem Webserver immer die Adresse 192.168.178.250 zu. Dem Host wird der Name webserver vergeben.
Neustart DHCP-Server
/etc/init.d/isc-dhcp-server restart
Workaround für Windows Clients
Im Internet kursieren zahlreiche Meldungen, dass manche Windows Clients jede Minute ein "DHCPINFORM" an den DHCP-Client senden, um eine automatische Proxy Konfiguration für Webbrowser in Erfahrung zu bringen. Eigentlich sollten sie dies nur einmal nach dem Booten erledigen und dann eine Abfrage an den DNS-Server stellen. Unter bisher nicht näher bekannten Umständen, senden manche Clients permanent Anfragen an den DHCP-Server. Mit Hilfe des folgenden Workarounds kann den Clients vom DHCP-Server mitgeteilt werden, dass es keinen Proxy-Server und damit keine automatische Proxy Konfiguration gibt:
Im globalen Bereich der Konfiguration (vor dem Subnet Statement) folgende Zeile einfügen:
Option wpad-url code 252 = text
Innerhalb des Subnet-Statements:
Option wpad-url "\n\000";
Die Konfiguration sieht dann in etwa folgendermaßen aus:
... Option wpad-url code 252 = text subnet 192.168.178.0 netmask 255.255.255.0 { range 192.168.178.20 192.168.178.120; option subnet-mask 255.255.255.0; Option wpad-url "\n\000"; ...
DNS-Server
Allgemein
Bind verwaltet die Hosts in sog. Zonen (zones). Die Namensauflösung erfolgt in zwei Richtungen. Die Forward- Resolution wandelt einen Namen in eine IP-Adresse um. Z.B. im obigen Beispiel webserver => 192.168.178.250. Die Reverse- Auflösung bestimmt den Hostnamen, der zu einer IP-Adresse gehört. Z.B. 192.168.178.250 => webserver. Für die Forward- und Reverse Namensauflösung ist jeweils eine Zone erforderlich.
Installation
apt-get install bind
Konfiguration
Übergeordneten Nameserver konfigurieren. Hier kann entweder der DNS-Server des DSL-Routersverwendet werden, oder direkt der (oder die) Nameserver des DSL Providers eingetragen werden.
vi /etc/bind/named.conf.options
Den Bereich forwarder konfigurieren:
forwarders { 212.18.0.5; 212.18.3.5; 212.114.152.1; 212.114.153; 192.168.178.1; };
Hier beispielhaft die 4 Nameserver von M-Net und zusätzlich der DNS-Server des DSL-Routers (193.168.178.1). Die DNS-Server werden der Reihenfolge nach abgefragt.
Konfiguration der Zonen:
vi /etc/bind/named.conf.local
Folgende Zeilen einfügen und anpassen (z.B. Domainname: test.lan ; Jeweils am Ende den Punkt beachten):
zone "test.lan." { type master; file "/var/lib/bind/zone.test.lan"; notify no; }; zone "178.168.192.in-addr.arpa." { type master; file "/var/lib/bind/zone.reverse.lan"; notify no; };
Definition der Forward-Zone:
vi /var/lib/bind/zone.test.lan
Folgende Zeilen einfügen und anpassen:
$ORIGIN . $TTL 1d test.lan IN SOA ns.test.lan. root.test.homelinux.org. ( 1355090479 ; serial 43200 ; refresh (12 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 3600 ; nxdomain (1 hour) ) NS ns.test.lan. $ORIGIN test.lan. $TTL 1d fritzbox A 192.168.178.1 mailserver A 192.168.178.253 ns CNAME server server A 192.168.178.254 smtp CNAME mailserver webserver A 192.168.178.250
Hier die Erklärung der einzelnen Zeilen, die auf den ersten Blick nicht gerade selbst erklärend sind:
- Zeile 1-10: Definition von Nameserver, Refresh-Rate usw.
- Zeile 3: Domain test.lan
- Nameservername: ns.test.lan (Punkt am Ende sehr wichtig)
- Emailadresse von root (@-Zeichen durch . ersetzen. Punkt am Ende sehr wichtig): Email-Adresse=root@test.homelinux.org => root.test.homelinux.org.
- Zeile 10: Nameserver nochmals aufgeführt
- ab Zeile 11: Definition der Hosts, die vom DNS-Server verwaltet werden
- Zeile 14: Der Hosteintrag mailserver bekommt die IP-Adresse 192.168.178.253 zugeteilt (A- Eintrag)
- Zeile 15: Der Host ns ist ein Alias (CNAME-Eintrag) für server
- Zeile 16: Der server (und damit auch der Nameserver in diesem Fall) hat schließlich die IP-Adresse 192.168.178.254
Definition der Reverse-Zone:
vi /var/lib/bind/zone.reverse.lan
Folgende Zeilen einfügen und anpassen:
$ORIGIN . $TTL 1d 178.168.192.in-addr.arpa IN SOA ns.test.lan. root.test.homelinux.org. ( 1355092058 ; serial 43200 ; refresh (12 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 38400 ; nxdomain (1 hour) ) NS ns.test.lan. $ORIGIN 178.168.192.in-addr.arpa. $TTL 1d 1 PTR fritzbox.test.lan. 250 PTR webserver.test.lan. 253 PTR mailserver.test.lan. 254 PTR server.test.lan
In der Reverse-Zone werden die IP-Adressen in umgekehrter Reihenfolge angegeben. Aus 192.168.178.1 wird 1.178.168.192 wird. Die Zone wird durch die ersten drei Stellen des IP-Adressbereichs gebildet und in-addr.arpa angehängt.
DNS-Server neu starten:
/etc/init.d/bind9 restart
Clients einrichten
Clients (sowohl Windows, als auch Linux und Smartphones), die Ihre IP-Adresse via DHCP-Server beziehen, bekommen bei korrekter Konfiguration automatisch die IP-Adresse des DNS-Servers mitgeteilt. Bei statischen Clients muss die IP-Adresse des Nameservers manuell koniguriert werden.
Linux-Client
Auf allen Clients (dynamisch per DHCP und statisch) und auch auf dem DNS-Server:
vi /etc/resolv.conf
Folgende Zeilen einfügen und anpassen:
domain test.lan search test.lan nameserver IP_des_DNS-Server
Zusätzlich nur auf statischen Linux-Clients:
vi /etc/network/interfaces
Folgende Einstellungen vornehmen:
iface eth0 inet static address 192.168.178.254 netmask 255.255.255.0 gateway 192.168.178.1 dns-nameservers 192.168.178.254 dns-search test.lan
Statischer Windows-Client
Eigenschaften der Netzwerkkarte öffnen und unter TCP/IP V4 folgende Einstellungen vornehmen:
- Haken bei folgende IP-Adresse verwenden:
- IP-Adresse: Die ersten drei Stellen identisch mit derjenigen des DNS-Servers. Z.B. 192.168.178.170
- Subnetzmaske: 255.255.255.0
- Standardgateway: IP_des_Routers
- Haken bei folgende DNS-Serveradressen verwenden:
- Bevorzugter DNS-Server: IP_des_DNS_Server. Z.B. 192.168.178.254
- Alternativer DNS-Server: IP_des_Routers
Funktionstest
Auf dem DNS-Server ausführen:
- Forward lookup:
nslookup host z.B. nslookup webserver
Die Ausgabe sieht dann so aus:
Server: 192.168.178.255 Address: 192.168.178.254#53 Name: webserver.test.lan Address: 192.168.178.250
- Reverse lookup:
nslookup IP-Adresse z.B. nslookup 192.168.178.25.0
Die Ausgabe sieht dann so aus:
Server: 192.168.0.254 Address: 192.168.0.254#53 250.178.168.192.in-addr.arpa name = webserver.test.lan.
Dynamische DNS-Updates
Anstatt die Zonendefinitonsfiles händisch zu ändern un BIND anschließend neu zu starten, können die Zonen des Nameservers auch dynamisch im laufenden Betrieb angepasst werden. Dies kann einerseits manuell via nsupdate-Befehl, als auch dynamisch vom DHCP-Server aus, sobald dieser eine neue IP-Adresse vergeben hat.
Dynamischen DNS-Update konfigurieren
vi /etc/bind/named.conf.local
Folgende Ergänzungen durchführen:
- Vor den zone-Blöcken einfügen:
include "/etc/bind/rndc.key";
- Forward Zone:
zone "test.lan." { type master; file "/var/lib/bind/zone.test.lan"; notify no; allow-update { key "rndc-key"; }; };
- Reverse Zone:
zone "178.168.192.in-addr.arpa." { type master; file "/var/lib/bind/zone.reverse.lan"; notify no; allow-update { key "rndc-key"; }; };
BIND neu starten:
/etc/init.d/bind restart
Update via Befehl
nsupdate -k /etc/bind/rndc.key
Eine Shell-ähnliche Oberfläche erscheint mit einem ">" - Prompt. Diese nsupdate-Shell kann jederzeit mit CTRL+D verlassen werden.
server ns
- Eintrag einfügen:
update add host ttl type IP-Adresse send
- Forwad Zone:
Z.B. update add downloader.test.lan. 38400 A 192.168.178.252 send
- Forward Alias:
update add downloadserver.test.lan. 38400 CNAME downloader.test.lan.
- Reverse Zone:
Z.B update add 252.178.168.192.in-addr.arpa. 38400 PTR downloader.test.lan.
- Eintrag löschen:
update delete downloadserver.test.lan.
- nsupdate shell verlassen: CTRL+D
Update via DHCP-Server
Der DHCP-Server kann direkt bei Zuteilung einer IP-Adresse auch den Nameserver aktualisieren. Vorausswtzung dafür ist, dass der Client seinen Host-Namen zum DHCP-Server sendet. Windows-Clients tun dies automatisch. Linux-Clients müssen dafür konfiguriert werden.
DHCP-Server konfigurieren
vi /etc/dhcp/dhcpd.conf
Folgende Änderungen durchführen (for der subnet-Definition; im primary-Eintrag die IP-Adresse des DNS-Servers eintragen z.B. 192.168.178.254;):
include "/etc/bind/rndc.key"; ddns-update-style interim; ddns-updates on; ddns-domainname "test.lan."; ddns-rev-domainname "in-addr.arpa."; zone 178.168.192.in-addr.arpa. { primary 192.168.178.254; key "rndc-key"; } zone test.lan. { primary 192.168.178.254; key "rndc-key"; }
Linux-Client
Linux-Clients senden ihren Hostnamen standardmäßig nicht zum DHCP-Server. Dadurch kann der DHCP-Server den DNS-Server nicht aktualisieren. Um dies zu umgehen, muss die Konfiguration von dhclient erweitert werden:
vi /etc/dhcp/dhclient.conf
Folgenden Eintrag einfügen (oder Kommentarzeichen entfernen):
send host-name "laptop";
Der Hostname sollte ohne Domainnamen eingetragen werden.
Funktionstest Linux-Client
Am Client folgenden Befehl ausführen:
dhclient eth0 bzw. dhclient wlan0
An einem anderen Rechner (z.B. auf dem DNS-Server):
nslookup host z.B. nslookup laptop
Es sollte nun die IP-Adresse des Hosts ausgegeben werden.
nslookup IP-Adresse_Client
Es sollte nun der Host-Name ausgegeben werden (hier laptop.test.lan).