Ein anderer Bestandteil von LPIC 201 ist DHCP.
Doch bevor man sich auf die Installation eines DHCP-Servers stürzt, ist es ganz gut, mal zu wissen, wie das System dahinter funktioniert. Ich habe versucht alles ein bisschen grafisch darzustellen.
IP beziehen
Alles beginnt damit, dass ein Client gerne eine IP-Adresse hätte. Da er aber noch keine DHCP-Server im Netz kennt, schickt der DHCP-Client (auf Client 1) ein DHCPDISCOVER-Paket an den Broadcast. Dieser leitet das an alle Geräte im Netzsegment und über ein Relay auch an andere Netzsegmente weiter. Ist ein DHCP-Server innerhalb des Netzwerkes vorhanden, so wird dieser das Paket aufnehmen, alle anderen Typen werden das verwerfen.
Die DHCP-Server im Netzwerk wissen nun, dass ein Client eine IP sucht und prüfen ob in der lokalen Datenbank noch freie IP-Adressen verfügbar sind. Falls ja, schicken sie ein DHCPOFFER-Paket an den Broadcast mit der für den Client ausgewählten IP-Adresse. Über den Broadcast gelangt das ganze dann wieder zum Client.
Es kann gut sein, dass ein Angebote von mehreren Servern empfängt. Falls dann nichts anderes eingestellt wurde, wird nach dem “First Come First Served”-Prinzip abgerechnet.
Hat sich der Client also für einen Server entschieden, so wird die Bestätigung der IP-Adresse und die ganze andere Konfiguration mit einem DHCPREQUEST-Paket angefragt. Dies geht wieder an den Broadcast, damit die anderen DHCP-Server auch wissen, das sich der Client nicht für sie entschieden hat.
Ist die IP-Adresse auf dem DHCP-Server immer noch verfügbar, so nimmt der Server die IP aus der Liste der Verfügbaren Adressen raus und bestätigt alles mit einem DHCPACK-Paket. Sobald der Client das empfängt, wird die IP-Adresse der Schnittstelle zugewiesen und der Vorgang ist abgeschlossen.
Bestätigen
Wenn nun ein Client rebootet, so muss nicht nochmal der gesamte Prozess von vorne durchlaufen werden. Der Client prüft nach einem Reboot die zuletzt gespeicherten Parameter auf deren Gültigkeit (TTL) und lässt sich alles über ein DHCPREQUEST vom DHCP-Server bestätigen, welcher dann alles wieder mit einem DHCPACK bestätigt. Sollte irgendetwas nicht mehr in Ordnung sein, so lehnt der DHCP-Server die Anfrage mit einem DHCPNACK ab und der Client muss eine neue IP-Adresse beziehen.
Sollte ein Client nun aber so lange laufen, dass die Gültigkeit der Zuweisung (leasing) ablaufen würde, so kann der Client eine Verlängerung beantragen. Im Gegensatz zur Bestätigung nach einem Reboot wird dieser DHCPREQUEST aber direkt an den DHCP-Server adressiert und nicht an den Broadcast. Danach folgt die bereits oben beschriebene Bestätigung oder Ablehnung.
DHCP-Server aufsetzen
So nachdem wir nun wissen, wie das System hinter DHCP funktioniert, können wir uns an die Installation eines eigenen DHCP-Server machen:
apt-get install dhcp3-server
Konfiguriert wird alles über die Datei /etc/dhcp/dhcpd.conf.
Eine ziemlich rudimentäre Konfiguration könnte so aussehen:
root@master:/etc/dhcp# cat dhcpd.conf
ddns-update-style none;
option domain-name "encodingit.ch";
option domain-name-servers master.encodingit.ch;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.80;
option domain-name-servers master.encodingit.ch;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 700;
max-lease-time 7800;
}
host master {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address 192.168.1.49;
}
Dabei wird ein Range von 50-80 festgelegt und zusätzlich ein Host “master” definiert, welcher immer die selbe IP-Adresse erhalten wird.
Zu Beginn in der Datei kann man Standardkonfigurationen festlegen, welche solange gelten, wie diese nicht innerhalb eines Subnets überschrieben werden, wie in meinem Beispiel ja der Fall.
Nun muss man noch alles starten:
dhcpd eth0
Dynamische IP für Client
Nachdem unser Server nun rennt, muss noch der Client auf DHCP umgestellt werden.
Dafür ist die Datei /etc/network/interfaces verantwortlich. Diese wird mit folgendem Inhalt ersetzt:
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
Wichtig hier ist die letzte Zeile mit dem Vermerk “dhcp”. Natürlich soll nicht bei jedem System das Interface eth0 eine dynamische IP beziehen, also zuerst überlegen und nicht einfach abschreiben
Damit auch alles aktiv wird, noch rasch den Netzwerkservice neu starten:
/etc/init.d/networking restart
Und nun sollte das Interface eine IP-Adresse besitzen:
root@master:/etc/dhcp# ifconfig eth0
eth0 Link encap:Ethernet Hardware Adresse 00:25:64:c9:b1:6a
inet Adresse:10.128.101.26 Bcast:10.128.101.255 Maske:255.255.255.0
inet6-Adresse: fe80::225:64ff:fec9:b16a/64 Gültigkeitsbereich:Verbindung
DHCP-Relay
Das Relay dient dazu, um auch die DHCP in einem anderen Netzsegment zu erreichen.
Installiert ist ein Relay relativ einfach:
apt-get install isc-dhcp-relay
Während der Installation gibt man die IP des DHCPs an, zu welchem man weiterleiten möchte und schlussendlich noch das Interface, auf welche auf DHCP-Traffic gehorcht wird. Zwei mal Bestätigen und fertig!
Probleme
Bei Problemen kann die Syslog-Datei mehr Informationen liefern:
tail -f /var/log/syslog
Oder man kontrolliert den Traffic von Hand:
dhcpdump
Und fertig ist die dynamische IP-Vergabe im eigenen Netzwerk.
Das könnte dich auch interessieren:
- Domain Name System mit Bind9
- Der (Ur-)Verzeichnisdienst NIS / YP