Debian DHCP
Inhalt
Contents
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.
Voraussetzungen
Für diesen Artikel:
iptables (mit KernelModulen)
- weitere Pakete folgen im Text
eine betriebsbereite Netzwerkkarte (soll auch LANs geben ohne Internet
)
Ich hau die Module meistens einfach in /etc/modules rein. Einfach ne Zeile des Modules, z.b. ne ne2k-pci bei mir für beide karten, oder mit modconf.
Es wird ein Debian-System angenommen mit einer Netzwerkkarten für das LAN. Diese müssen betriebsbereit im System vorhanden sein, sprich das Module geladen sein und konfiguriert:
/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 auto eth0 iface eth0 inet dhcp # Diese wird von dhcp erkannt und für das LAN verwendet. Man kann auch eth0 nehmen für, # falls das LAN daran ist. auto eth1 iface eth1 inet static address 192.168.1.1 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255
Dabei ist dem Beispiel eth0 über dhclient mit dem Provider verbunden. Und die eth1 wird unser LAN für zuhause, die ist für unseren dhcp-server hier eigentlich nur wichtig.
Auffrischen der Interfaces: /etc/init.d/networking restart
Die Konfiguration der Netzwerkkarten können wir über ifconfig kontrollieren.
NAT/MASQ
ZischZwitscherDazwischen: evt. liest ihr noch debian webmail hier, da gibt die arno firewall, oder ihr seit doch so cool die Filterregeln händisch zu erstellen. ZischZwitscherDazwischen....
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 eth0 -j MASQUERADE
(nur ein Auszug des wichtigsten Befehls)
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.
DHCP-Server mit dnsmasq, ohne DNS-Server
"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
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.3Hier 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.3also 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
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..
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:
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 /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) 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.
