Debian DHCP

Inhalt

Vorwort

DHCP ist die Abkürzung für Dynamic Host Configuration Protocol, ein Netzwerkprotokoll um verschiedene Parameter an Hosts weiterzugeben. Der DHCP-Client fragt dabei den DHCP-Server nach IP, Gateway oder auch DNS. Der Server beantwortet diese Fragen so das nicht jeder Host von Hand konfiguriert werden muss. Dieser Vorgang läuft in der Regel transparent und ohne Usereingriff automatisch ab. Diese Anleitung gibt einen Überblick über die Konfiguration sowohl des DHCP-Servers als auch des DHCP-Clients unter Debian GNU/Linux.

Abschnitte ALT waren für Lenny/Squeeze Debian 5/6 Versionen. NEU ist Debian Jessie 8.x

Das Paket dnsmasq ist in der neuen Version, sowohl ein DHCP Server und DNS Cache und würde genügen.

An den Clienten PC wird gar nichts eingestellt.

Bitte nehmt DNS Server von eurem Provider (Sind nur Beispiele mit 62.2.17.60,62.2.24.162,62.2.17.61)

Sinn & Ziel

z.B:

Voraussetzungen

Für diesen Artikel:

Vorbereitung

/etc/resolv.conf

Bevor wir loslegen, checken wir die /etc/resolv.conf , hier stehen die Namensserver unseres Providers überlicherweise drin. Ab besten gleich eine kopie anlegen.

cp /etc/resolv.conf /etc/resolv.conf.bak

So, notfalls können wir in der /etc/resolv.conf.bak (Backup) nochmals nachschauen. Wir benötigen die Einträge im DHCP Server, um die Clienten zu bedienen damit.

Freie IP suchen

Es müsste noch eine freie IP gesucht werden, ausserhalb des DHCP Server IP-Range Bereichs des Provider Modem, vielleicht loggt ihr euch noch schnell da ein im Modem, steht normal unter Lokales Netzwerk (LAN) und DHCP Server. Beispiel eines Provider Modem: DHCP-Server 192.168.0.1, Range 192.168.0.10 Max. 244, das heisst 192.168.0.10 bis 192.168.0.254 werden benutzt, frei wären 192.168.0.2 bis 192.168.0.9. /!\ Und die IP mit Endung x.x.x.255 nie verwenden! Das ist Broadcast.

isc-dhcp-client deinstallieren

/!\ Wer mit grafischen Obeflächen arbeitet, sollte isc-dhcp-client im System belassen, es würde sonst andere Sachen der grafischen Obefläche deinstallieren. Am besten setzt man die Netzwerkkarten im /etc/network/interfaces wie gleich beschrieben wird. Das deaktiviert diese zwei Netzwerkkarten dann automatisch für den Netzwerk Manager und isc-dhcp-client.

Meistens ist noch der isc-dhcp-client installiert, der störrt eigentlich, und führt zu Verwirrungen, dann kann manchmal die eth1 eine neue Adresse beziehen von eth0, trotz der interfaces Einträge unten, darum raus damit. (Bei Server ohne grafische Oberfläche)

apt-get remove isc-dhcp-client

Dann setzen wir die IP's der Netzwerk Karten statisch, das heisst fixe IP's

Es wird ein Debian-System angenommen mit zwei Netzwerkkarten, die Erste eth0 wird das heimische Netzwerk, die Zweite eth1 macht den Kontakt zum Internet. Später kommt gleich noch wie man das macht mit einer Netzwerkkarte {1} und zwei IP.

/etc/network/interfaces

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# The loopback interface
# automatically added when upgrading

auto lo
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# automatically added when upgooglegrading
#
# Und ich habe das jetzt geändert, das wird hier eine statische IP
# für das LAN Netzwerk (intern zuhause)
# Hier horcht dann der DHCP Server
auto eth0
iface eth0 inet static

address 192.168.1.1
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255



# Unser Server hängt hier am Internet
# Wir machen hier auch eine Statische IP, irgenwas wird ja frei sein beim 
# Provider Modem. (Bitte da etwas ausserhalb Provider Modem DHCP Server Range, eine IP wählen)
# Das ist nur ein Beispiel

auto eth1
iface eth1 inet static

address 192.168.0.6
netmask 255.255.255.0
gateway 192.168.0.1

Wenn euer Provider Modem mit 192.168.1.x arbeitet, dann nehmt ihr halt zuhause 192.168.2.x für eth0. (be creative)

Das sähe dann so aus:

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# The loopback interface
# automatically added when upgrading

auto lo
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# automatically added when upgooglegrading
#
# Und ich habe das jetzt geändert, das wird hier eine statische IP
# für das LAN Netzwerk (intern zuhause)
# Hier horcht dann der DHCP Server
auto eth0
iface eth0 inet static

address 192.168.2.1
network 192.168.2.0
netmask 255.255.255.0
broadcast 192.168.2.255



# Unser Server hängt hier am Internet
# Wir machen hier auch eine Statische IP, irgenwas wird ja frei sein beim 
# Provider Modem. (Bitte da etwas ausserhalb Provider Modem DHCP Server Range, eine IP wählen)
# Das ist nur ein Beispiel

auto eth1
iface eth1 inet static

address 192.168.1.6
netmask 255.255.255.0
gateway 192.168.1.1

Spezialfall eine Netzwerkkarte mit zwei IP verwenden

Es kann sein, dass man nur eine Netzwerkkarte im System hat. Ich werde im ganzen Text das {1} Symbol verwenden, wenn dies der Fall ist, und es abweicht von zwei Netzwerk Karten Betrieb. Und es einer Änderung an der Config bedarf. Bei zwei Netzwerkkarten sind die Internet und LAN elektrisch getrennt, bei einer Netzwerkkarte nicht, darum muss man im Provider Modem den DHCP Server deaktivieren.

{1}

#Anstatt:
auto eth1
iface eth1 inet static
.
.

#Bei einer Netzwerkkarte würde man das hier machen, und ist dann unser Internet Zugang:
auto eth0:0
iface eth0:0 inet static

address 192.168.0.6
netmask 255.255.255.0
gateway 192.168.0.

{1}

Bei Nachkontrollen später mit ifconfig kann es sein, dass ihr noch eine falsche Netzwerkkarte im Betrieb habt. So kann man Schnittstellen deaktivieren, oder aktivieren

deaktivieren:

ifconfig eth0 down
ifconfig eth1 down
ifconfig eth0:0 down

oder aktivieren: 

ifconfig eth0 up
#ifconfig eth1 up     #wir haben ja nur eine Neztwerkkarte, unnötig.
ifconfig eth0:0 up   (das geht nicht, aber /etc/init.d/networking restart wird es machen)

Network Manager

/!\ Wer den network-manager im System belassen will, wegen grafischer Oberfläche, aber in /etc/network/interfaces die Definition macht der ip's, der sollte jetzt /etc/init.d/network-manager restart machen, dann wird network-manager erkennen, das es bereits von interfaces Datei gereglt wird, und deaktiviert sich für diese zwei Neztwerkkarten. Es erscheint dann "Nicht verwaltet" im Network Manager.

Dannach:

Auffrischen der Interfaces:

/etc/init.d/networking restart

Die Konfiguration der Netzwerkkarten können wir über ifconfig kontrollieren. Und allenfalls noch in einem Terminal einfach prinzipelle mal tail -f /var/log/syslog laufen lassen.

dnsmasq als DHCP-Server und DNS-Cache

/!\ "Mögliche Fallen" ip_forward bitte lesen

Hier wird nur dnsmasq verwendet für dhcp-server und DNS-Cache. Der kleine Vorteil hier (im Gegensatz zu isc-dhcp-server) ist, dass fixed IP per MAC Adresse mit host Namen z.b fantasia, auch verteilt werden im LAN, und nicht mehr extra in die /etc/hosts eingetragen werden müssen.

Installieren von dnsmasq:

apt update
apt install dnsmasq

(Wie vorhin angesprochen, wenn Provider Modem 192.168.1.1 benützt, dann müsst ihr hier halt alles mit 192.168.1.x auf 192.168.2.x abändern)

Minimale Einträge in /etc/dnsmasq.conf

#Hier hängt unser LAN dran.
interface=eth0

#Dieser Eintrag ist für host Befehle auf dem Server
listen-address=127.0.0.1

#Dieser ist wichtig für LAN Anfragen DNS
listen-address=192.168.1.1

#Kann man, ich finde es besser, das ist die Schnittstelle zum Internet im Beispiel
no-dhcp-interface=eth1

#DHCP Server aktivieren, mit IP Bereich von 192.168.1.20 bis 192.168.1.80  Lease Dauer: 4h 
dhcp-range=192.168.1.20,192.168.1.80,4h

#Und einem Clienten mit MAC Netzwerkkarte Hardware Adresse 08:00:27:26:15:78 geben wir den Namen fantasia und die IP 192.168.1.25 und Lease Dauer 4h
dhcp-host=08:00:27:26:15:78,fantasia,192.168.1.25,4h

#Und ganz hübsch, anhand eines Rechnernamens eine IP vergeben. (siehe arp 192.168.1.26 als root). So wie es im Client in der /etc/hostname steht.
dhcp-host=anabelle,192.168.1.26,4h

{1}

no-dhcp-interface=eth0:0

Wir müssen die /etc/resolv.conf anpassen mit 127.0.0.1, damit der Server selber vom dnsmasq DNS Cache lesen kann. Dann müssen auch zwei externe DNS Server eingetragen werden, damit man Internet Seiten findet. Auch die Client fragen dnsmasq auf dem Server an, und dieser am Schluss die externen DNS.

Die Clienten erhalten als DNS Server nur 192.168.1.1 hier im Beispiel, und sind somit abhängig von unserem Server dnsmasq DNS.

Im Server müsste die /etc/resolv.conf so aussehen.

nameserver 127.0.0.1       #Diser ist wichtig, damit der Server auch die host namen kennt. host Befehle
nameserver 62.2.24.162
nameserver 62.2.17.61

Aktivieren: service dnsmasq restart

Wenn man im Server /etc/hosts von Hand Einträge nachträglich macht, kann man diese auch wieder verteilen im ganzen LAN mit dem Befehl: service dnsmasq reload

Dann könntet ihr jetzt noch ip_forward machen, und die Clienten hätten auch Internet Zugang.

Jetzt sind wir eigentlich schon fertig, jetzt kann man ssh/nfs/samba noch installieren und Verzeichnisse freigeben.

Für Privat und Kleinfirmen kann man hier stoppen und muss nicht die weiteren Kapitel wälzen. Ausser vielleicht Firewall.

DHCP-Server mit isc-dhcp-server, und dnsmasq DNS-Cache

NEU

/!\ "Mögliche Fallen" ip_forward bitte lesen

Hier wird auf bind (den Nameserver, im "ps aux" als named erkennbar) verzichtet. Die /etc/hosts vom Server wird ausgewertet.

DhcpServer und dnsmasq Pakete installieren:

apt-get update
apt-get install isc-dhcp-server dnsmasq

Konfigurieren: /etc/dhcpd.conf

Minimale Einträge hier anpassen.

#option domain-name "example.org";
option domain-name-servers 62.2.17.60,  62.2.24.162;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.20 192.168.1.80;
  option routers 192.168.1.1;
}

Angenommen, ihr müsst mit 192.168.2.x IP Arbeiten für das LAN, dann sähe das so aus.

#option domain-name "example.org";
option domain-name-servers 62.2.17.60,  62.2.24.162;

subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.20 192.168.2.80;
  option routers 192.168.2.1;
}

Aktivieren: /etc/init.d/isc-dhcp-server restart

In diesem Beispiel gibt jetzt der DHCP Server automatisch Adressen von 192.168.1.20 bis 192.168.1.80 an eure Clienten im LAN. Wenn ihr noch ohne Firewall seit. Dann könntet ihr jetzt noch ip_forward machen, und die Clienten hätten auch Internet Zugang.

option domain-name-servers nehmt ihr bitte DNS Server von eurem Provider. Diese werden an die Clienten ausgegeben.

Der Server arbeitet selber noch mit der /etc/resolv.conf, und die sollte ungefähr so aussehen.

nameserver 127.0.0.1          #Diser ist wichtig, damit der Server auch die host Namen kennt.( host Befehle )
nameserver 62.2.17.60
nameserver 62.2.24.162

Drei Einträge, das ist genug. Irgendwelche domain search Einträge löscht ihr raus.

option domain-name "example.org";

Also für Privat würde ich diese Zeile weglassen, es führt beim Clienten zu einem DNS Eintrag: search example.org , und störrt dann mehr. Wer es braucht, kann es ja machen. (Mit eigenem Namen für deine Domain)

Deaktivieren mit # davor: /etc/dhcpd.conf

#option domain-name "example.org";

Wenn man aber option domain-name "example.org" macht, würde/kann man eine andere /etc/hosts schreiben, da unsere Infrastuktur einen Domain Namen hat

#Zwei Zeilen hinzufügen
192.168.1.1         meinserver.example.org           meinserver
192.168.1.22        fantasia.example.org             fantasia

Man müsste dann eigentlich auch die /etc/hosts etwas anderst schreiben. Ich selber mache es aber wie weiter unten angegeben.

Aktivieren: /etc/init.d/isc-dhcp-server restart

dnsmasq aktivieren

dnsmasq kann zur Namensauflösung benützt werden. Es muss nur die Server /etc/hosts Datei editiert werden und man gibt fixe Adressen an PC's raus.

Man muss die MAC Hardware Netzwerkkarte Adresse des Clienten kennen. Findet man im Clienten mit ifconfig oder windows ipconfig (z.b Hardware Adresse 08:00:27:9b:ec:8a)

Man kann die MAC Hardware Netzwerkkarte Adresse des Clienten auch vom Server aus mit arp IP_vom_Clienten ermitteln.

Neu muss man etwas mehr ändern, aber nicht viel.

Zuerst nochmals den DHCP Server anpassen, konfigurieren: /etc/dhcpd.conf

#Neu tragen wir uns selber als DNS NameServer hier ein
#Allenfalls 192.168.2.1 wie oben erwähnt, falls Provider Modem 192.168.1.1 hat.
option domain-name-servers 192.168.1.1, 62.2.17.60,  62.2.24.162;

#dnsmasq hat die ja Möglichkeit die /etc/hosts und /etc/resolv.conf DNS Server anzufragen. 
#Darum könnte man auch nur seinen Server angeben als DNS für die Clienten. Aber nach einem service dnsmasq stop,
#können die Clienten keine Namensauflösung mehr tätigen. Im oberen Beispiel können sie selber noch externe DNS Server anfragen.
#option domain-name-servers 192.168.1.1;


#Dann sollten wir immer die gleiche IP raus geben an einen PC
host fantasia {
  hardware ethernet 08:00:27:9b:ec:8a;
  fixed-address 192.168.1.22;
}

Aktivieren: /etc/init.d/isc-dhcp-server restart

Dann editieren wir dnsmasq , /etc/dnsmasq.conf

#Es wird ein #listen-address=  leeres Beispiel haben um die Zeile 110 im config

#Dieser Eintrag ist für host Befehle auf dem Server
listen-address=127.0.0.1      

#Dieser ist wichtig für LAN Anfragen DNS
listen-address=192.168.1.1


#Und wir benützen den DHCP Dienst von dnsmasq nicht
no-dhcp-interface=eth0
no-dhcp-interface=eth1

{1}

no-dhcp-interface=eth0
no-dhcp-interface=eth0:0

Gut soweit, mit dem Start können wir noch warten, jedesmal , wenn man etwas erängzt in der Server /etc/hosts , muss man dannach dnsmasq restarten, damit es in sein Cache aufgenommen wird. Also passen wir gleich die /etc/hosts mal an im Server.

/etc/hosts

#Zwei Zeilen hinzufügen
192.168.1.1         meinserver
192.168.1.22        fantasia

Jetzt lohnt es sich dnsmasq neu zu starten.

Alles aktivieren: /etc/init.d/dnsmasq restart

Die Clienten muss man auch einmalig neu starten, oder oder kurz trennen, damit sie den neuen DNS Server Eintrag (192.168.1.1) erhalten.

Im normal Betrieb genügt es die Server /etc/hosts anzupassen und service dnsmasq reload , und die Clienten sehen die Änderung.

Jetzt kann man auf jedem client host fantasia machen, und kriegt die IP von fantasia. Falls auf fantasia ein Apache läuft, kann man auch auf irgend einem andern Rechner nen Browser starten und fantasia in die URL-Zeile eintippen. Oder von nem andern Rechner mit ssh ne shell starten und einloggen: ssh user@fantasia (installierter sshd vorausgesetzt)

Jetzt sind wir eigentlich schon fertig, jetzt kann man ssh/nfs/samba noch installieren und Verzeichnisse freigeben.

Für Privat und Kleinfirmen kann man hier stoppen und muss nicht die weiteren Kapitel wälzen. Ausser vielleicht Firewall.

ALT

In der alten Beschreibung war eth0 Netzwerkkarte der Internet Zugang, also ist alles etwas Kopfüber hier. Und NAT-MASQ für eine Firewall wäre: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

/!\ "Mögliche Fallen" ip_forward bitte lesen

Hier wird auf bind (den Nameserver, im "ps aux" als named erkennbar) verzichtet. Die /etc/hosts vom Server wird ausgewertet.

DhcpServer und dnsmasq Pakete installieren:

apt-get update
apt-get install dhcp dnsmasq

Konfigurieren: /etc/dhcpd.conf

#/etc/dhcpd.conf

        # Minimale Ausleihzeit in Sekunden (1 Stunde)
default-lease-time 3600;

        # Maximale Ausleihzeit in Sekunden (24 Stunden)
max-lease-time 86400;

        # Für die Netzwerkkarte eth1 (LAN) gelten folgende Einstellungen
subnet 192.168.1.0 netmask 255.255.255.0 {

        # Domainname = mylan
option domain-name "mylan";

        # zwei DNS-Server oder den eigenen DNS-Server (192.168.1.1 dann), nur eine Zeile aktiv halten.
        # In /etc/resolv.conf werden ihre Nameserver vom Provider stehen, oder host -t NS domainProvider
        # wird sie auch zeigen.

option domain-name-servers ns1.einDNS.net, ns2.zweiterDNS.net;

        # wenn wir DNS Server installieren diesen hier.
#option domain-name-servers 192.168.1.1;

        # Internet-Gateway
option routers 192.168.1.1;

        # Netzmaske
option subnet-mask 255.255.255.0;

        # Konfiguration für den Rechner pc1
        # das wäre jetzt marlise als Beispiel unten.
#host pc1
#{ hardware ethernet 00:20:78:19:0E:6B;
#  fixed-address 192.168.1.2;
#}

        # Konfiguration für den Rechner pc2
#host pc2
#{ hardware ethernet 00:02:3F:31:A3:29;
#  fixed-address 192.168.1.3;
#}

        # Konfiguration für den Rechner pc3
#host pc3
#{ hardware ethernet 00:02:3F6d:78:09:3c;
#  fixed-address 192.168.1.4;
#}

        # dynamische Zuweisung bei fremden Rechnern im LAN
range 192.168.1.100 192.168.1.200;
}

Bei Host pc1 bis Host pc3 könnte man gemäß der MAC-Hardware-Adresse der Netzwerkkarte, einem Client-Rechner immer die gleiche IP übergeben. Ansonsten kriegt man eine aus dem Bereich von "range 192.168.1.100 192.168.1.200". Clientrechner mit fixer IP im LAN können vorteilhaft sein, wenn man auf ihnen so Sachen wie P2P am Laufen hat, dann kann man diese gezielt immer an den gleichen Rechner portforwarden (geht mit iptables, sprich minifire kann das auch).

Konfigurieren: /etc/default/dhcpd

# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"

Interfaces beachten

Wie finde ich die MAC Adresse von der Netwerkarte vom Client? arp , arping

Auffrischen des dhcpserver: /etc/init.d/dhcp restart

marlise: Wenn man will, dass ein Rechner als marlise anzusprechen ist, kann man ihm in dhcpd.conf eine fixe IP zuweisen, dann im /etc/hosts des Servers eine Zeile unten anfügen:

192.168.1.2     marlise   marlise.local    www.marlise.local

Jetzt kann man auf jedem client host marlise machen, und kriegt die IP von marlise. Falls auf marlise ein Apache läuft, kann man auch auf irgend einem andern Rechner nen Browser starten und marlise in die URL-Zeile eintippen. Oder von nem andern Rechner mit ssh ne shell starten und einloggen: ssh marlise@marlise (installierter sshd vorausgesetzt)

Jetzt sind wir eigentlich schon fertig, jetzt kann man nfs/samba noch installieren und Verzeichnisse freigeben.

Für Privat und Kleinfirmen kann man hier stoppen und muss nicht die weiteren Kapitel wälzen.

DNS NameServer

NEU

/!\ "Mögliche Fallen" ip_forward bitte lesen

/!\ ab hier wird die /etc/hosts inaktiv! (Der Server selber benützt /etc/hosts lokal schon noch, aber die Clienten sehen davon nichts mehr.)

Ein Namensserver ohne Konfiguration findet Internet Seiten, aber nicht die lokalen Rechner. Darum ist man dann schon angehalten diesen auch zu konfigurieren.

Wer mit dnsmasq gearbeitet hat bis hierher, sollten diesen zuerst deinstallieren: apt remove dnsmasq

Die Firewall muss UDP-Pakete auf Port 53 erlauben im LAN für den BIND-NameServer.

Die Server /etc/resolv.conf abändern: die alte resolv.conf sichern, ab jetzt finden Sie ohne eigenen bind nix mehr im Internet. Auch der Server selber muss bei seinem eigenen Namensserver anfragen, darum wird die resolv.conf so angepasst.

/etc/resolv.conf

#search example.com            #Die Zeile wenn man auch mit domain arbeitet im dhcp server
nameserver 127.0.0.1           #Wird hier eine Antwort gegeben, fragt er die nächste Zeile nicht an. (bind9 Server)
#nameserver 62.2.17.60         #Wenn man will, das bei einem service bind9 stop, der Server doch noch Internet Seiten findet, diese Zeile aktivieren.

Wir müssen den Clienten auch unseren Namensserver als Default angeben, weitere externe nach eurem Geschmack wie es sich verhalten soll. Zuerst nochmals den DHCP Server anpassen, konfigurieren: /etc/dhcpd.conf

#Neu tragen wir uns selber als DNS NameServer hier ein
#Allenfalls 192.168.2.1 wie oben erwähnt, falls Provider Modem 192.168.1.1 hat.
option domain-name-servers 192.168.1.1, 62.2.17.60,  62.2.24.162;

#bind9 ist ein DNS Server, der alles weiss. Darum lenkt man /etc/resolv.conf auf 127.0.0.1, und die /etc/hosts ist inaktiv für Clienten
#Darum könnte man auch nur seinen Server angeben als DNS für die Clienten. Aber nach einem service bind9 stop,
#kann der Server selber und die Clienten keine Namensauflösung mehr tätigen. Im oberen Beispiel können die Clienten selber noch externe DNS Server anfragen.
#option domain-name-servers 192.168.1.1;

#Dann sollten wir immer die gleiche IP raus geben an einen PC
#Ist nur ein Beispiel, und wäre auch nötig mit DNS Server, und dann im bind konfigurieren mit Namen.
#Der Namen wird nicht mehr in /etc/hosts getätigt. Die ist inaktiv.
host fantasia {
  hardware ethernet 08:00:27:9b:ec:8a;
  fixed-address 192.168.1.22;
}

Aktivieren: /etc/init.d/isc-dhcp-server restart

bind9 Namensserver

Ich finde diesen Artikeln richtig gut vom https://wiki.debian.org/Bind9 , und verzichte selber nochmals das gleiche zu schreiben.

ALT - Vielleicht doch noch nutzvoll

Auf dnsmasq verzichten und richtigen DNS Nameserver aufsetzen wird ab hier erklärt.

/!\ "Mögliche Fallen" ip_forward bitte lesen

/!\ ab hier wird die /etc/hosts inaktiv!

Die Firewall muss UDP-Pakete auf Port 53 erlauben für den BIND-NameServer.

Die /etc/resolv.conf abändern: die alte resolv.conf sichern, ab jetzt finden Sie ohne eigenen bind nix mehr im Internet.

/etc/resolv.conf

search mylan
nameserver 192.168.1.1

/!\ "Mögliche Fallen" resolv.conf bitte lesen

Grundsätzlich: apt-get install bind deinstalliert dnsmasq. Dies ist jedoch auch wieder umkehrbar mit apt-get install dnsmasq, dann aber die /etc/resolv.conf wieder zurücksetzen.

bind ohne Konfiguration: (nicht sinnvoll, man findet zwar Internet Seiten, aber nicht die andern Rechner im LAN)

apt-get install bind

Dann in /etc/dhcpd.conf die Zeile "option domain-name-servers ns1.ersterDNS.net, ns2.zweiterDNS.net" auf "option domain-name-servers 192.168.1.1" abändern.

Auffrischen: /etc/init.d/dhcp restart

Auffrischen Client: Debian als root pump Enter, Windows neubooten (Damit der DNS Eintrag von 192.168.1.1 gelesen wird)

Man kann die andern Rechner nur über IP-Adressen erreichen, nicht über Namen, außer man hält auf jedem Rechner ne aktuelle /etc/hosts) bereit. Internet tut für die Rechner.

bind mit Konfiguration: (sinvoll, anspruchsvoll) apt-get install bind, danach hat man in /etc/bind folgende Dateien: db.0 db.127 db.255 db.local db.root named.conf named.conf.local named.conf.options. Uns fehlt also ein db.mylan und ein db.192was. Und in /etc/dhcpd.conf die Zeile "option domain-name-servers ns1.ersterDNS.net, ns2.zweiterDNS.net" auf "option domain-name-servers 192.168.1.1" abändern.

also db.mylan:

;
;       /etc/bind/db.mylan
;
$TTL    604800
@       IN      SOA     ns.mylan. webmaster.mylan.local. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
                        NS   ns.mylan.
;
;
ns.mylan.                      A       192.168.1.1
meinserver.mylan.              CNAME   ns.mylan.
marlise.mylan.                 A       192.168.1.2
marlise2.mylan.                A       192.168.1.3

Hier werden den Namen IP-Adressen gegeben. bitte dann noch den MAC-Adressen der Netzwerkkarten fixe IPs zuordnen (nicht aus dem dynamischen Range) - siehe dhcpd.conf.

Dann db.192.168.1:

;
;  /etc/bind/db.192.168.1
:
$TTL    604800
@       IN      SOA     ns.mylan. webmaster.mylan.local. (
                        1               ; Serial
                        604800          ; Refresh
                        86400           ; Retry
                        2419200         ; Expire
                        604800 )        ; Negative Cache TTL
;
                NS      ns.
;
;
;1               NS     ns.mylan.
1               PTR     meinserver.mylan.
2               PTR     marlise.mylan.
3               PTR     marlise2.mylan.

Hier wird die Reverse-Auflösung ermöglicht - host 192.168.1.2 ergibt also marlise.

Bei dynamischer IP vom Provider lohnen die beiden Nächsten fast nicht, außer man schreibe sich den Inhalt immer wieder um mit nem Script. Bei statischen IPs ist es ne tolle Sache.

also db.meinserver.org:

;
;       /etc/bind/db.meinserver.org
:
$ORIGIN meinserver.org.
$TTL    604800
@       IN      SOA      meinserver.org. webmaster.meinserver.org.  (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
                          NS meinserver.org.
;
;
meinserver.org.                 A       ???.???.???.???
meinserver.meinserver.org.      CNAME   meinserver.org
marlise.meinserver.org.         A       192.168.1.2
marlise2.meinserver.org.        A       192.168.1.3

also db.???.???.???:

;
;  /etc/bind/db.???.???.???
;
$TTL    604800
@       IN      SOA     meinserver.org. webmaster.meinserver.org. (
                      1               ; Serial
                      604800          ; Refresh
                      86400           ; Retry
                      2419200         ; Expire
                      604800 )        ; Negative Cache TTL
;
                        NS     meinserver.org.
;
;
131                     PTR     meinserver.org.

Hier würde die eigene IP ne 131 am Schluss haben. diese müsste man sich immer wieder setzen bei dynamischen IPs und den Filenamen ändern. Die ??? sind für die ersten drei Teile der IP im Internet die man hat.)

webmaster.meinserver.org wird als webmaster@meinserver.org angeschaut, und sollte ein gültiges email sein!

Dann die Zonen in die Konfiguration einbinden: /etc/bind/named.conf.local

//  /etc/bind/named.conf.local
// Add local zone definitions here.

zone "mylan" {
        notify no;
        type master;
        file "/etc/bind/db.mylan";
};

zone "1.168.192.in-addr.arpa" {
       notify no;
       type master;
        file "/etc/bind/db.192.168.1";
};

#zone "meinserver.org" {
#        type master;
#        file "/etc/bind/db.meinserver.org";
#};

#zone "???.???.???.in-addr.arpa" {
#       type master;
#       file "/etc/bind/db.???.???.???";
#       };

Die letzten wären für die IP, die man vom Provider hat - man beachte den Zone-Eintrag: 192.168.1 wird zu 1.168.192, so auch bei zone.???.???.???.in-addr.arpa werkeln. Eigentlich müsste man die letzten zwei Zonen in named.conf eintragen, damit es schön getrennt ist, aber dann fummelt man nur an einer named.conf.local.

Auffrischen: /etc/init.d/bind restart

Prüfen: tail -f /var/log/daemon.log und zuschauen, ob er beim Laden der Master.Zonen alle ohne Fehler lädt, sonst hat man sich vermutlich irgendwo vertippt.

Tests: host marlise und host 192.168.1.2 (interne auflösung) / Wenn man das mit ???.????-Zeug auch aktiviert hat: host marlise.meinserver.org (intern) host meinserver.org und host marlise.meinserver.org meinserver.org sollte interne IP anzeigen (extern).

Dokumentation zu bind sind unter: file:/usr/share/doc/HOWTO/de-html/DE-DNS-HOWTO-1.html

Die Clientel

NEU Eigentlich sind alle schon per default dhcp-client fähig.

ALT Debian-Client: da genügt eigentlich, pump - Simple DHCP/BOOTP client zu installieren, und sicher zu stellen, dass das Netzwerkkarten-KernelModul geladen ist.

(apt-get install pump, allenfalls /etc/network/interfaces wie eth0 Abschnitt am Anfang dieser Seite einstellen), ein Befehl als root pump Enter genügt dann um die Verbindung aufzufrischen. Mit tail -f /var/log/daemon.log in einer freien shell, kann man die vom dhcp-server übergeben Daten überprüfen. Falls man die Hardware-Adresse will, um eine fixe IP vergeben zu können, kann man die mit ifconfig am Client rausfinden.

Mac/Windows-Client: normal wird bei der Netzwerk-Treiber-Installation gleich die dhcp-client Fähigkeit bereitgestellt, also unter Netzwerk alles auf "ip auto beziehen" etc..

Firewall

NAT/MASQ

Nur wenn Ihr eine Firewall selber macht, dieser Tipp:

Bevor wir jetzt den DhcpServer einrichten, noch schnell was zur Firewall. Damit Pakete aus dem Internet zu dem richtigen Rechner im heimischen Netz finden, muss man an ihnen einige Sachen verändern. Das passiert mit dem Befehl:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

{1}

iptables -t nat -A POSTROUTING -o eth0:0 -j MASQUERADE

(nur ein Auszug des wichtigsten Befehls, hier wäre Ausgangs Interface die eth1 Netzwerkkarte)

NAT/POSTROUTING - Hier gehen nochmals alle Pakete, die geroutet worden sind, durch (auch lokal erzeugte Pakete). Hier werden Angaben über die Herkunft eines Paketes verändert, wie:

MASQUERADE - Dieses geroutete Paket bekommt als Absende-Adresse die IP-Nummer und einen beliebigen Port des ausgehenden Interfaces. Damit lassen sich bei Wählverbindungen mit nur einer IP-Adresse mehrere Rechner über einen Router an nur eine Wählverbindung koppeln. Beim Löschen des Interfaces mit der "Leih-IP Nummer" werden alle gemerkten Daten vergessen.

Kommunikationsports und Firewall

In der /etc/services kann man sich die Grundlegenden Ports anschauen. Folgende Ports sollte man im LAN nicht dicht machen.

DHCP Server läuft grundsätzlich mit bootps (Port 67 u. 68 UDP (sollte genügen), auch TCP möglich.) für IPV4. Bei IPV6 müsste das dhcpv6 sein, Port 546 u. 547 UDP und TCP. Da ich nie IPV6 mache zuhause, weiss ich selber gar nicht ob es TCP wirklich benötigt. sry

dnsmasq und DNS Bind Server laufen über Port 53 UDP

Zeitserver im LAN läuft über Port 123 UDP (Es genügt ntp Paket, sowohl im Server wie im Clienten, kein ntpdate mehr!)

ssh benützt Port 22 TCP

arno-iptables-firewall

Wenn man die Firewall nicht selber schreibt, gibt es diverse Angebote, von Scripten bis grafisch bedienbare. Ich zeige als Beispiel die arno-iptables-firewall.

eth0 ist LAN (192.168.1.1), eth1 ist Internet ( {1} eth0:0 ist Internet )

Installation:

apt install arno-iptables-firewall

Konfiguration, diese kann man immer wieder aufrufen:

dpkg-reconfigure arno-iptables-firewall

Die Anworten:

  1. Möchten Sie die Firewall-Konfiguration mit Debconf verwalten? -> Ja

  2. Externe Netzwerkschnittstellen: -> eth1 {1} eth0:0

  3. Wird DHCP mit den externen Netzwerkschnittstellen genutzt? -> Eigentlich haben wir fixe ip's , aber das störrt nicht, sagen wir -> Ja -> Richtig wäre Nein ;)

  4. Offene externe TCP-Ports: -> 22 80 443 (das wäre für ssh und apache2 von extern auf den Server, das müsst ihr wissen)

  5. Offene externe UDP-Ports: -> bleibt leer, ausser ihr wisst was ihr da frei gebt, einen Timeserver nach draussen (123), oder bind9 (53) nach draussen??

  6. Soll dieses System von außen 'pingbar' sein? -> Geschmacksache, ich sage Ja

  7. Interne Netzwerkschnittstellen: -> eth0

  8. Interne Netzwerke: -> 192.168.1.0/8

  9. Möchten Sie NAT aktivieren? -> JA

  10. Internen Netzwerke mit Zugriff auf externe Netzwerke: -> kein Eintrag, alle internen Netze dürfen ins Internet, oder nur alle aus diesem Netz -> 192.168.1.0/8 (Man kann auch nur einzelne IP Rechner freigeben)

  11. Soll die Firewall jetzt (neu) gestartet werden? -> Ja

Wenn jemand sein Netz 192.168.2.x getauft hat, dann wären statt 192.168.1.0/8, die Antwort 192.168.2.0/8

Die Konfigurationsdateien, befinden sich in /etc/arno-iptables-firewall , unsere Antworten finden sich in conf.d/00debconf.conf , firewall.conf ist die Grundsätzliche und müsste von Hand editiert werden. Die custom.conf ist auch noch praktisch, mit iptables kommandos etwas machen. Am besten noch in der FAQ bei arno nachlesen, z.b für Portforward etc.

Bei mir sähe jetzt die /etc/arno-iptables-firewall/conf.d/00debconf.conf so aus:

EXT_IF="eth1"
EXT_IF_DHCP_IP=1
OPEN_TCP="22 80 443"
OPEN_UDP=""
INT_IF="eth0"
NAT=1
INTERNAL_NET="192.168.1.0/8"
NAT_INTERNAL_NET="192.168.1.0/8"
OPEN_ICMP=1

{1}

EXT_IF="eth0:0"

Man kann auch von Hand etwas umschreiben hier, und dann aktivieren mit: /etc/init.d/arno-iptables-firewall restart

Mögliche Fallen

ip_forward

Falls ihr den Gateway von den Clients pingen könnt und DNS funktioniert, aber ansonsten keine Pakete weitergeleitet werden, stellt sicher, dass IP forwarding aktiviert ist:

NEU

Ab diesem Moment, werden die Clienten an das Internet weitergeleitet. Es fragt sich ob ihr eine Firewall installieren wollt etc..

Checken wir den Status:

cat /proc/sys/net/ipv4/ip_forward

Ein 0 heisst nicht.

Setzen wir es gleich definitv in /etc/sysctl.conf (zu unterst eine Zeile einfügen, resp. es hat auch ein drin,# weg):

net.ipv4.ip_forward = 1

Aktivieren: sysctl -p /etc/sysctl.conf

ALT

echo "1" > /proc/sys/net/ipv4/ip_forward

Bei Debian stellt man das am besten in /etc/network/options ein.

dhcp-client

Benütze dhcp-client für eth0 ISP Zugang. Der dhcp-client (in unstable debian) nimmt sich die eth1 wo ja der dhcpserver drauf läuft, und bekommt ne adresse zugewiessen, und setzt dann die eth1 neu (ein loop effekt), die ja static sein soll gemäss /etc/networking/interfaces in "Vorausetzungen". Habe dhcp-client gelöscht (apt-get remove dhcp-client) und durch das programm pump ersetzt und konfiguriert wie in resolv.conf angegeben.

resolv.conf

Die Server /etc/resolv.conf sollte nicht überschrieben werden, wenn man selber einen DNS NameServer betreibt. Weil sonst kann der Server selber keine Namens-Auflösungen betreiben Intern mit host-Befehl.

Wenn man nur pump benützt genügt folgendes um sie zu sichern gegen überschreiben. /etc/pump.conf

device eth0 {
   nodns
}

Wenn man mit dhcp-client (dhcp3-client, oder isc-dhcp-client) arbeitet, kann man folgendes benützen: /etc/dhclient.conf

supersede domain-name "mylan";
prepend domain-name-servers 192.168.1.1;

Ich hab dann aber auch schon mehr als 3 Einträge gehabt in resolv.conf (man resolv.conf), hoffe das stört nicht.

Eine Möglichkeit ist auch, die resolv.conf mit Schreibschutz zu versehen.

chattr +i /etc/resolv.conf     #Schreibschutz aktiv
chattr -i /etc/resolv.conf     #Beschreibbar wieder

Neustart erforderlich

Es kann vorkommen, das man einen Neustart braucht, wenn alle configs stimmen, aber nicht die Funktion hergestellt wird davon. Ich habe auch schon die arno-iptables-firewall mit apt remove arno-iptables-firewall entfernt. Und eigentlich müssten dann die Clienten doch wieder Internet haben, mit ip_forward, und die iptables -L war hübsch leer. NAT weg klar. Ein Neustart des Servers und es funktionierte. Ich gehe dem jetzt nicht näher auf den Grund ;) Ein neues apt install arno-iptables-firewall frisst es ohne Probleme, und die config ja noch da ist dank nur remove -> gleich gestartet. Also der Weg geht. Es muss ja nicht nur ein remove der Firewall ärger machen, es kann auch mal ein Cache gefüllt sein sonst von irgend eines Dienstes. Kann höchstens beim aufsetzen des DHCP und Versuche mal vorkommen. (PS: Vielleicht hätte ich nur mal networking stop start machen müssen ;) )

debian-dhcp (zuletzt geändert am 2015-07-24 19:47:06 durch 178-82-198-142)