Pimp my LAN: Eigenen DNS und DHCP

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

Dieses Tutorial ist alt uns sollte nicht mehr verwendet werden.

Von meinem ISP habe ich eine FritzBox bekommen. Ich kann mich noch an eine Zeit erinnern, in der man auf „Expertenansicht“ umgestellt hat und wesentlich mehr Einstellen konnte als jetzt. Mittlerweile ist die Box ein reiner dummer Kasten, der von außen über TR-69 provisioniert wird und auch (hoffentlich) vom Provider aktuell gehalten wird.

Wie auch immer: Für Menschen, die spezielle Bedürfnisse an ihr Heimnetzwerk haben ist die Box aber etwas unhandlich. Ausschlaggebend für einen „Wechsel“ der Softwaregrundlage war, dass ich meinen Homeserver ohne CD-Laufwerk und ohne USB-Stick zur Hand aufsetzen wollte. Das geht sehr schön übers Netzwerk – aber nur wenn der DHCP stimmt und die richtigen Informationen mitschickt.

Deshalb musste eine andere Softwaregrundlage her: DNS und DHCP. Und wo hostet man sowas? Am besten auf einem Gerät, dass permanent Läuft. In meinem Fall ist es das Raspberry Pi, das per USB an der FritzBox hängt und so Strom bekommt. Das Pi übernimmt noch andere Services im LAN, das ist jedoch ein anderes Thema.

DHCP Server

Planung und Adressverteilung

Aus gründen der Einfachheit habe ich mich entschieden statische IP-Adressen zu geben, damit der DHCP später nicht den DNS Server updaten muss.

Als erstes habe ich mir eine Liste mit allen Netzwerkgeräten und deren MAC-Adressen gemacht:

Gerät MAC-Adresse
Handy 5C:0A:5B:62:D0:E6
Tablet 50:46:5D:1A:3C:37
Homeserver D4:3D:7E:BC:58:FF
FritzBox 9C:C7:A6:AB:C8:87
Raspberry PI B8:27:EB:4D:12:3C
PC 74:D4:35:51:A1:56
Laptop 2C:D4:44:B4:C5:09 (Kabel)60:67:20:70:B7:C0 (WLAN)
TV CC:2D:8C:34:68:71

8 Geräte und 9 MAC-Adressen sind es insgesamt. 9 IP-Adressen müssen also statisch vergeben werden.

Folgender Adressplan ist also entstanden:

Adressbereich: 192.168.0.0/24

Subnetzmaske: 255.255.255.0

Domain-Name: veloc1ty.lan

Die FritzBox soll die erste mögliche Adresse erhalten, das Pi die zweite. Im praktischen Anwendungsfall ist es aber egal.

Gerät MAC-Adresse IP-Adresse
FritzBox 9C:C7:A6:AB:C8:87 192.168.0.1
Pi B8:27:EB:4D:12:3C 192.168.0.2
PC 74:D4:35:51:A1:56 192.168.0.3
Homeserver D4:3D:7E:BC:58:FF 192.168.0.4
Laptop (Kabel) 2C:D4:44:B4:C5:09 192.168.0.5
TV CC:2D:8C:34:68:71 192.168.0.6
Handy 5C:0A:5B:62:D0:E6 192.168.0.7
Tablet 50:46:5D:1A:3C:37 192.168.0.8
Laptop (WLAN) 60:67:20:70:B7:C0 192.168.0.9

Für eventuelle zukünftigen Geräte definiere ich einfach mal, dass dynamische Adressen erst ab 192.168.0.15 vergeben werden.

Konfiguration des Raspberry Pi

Ich schalte mich also auf das Raspberry Pi per SSH auf. Das Betriebssystem ist ein normales Raspbian. Bis jetzt ist der DHCP der FritzBox noch aktiv.

Für den DHCP installiere ich mit apt isc-dhcp-server.

apt-get install isc-dhcp-server

Nachdem dieser installiert ist wird er auch sofort wieder gestoppt, da ja noch der von der FritzBox aktiv ist. Zudem ist der neue ja noch total unkonfiguriert.

Die Konfigurationsdatei für den Server ist unter /etc/dhcp/dhcpd.conf zu finden.

Nach dem öffnen mit seinem Lieblingseditor löscht man zuerst alle Zeilen heraus.

In der ersten Zeile fügt man

authoritative;

ein.  Danach geht es auch schon los mit dem ersten (und einzigen) Subnetzdeklaration. Nach dieser Deklaration kommt ein globaler Bereich mit Informationen. Am Ende stehen dann die einzelnen Hosts, die statisch konfiguriert werden sollen.

Die gesamte Konfiguration sieht dann so aus:

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0
{
    #Adressbereich für dynamisch vergebene Adressen
    range 192.168.0.15 192.168.0.245;

    # Standardeubstellungen
    interface                    eth0;             # LAN-Port des Pi
    default-lease-time          21600;             # Sekunden
    max-lease-time                43200;

    # Options, die wichtig sind
    option routers                192.168.0.1;    # IP der FritzBox
    option broadcast-address    192.168.0.255;
    option subnet-mask            255.255.255.0;
    option domain-name-servers    192.168.0.2;    # Adresse des Pi

    # Options, die mitgegeben werden können
    option domain-name            "veloc1ty.lan"
    option ntp-servers            192.168.0.2;

    # Hostblöcke
    host fritz {
        hardware ethernet 9C:C7:A6:AB:C8:87;
        fixed-address 192.168.0.1;
    }

    host pi {
        hardware ethernet B8:27:EB:4D:12:3C;
        fixed-address 192.168.0.2;
    }

    host pc {
        hardware ethernet 74:D4:35:51:A1:56;
        fixed-address 192.168.0.3;
    }

    host homeserver {
        hardware ethernet D4:3D:7E:BC:58:FF;
        fixed-address 192.168.0.4;
    }

    host laptopLAN {
        hardware ethernet 2C:D4:44:B4:C5:09;
        fixed-address 192.168.0.5;
    }

    host tv {
        hardware ethernet CC:2D:8C:34:68:71;
        fixed-address 192.168.0.6;
    }

    host handy {
        hardware ethernet 5C:0A:5B:62:D0:E6;
        fixed-address 192.168.0.7;
    }

    host tablet {
        hardware ethernet 50:46:5D:1A:3C:37;
        fixed-address 192.168.0.8;
    }

    host laptopWLAN {
        hardware ethernet 60:67:20:70:B7:C0;
        fixed-address 192.168.0.9;
    }
}

Am besten kopiert man sich diese Config in einen Texteditor.

Damit wäre die Konfiguration des DHCP auch schon durch und man könnte es scharf schalten. Ich würde aber noch auf den DNS warten.

DNS Server

Planung

Die Domain der FritzBox fritz.box ist ja sehr nett. Aber irgendwie gefällt mir die TLD box nicht. Ich will was individuelles. Also wollte ich eine .lan-Adresse. Da es diese Adressen nicht im Internet gibt ist das aber kein Hindernis im LAN das auflösen zu lassen. Theoretisch könnte man auch .hinterdupfing auflösen lassen. Dazu braucht man einen DNS.

Dieser soll pc.veloc1ty.lan zu 192.168.0.3 auflösen. Gleichzeitig (weil es so schön ist) soll aber 192.168.0.3 auf pc.veloc1ty.lan zurückverweisen. Das Prinzip ist Forward- und Reverse-DNS und die Konfiguration ist hier etwas schwieriger.

Die IP-Adressen und die Hostnamen sind ja bereits bekannt.

Paketinstallation

Der DNS Server ist im Paket bind9 enthalten. Wichtig ist die 9 am Ende, da man ansonsten den veralteten Server installiert.

apt-get install bind9

Basis-DNS

Der DNS ist in Zonen unterteilt. Die DENIC in Deutschland hat zum Beispiel eine Zone für .de eingerichtet. Es gibt (noch) keine Zone für .lan. Diese richte ich nun ein.

Dazu erstelle ich eine Datei unter /etc/bind/ mit dem Namen db.veloc1ty.lan .

Kommentare werden mit ; angefangen. Die Syntax hier ist extrem pingelig!!! Den Kopf gebe ich einfach mal vor.

;
; BIND data file for zone veloc1ty.lan
;
$TTL 60400
@ IN SOA pi. pi.veloc1ty.lan. (
        2014010601      ; Serial
        604800          ; Refresh
        86400           ; Retry
        2419200         ; Expire
        604800          ; Expire
        )

; Nameserver
@ IN NS pi

pi ist in diesem Fall der Hostname des Raspberry Pi. Dieses wird unten noch deklariert. Der gelb markierte Punkt hat mich einmal 2 Stunden Zeit und viele Nerven gekostet! Mit diesem steht und fällt sozusagen alles :-D

Der Serial-Wert wird durch gebildet. Es kann aber auch nur eine fortlaufende Nummer sein. Wird eine Änderung des Serials festgestellt sollten sich die Slave-DNS-Server automatisch updaten. In meinem LAN gibt es nur einen DNS. Somit ist er nicht so wichtig. Alle anderen Werte kann man getrost so übernehmen.

Nun definiert man die einzelnen Einträge. In meinem LAN existieren bis jetzt nur A-Records. Meine Zeilen sehen dann so aus:

;
; BIND data file for zone veloc1ty.lan
;
$TTL 60400
@ IN SOA pi. pi.veloc1ty.lan. (
        20140106        ; Serial
        604800          ; Refresh
        86400           ; Retry
        2419200         ; Expire
        604800          ; Expire
        )

; Nameserver
@ IN NS pi

; A-Records
fritz                IN A    192.168.0.1
pi                   IN A    192.168.0.2
pc                   IN A    192.168.0.3
homeserver           IN A    192.168.0.4
laptopLAN            IN A    192.168.0.5
tv                   IN A    192.168.0.6
handy                IN A    192.168.0.7
tablet               IN A    192.168.0.8
laptopWLAN           IN A    192.168.0.9

; A-Wildcard-Records
*.fritz             IN A    192.168.0.1
*.pi                IN A    192.168.0.2
*.pc                IN A    192.168.0.3
*.homeserver        IN A    192.168.0.4
*.laptopLAN         IN A    192.168.0.5
*.tv                IN A    192.168.0.6
*.handy             IN A    192.168.0.7
*.tablet            IN A    192.168.0.8
*.laptopWLAN        IN A    192.168.0.9

Speichern und ab zum nächsten: Die Rückwärtsauflösung.

Rückwärtsauflösung

Dazu legt man wieder eine Datei in /etc/bind/ an. Die Namenskonvention ist die db..

In meinem Fall ist das also db.0.168.192 .

Der Kopf ist fast wieder der selbe wie oben.

;
; BIND reverse data file for 168.192.0.in-addr.arpa
;
$TTL    604800
@       IN              SOA             pi.veloc1ty.lan. pi.veloc1ty.lan. (
                                                1
                                                3h
                                                1h
                                                1w
                                                1h )
; Nameserver
        NS              pi.veloc1ty.lan.

Die Zeilen entsprechen dann aber nicht mehr den Hostnamen, sondern der vergebenen IP-Adresse.

; A-Records
1       PTR             fritz.veloc1ty.lan.
2       PTR             pi.veloc1ty.lan.
3       PTR             pc.veloc1ty.lan.
4       PTR             homeserver.veloc1ty.lan.
5       PTR             laptopLAN.veloc1ty.lan.
6       PTR             tv.veloc1ty.lan.
7       PTR             handy.veloc1ty.lan.
8       PTR             tablet.veloc1ty.lan.
9       PTR             laptopWLAN.veloc1ty.lan.

Unvergesslich ist der . am Ende jedes Eintrages!

Abschluss

Nun da alles konfiguriert ist schaltet man den DNS und DHCP Dienst der FritzBox ab.

Sobald man das getan hat restartet man DNS und DHCP mit folgenden Befehlen:

service isc-dhcp-server restart
service bind9 restart

Danach mal alle Netzwerkkomponenten neu verbinden und schon hat man die zwei Grundlagen des Netzwerkes komplett auf seiner Seite und beliebig erweiterbar.


Du hast einen Kommentar, einen Wunsch oder eine Verbeserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück