Debian DHCP
Inhalt
Inhaltsverzeichnis
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
- Automatische Vergabe von IP an Clienten (dynamische oder statische)
- Namensauflösung
z.B:
Anstatt ssh testuser@192.168.1.25 kann man dann ssh testuser@fantasia
Im Browser kann man, wenn im andern Client ein www Server läuft (apache2); anstatt 192.168.1.25 einfach fantasia eingeben.
Für sftp://testuser@92.168.1.25 geht dann sftp://testuser@fantasia
- etc..
Voraussetzungen
Für diesen Artikel:
Debian, die Debian Installation Seite gibt Tipps.
iptables (mit KernelModulen, ist normal vorhanden)
- Das man Chef vom Server ist, sprich root Berechtigung.
- weitere Pakete folgen im Text
eine betriebsbereite Netzwerkkarte, normal hat man aber zwei drin (soll auch LANs geben ohne Internet )
- Ich arbeite ohne Netzwerk Manager im Beispiel, nur mit dem networking System.
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 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 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.
#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.
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
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
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
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:
- Quell-IP-Adresse
- Masquerading (Sonderform von Quell-IP-Änderung)
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 ( eth0:0 ist Internet )
Installation:
apt install arno-iptables-firewall
Konfiguration, diese kann man immer wieder aufrufen:
dpkg-reconfigure arno-iptables-firewall
Die Anworten:
Möchten Sie die Firewall-Konfiguration mit Debconf verwalten? -> Ja
Externe Netzwerkschnittstellen: -> eth1 eth0:0
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
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)
Offene externe UDP-Ports: -> bleibt leer, ausser ihr wisst was ihr da frei gebt, einen Timeserver nach draussen (123), oder bind9 (53) nach draussen??
Soll dieses System von außen 'pingbar' sein? -> Geschmacksache, ich sage Ja
Interne Netzwerkschnittstellen: -> eth0
Interne Netzwerke: -> 192.168.1.0/8
Möchten Sie NAT aktivieren? -> JA
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)
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
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 )