Debian DHCP DNS

Aus Wiki
Zur Navigation springen Zur Suche springen

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).