Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| netzwerke:dhcp [2010/04/04 21:23] – st | netzwerke:dhcp [2015/03/04 17:47] (aktuell) – [DHCP Relay] st | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== DHCP (Dynamic Host Configuration Protocol) ====== | ||
| + | Das [[wpde> | ||
| + | |||
| + | |||
| + | ===== Ablauf der DHCP-Kommunikation ===== | ||
| + | |||
| + | {{server: | ||
| + | |||
| + | ===== mögliche Konfigurationsparameter für die Clients ===== | ||
| + | Abgesehen von der Lease-dauer können Clients folgende Konfigurationsparameter übergeben werden: | ||
| + | * IP-Adresse und Netzwerkmaske | ||
| + | * Default-Gateway (Router) | ||
| + | * [[netzwerke: | ||
| + | * [[netzwerke: | ||
| + | * [[netzwerke: | ||
| + | * Proxy-Konfiguration via [[wpde> | ||
| + | |||
| + | |||
| + | |||
| + | ===== Links ===== | ||
| + | * [[http:// | ||
| + | * **[[http:// | ||
| + | * **[[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | ===== DHCP-Client ===== | ||
| + | |||
| + | * IP-Adresse beziehen: <code bash> | ||
| + | * IP-Adresse freigeben (ähnlich zu '' | ||
| + | |||
| + | ====== Konfiguration von ISC DHCP3-Server unter Linux ====== | ||
| + | |||
| + | Bei [[ubuntu: | ||
| + | |||
| + | Die Einstellungen findet man in der Datei | ||
| + | / | ||
| + | |||
| + | Die Dokumentation befindet sich im Verzeichnis ''/ | ||
| + | |||
| + | :!: Wenn der DHCP-Server der offizielle Server für das Subnetz ist, sollte unbedingt die Zeile | ||
| + | authoritative; | ||
| + | in der Konfiguration vorkommen. Diese Einstellung erlaubt es dem DHCP-Server einen DHCPNACK an falsch konfigurierte Clients | ||
| + | |||
| + | Die IP des DHCP-Servers kann man auch gleich mit der Option " | ||
| + | |||
| + | Die Konfiguration (z.B einzelnder Hosts) kann man auch in Einzeldateien auslagern: | ||
| + | < | ||
| + | host passacaglia { | ||
| + | hardware ethernet 0: | ||
| + | filename " | ||
| + | server-name " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Diese Einzeldateien kann man mit | ||
| + | < | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | wieder in die Konfiguration aufnehmen. | ||
| + | |||
| + | |||
| + | ===== eigenes Log-file ===== | ||
| + | Standardmäßig wird ins syslog protokolliert, | ||
| + | |||
| + | Wie man [[linux: | ||
| + | |||
| + | ===== Leasedauer ===== | ||
| + | Die Standard-leasetime ist auf 600 Sekunden gesetzt (wenn der Client nicht danach fragt), falls der DHCP-Client mehr anfragt wird maximal die '' | ||
| + | default-lease-time 600; | ||
| + | max-lease-time 7200; | ||
| + | Die Lease-dauer von 10 min bzw. max. 2h scheint mir etwas niedrig angesetzt, wenn die Rechnerzuordnung relativ statisch bleibt kann man zur Vermeidung unnötigen Datenverkehrs die Zeiten (deutlich) erhöhen. | ||
| + | |||
| + | :!: Die Lease-times können auch für einzelene Subnetze anders festgelegt werden. | ||
| + | |||
| + | |||
| + | ===== dynamisches DNS (DDNS) ===== | ||
| + | Der '' | ||
| + | |||
| + | - '' | ||
| + | - '' | ||
| + | - '' | ||
| + | |||
| + | Es muss also eine Zeile nach dem Muster | ||
| + | ddns-update-style none; | ||
| + | herauskommen. | ||
| + | |||
| + | Siehe auch Option '' | ||
| + | |||
| + | :!: dem DHCP-Server die Möglichkeit zu geben, [[netzwerke: | ||
| + | |||
| + | Näheres kann man in Handbuch ('' | ||
| + | |||
| + | ===== Clientkonfiguration übergeben ===== | ||
| + | Die folgenden Einstellungen werden mit option eingeleitet und haben entweder lokale (auf das jeweilige Subnetz) oder globale Wirkung (auch alle Clients). | ||
| + | |||
| + | |||
| + | * **[[netzwerke: | ||
| + | :!: Die Angabe des Domänennamens und die Nameserver haben eine **globale** Wirkung. | ||
| + | < | ||
| + | option domain-name " | ||
| + | option domain-name-servers IP1, IP2; | ||
| + | </ | ||
| + | statt der IPs der Nameserver (durch Komma getrennt!) kann auch der Name (z.B. ns1.beispieldomain.de) angegeben werden. | ||
| + | |||
| + | |||
| + | |||
| + | * **IP-Adressenpool** und **Netzwerkmaske**: | ||
| + | |||
| + | :!: Für **jedes** Subnetz im Netzwerk sollte ein Eintrag vorhanden sein, auch wenn keine DHCP-Clients hinein sollen (in diesem Fall lässt man zwischen den geschweiften Klammern einfach leer). | ||
| + | |||
| + | < | ||
| + | subnet 10.0.0.0 netmask 255.0.0.0 { | ||
| + | range 10.0.0.10 10.0.0.200; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | FIXME Ausschlüsse? | ||
| + | |||
| + | * **Default-Gateway** bzw. die Router | ||
| + | < | ||
| + | option routers IP1, IP2; | ||
| + | </ | ||
| + | Alternativ ist auch die Angabe von Namen (router1.beispieldomain.de, | ||
| + | |||
| + | * **Time-Server (NTP-Server)** | ||
| + | Mit der Option '' | ||
| + | option time-servers ip-address [, ip-address... | ||
| + | |||
| + | * **WINS-Server** | ||
| + | |||
| + | < | ||
| + | option netbios-name-servers IP1, IP2; | ||
| + | option netbios-node-type 2; | ||
| + | </ | ||
| + | Die Option " | ||
| + | ^ Wert von " | ||
| + | | 1 |b-node | benutzt nur broadcasts statt den WINS-Server | | ||
| + | | 2 | p-node | benutzt nur den WINS-Server | | ||
| + | | 4 | m-node | versucht zuerst einen broadcast, dann den WINS-Server | | ||
| + | | 8 | h-node | versucht zuerst den WINS-Server, | ||
| + | |||
| + | Die beiden Optionen müssen nicht global sein, sondern können auch nur in einem Subnetz gelten. Weitere Informationen zu WINS und Netbios bei [[http:// | ||
| + | |||
| + | * **Proxy-Konfiguration** via [[wpde> | ||
| + | |||
| + | Dazu hat [[http:// | ||
| + | |||
| + | ===== einzelnen Host feste Namen/IPs zuweisen ===== | ||
| + | Um einzelnen Host eine (oder mehrere) feste IPs (anhand der MAC-Adresse) zuzuweisen: | ||
| + | |||
| + | < | ||
| + | host webserver { | ||
| + | hardware ethernet 0: | ||
| + | fixed-address 10.0.0.3 | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Wenn mehrere IPs (mit Komma getrennt) angegeben werden, der Client bekommt dann die zum jeweiligen Subnetz passende (in dem er gebootet hat) bzw. wenn keine passt wird die Zuordnung ignoriert. Anstatt einer IP kann auch ein (auf ein oder mehrere IPs auflösbarer!) Name angegeben werden. | ||
| + | |||
| + | |||
| + | Es können auch feste Namen vergeben werden, dann sollte diese | ||
| + | server-name " | ||
| + | |||
| + | FIXME (Unterschied zwischen: | ||
| + | |||
| + | |||
| + | |||
| + | ===== Gruppen (Klassen) bilden ===== | ||
| + | Gruppen aus (gleichförmigen) Rechnern können in spezielle Klassen eingeteilt | ||
| + | < | ||
| + | class " | ||
| + | match if substring (option vendor-class-identifier, | ||
| + | } | ||
| + | </ | ||
| + | und diese dann in einen speziellen Bereich gesteckt werden (siehe ''/ | ||
| + | |||
| + | Außerdem ist es auch möglich die maximale Anzahl der Clients, die ein gültigen Lease erhalten haben, anzugeben: | ||
| + | lease limit 4; | ||
| + | |||
| + | ===== Zugriffsrechte ===== | ||
| + | |||
| + | Die Schlüsselwörter | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | ===== Failover-Konfiguration ===== | ||
| + | |||
| + | Ohne gültige/ | ||
| + | |||
| + | Eine einfache Möglichkeit ist die Einrichtung eines zweiten DHCP-Servers mit einem eigenen Pool von IP-Adressen. Dabei schließt man jeweils die Adressen des anderen Servers aus und beim Ausfall hat der zweite Server (hoffentlich) noch genug Adressen für Rechner zur Verfügung. Allerdings sind immer dann Client-Rechner gezwungen ihre IP-Adresse zu ändern wenn der ursprüngliche DHCP-Server nicht mehr erreicht werden kann und die maximale Lease-Dauer abgelaufen ist. Dabei müssen alle bestehenden Verbindungen auf diesem Rechner beendet werden. | ||
| + | |||
| + | Sauberer ist eine Verteilung der Anfragen auf zwei ISC DHCP-Server, | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | Auf der Windows-Plattform ist ein grob vergleichbares Setup übrigens nur mit Microsoft Server 2008 Enterprise möglich (siehe [[http:// | ||
| + | |||
| + | |||
| + | ====== Troubleshooting ====== | ||
| + | Immer hilfreich sind die Handbücher: | ||
| + | * man dhcpd3 | ||
| + | * man dhcpd.conf | ||
| + | * man dhcp-options | ||
| + | |||
| + | Zum Analysieren von Fehler hier ein kompletter DHCP-Adressbezug zum nachlesen. | ||
| + | ^ | ||
| + | | 10.0.0.2 | IP-Adresse des DHCP-Servers | | ||
| + | | dhcp-hostname | " | ||
| + | | eth0 | Ethernet-Schnittstelle des DHCP-Servers | | ||
| + | | 00: | ||
| + | | dhcp-client-name | " | ||
| + | |||
| + | Ein korrekter Addressbezug sollte sich in vier Zeilen wiederfinden: | ||
| + | < | ||
| + | Aug 22 17:20:36 dhcp-hostname dhcpd: DHCPDISCOVER from 00: | ||
| + | Aug 22 17:20:37 dhcp-hostname dhcpd: DHCPOFFER on 10.254.239.20 to 00: | ||
| + | Aug 22 17:20:37 dhcp-hostname dhcpd: DHCPREQUEST for 10.254.239.20 (10.0.0.2) from 00: | ||
| + | Aug 22 17:20:37 dhcp-hostname dhcpd: DHCPACK on 10.254.239.20 to 00: | ||
| + | </ | ||
| + | |||
| + | Die aktuellen Leases sollten auf dem DHCP-Server in der Datei ''/ | ||
| + | |||
| + | < | ||
| + | lease 10.254.239.20 { | ||
| + | starts 3 2007/08/22 15:20:37; | ||
| + | ends 3 2007/08/22 17:00:37; | ||
| + | binding state active; | ||
| + | next binding state free; | ||
| + | hardware ethernet 00: | ||
| + | client-hostname " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | :!: Der **Ort des Lease-files** kann auch in der Konfigurationsdatei **geändert sein**: | ||
| + | lease-file-name "/ | ||
| + | |||
| + | Auf dem Client in der Datei ''/ | ||
| + | |||
| + | < | ||
| + | lease { | ||
| + | interface " | ||
| + | fixed-address 10.254.239.20; | ||
| + | server-name ""; | ||
| + | option subnet-mask 255.0.0.0; | ||
| + | option routers 10.0.0.2; | ||
| + | option dhcp-lease-time 6000; | ||
| + | option dhcp-message-type 5; | ||
| + | option domain-name-servers 10.0.0.2; | ||
| + | option dhcp-server-identifier 10.0.0.2; | ||
| + | option domain-name " | ||
| + | renew 3 2007/8/22 16:10:54; | ||
| + | rebind 3 2007/8/22 16:48:27; | ||
| + | expire 3 2007/8/22 17:00:57; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== DHCP-Ping ===== | ||
| + | Das Paket '' | ||
| + | sudo dhcping -s IP | ||
| + | sollte die Ausgabe | ||
| + | Got answer from: IP | ||
| + | erzeugen. | ||
| + | |||
| + | ===== DHCP-Nachrichtentypen ===== | ||
| + | |||
| + | In den Log-Datein erkennt man, welcher Status gerade vorliegt bzw. wann wieder welche Aktion erfolgt (option ). Dazu muss man nur die Zahlen den einzelnen Zuständen zuordnen: | ||
| + | |||
| + | ^ dhcp-message-type ^ Bedeutung ^ | ||
| + | | 1 | DHCPDISCOVER | | ||
| + | | 2 | DHCPOFFER | | ||
| + | | 3 | DHCPREQUEST | | ||
| + | | 4 | DHCPDECLINE | | ||
| + | | 5 | DHCPACK | | ||
| + | | 6 | DHCPNAK | | ||
| + | | 7 | DHCPRELEASE | | ||
| + | | 8 | DHCPINFORM | | ||
| + | |||
| + | siehe [[http:// | ||
| + | |||
| + | |||
| + | ===== DHCP in Firewall freischalten ===== | ||
| + | |||
| + | Eventuell ist DHCP durch eine Firewall blockiert: | ||
| + | |||
| + | <code bash> | ||
| + | ====== DHCP Server finden ====== | ||
| + | |||
| + | Das DHCP-Protokoll sieht leider keinerlei Sicherheitsmechanismen vor an denen ein Client erkennen kann ob er korrekt Daten vom korrekten Server erhalten hat(er vertraut der ersten Antwort). Deshalb ist das Finden vom nicht-authorisierten DHCP-Servern (ob absichtlich or versehentlich aktiviert) eine Standard-Aufgabe. | ||
| + | |||
| + | Folgende Programme listen die vorhandenen DHCP-Server auf((die man auch mittels eines Paket-Sniffers wie wireshark finden könnte, ist aber Anspruchsvoller)): | ||
| + | * [[linux: | ||
| + | * [[windows: | ||
| + | [[http:// | ||
| + | |||
| + | |||
| + | ====== DHCP Relay ====== | ||
| + | |||
| + | Ein DHCP Relay umgeht den Zwang in jedem Subnetz ein DHCP-Server zu haben. Er konvertiert die (DHCP-Broadcast-) Anfragen indem er sie per unicast an den eigentlichen DHCP-Server weiterleitet. Dabei sollte man dann auch die IP des DHCP-Servers mit der Option " | ||
| + | |||
| + | Bei der Installtion von Paket '' | ||