
Der Dienst, der IP-Adressen an Geräte im lokalen Netzwerk vergibt, scheint einer der einfachsten und bekanntesten zu sein. Trotzdem haben meine jüngeren Kollegen gelegentlich noch Fragen wie „Der Computer erhält eine seltsame Adresse“, und das Erscheinen eines zweiten DHCP-Servers in einem Netzwerksegment verursacht Nervenkitzel oder Netzwerkprobleme.
Damit diejenigen, die dieses Material lesen, keine solchen Fragen haben, möchte ich eine Reihe grundlegender Informationen zum Betrieb von Mechanismen, Funktionen und Konfigurationsbeispielen für fehlertolerante und geschützte Konfigurationen zur Ausgabe von IP-Adressen zusammenstellen. Ja, und vielleicht sind unerfahrene Spezialisten daran interessiert, neuronale Verbindungen aufzufrischen.
Ein wenig Theorie und Lösungen für interessante und nicht sehr praktische Probleme - unter dem Schnitt.
In einem modernen lokalen Netzwerk erfolgt die Ausgabe von Adressen normalerweise durch spezialisierte Dienste mit Protokollunterstützung. Am beliebtesten ist DHCP (Dynamic Host Configuration Protocol).
Zeroconf oder warum brauchen wir eine Art DHCP
Im Prinzip wurde ein Technologie-Stack namens Zeroconf speziell für kleine Netzwerke erstellt. Sie können auf zentralisierte Dienste und Server verzichten, einschließlich, aber nicht beschränkt auf die Ausgabe von IP-Adressen. Sie schließen (gut oder fast) die folgenden Fragen:
Abrufen einer IP-Adresse (Automatic Private IP Addressing oder APIPA). Das System selbst weist eine IP aus dem Netzwerk 169.254.0.0/16 (mit Ausnahme der / 24-Gitter am Anfang und Ende des Bereichs) basierend auf der MAC-Adresse und dem Pseudozufallszahlengenerator zu. Mit diesem System können Sie Konflikte vermeiden, und die Adresse aus diesem Netzwerk wird als verbindungslokal bezeichnet - auch weil diese Adressen nicht weitergeleitet werden.
Suche nach Namen . Das System gibt seinen Netzwerknamen bekannt und jeder Computer arbeitet mit ihm wie mit DNS und speichert Einträge in seinem Cache. Apple verwendet die mDNS-Technologie (Multicast DNS) und Microsoft die LLMNR-Technologie (Link-Local Multicast Name Resolution), die im Artikel „ Domänen, Adressen und Windows: Mischen, aber nicht schütteln “ erwähnt wird.
Suchen Sie nach Netzwerkdiensten . Zum Beispiel Drucker. Das vielleicht bekannteste Protokoll ist UPnP , das unter anderem Ports auf Routern selbst öffnen kann. Das Protokoll ist ziemlich kompliziert, es verwendet eine ganze Reihe von Add-Ons wie http, im Gegensatz zum zweiten bekannten Protokoll - DNS-SD (DNS Service Discovery), das einfach SRV-Einträge verwendet, auch bei der Arbeit mit mDNS.
Mit all den Vorteilen von Zeroconf - ohne heiliges Wissen können Sie ein funktionierendes Netzwerk aufbauen, indem Sie einfach Computer auf physischer Ebene verbinden - kann es sogar IT-Spezialisten stören.

Ein bisschen nervig, nicht wahr?
Um die automatische Optimierung auf allen Netzwerkadaptern zu deaktivieren, müssen Sie auf Windows-Systemen einen DWORD-Parameter mit dem Namen IPAutoconfigurationEnabled im Abschnitt HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters erstellen und auf 0 setzen.
Natürlich ist Zeroconf nur für kleine isolierte Netzwerke geeignet (Sie haben beispielsweise einen Freund mit Laptops getroffen, diese über WLAN verbunden und Diablo II gespielt, ohne Zeit auf Servern zu verschwenden), und ich möchte auch ein lokales Netzwerk mit dem Internet verbinden . Um nicht unter den statischen Einstellungen jedes Computers zu leiden, wurden spezielle Protokolle erstellt, einschließlich des Helden des Tages - DHCP.
DHCP und seine Vorläufer
Eine der ersten Implementierungen des Protokolls zur Ausgabe von IP-Adressen erschien vor mehr als 30 Jahren und wurde als RARP (Reverse Address Resolution Protocol) bezeichnet. Wenn wir das Funktionsprinzip ein wenig vereinfachen, sah es so aus: Der Client stellte eine Anfrage an die Broadcast-Adresse des Netzwerks, der Server akzeptierte sie, fand die Bindung der MAC-Adresse und IP des Clients in seiner Datenbank und sendete eine IP-Antwort.

Schema des RARP-Protokolls.
Und alles schien zu funktionieren. Das Protokoll hatte jedoch seine Nachteile: Es war erforderlich, den Server in jedem Segment des lokalen Netzwerks zu konfigurieren, die MAC-Adressen auf diesem Server zu registrieren und es gab keine Möglichkeit, zusätzliche Informationen an den Client zu übertragen. Um es zu ersetzen, wurde daher das BOOTP- Protokoll (Bootstrap Protocol) erstellt.
Ursprünglich wurde es für plattenlose Workstations verwendet, die nicht nur eine IP-Adresse angeben, sondern auch zusätzliche Informationen an den Client übertragen mussten, z. B. die Adresse des TFTP-Servers und den Namen der Download-Datei. Im Gegensatz zu RARP unterstützte das Protokoll bereits Relay - kleine Dienste, die Anforderungen an den „Hauptserver“ weiterleiteten. Dies ermöglichte die gleichzeitige Verwendung eines Servers in mehreren Netzwerken. Es blieb nur die Notwendigkeit, die Tabellen und die Größenbeschränkung für zusätzliche Informationen manuell zu konfigurieren. Infolgedessen ist das moderne DHCP-Protokoll in die Szene eingetreten, eine kompatible Erweiterung von BOOTP (der DHCP-Server unterstützt Legacy-Clients, aber nicht umgekehrt).
Ein wichtiger Unterschied zu veralteten Protokollen besteht in der Möglichkeit, vorübergehend eine Adresse (Lease) auszugeben und eine große Menge unterschiedlicher Informationen an den Client zu übertragen. Dies wird aufgrund des weniger trivialen Verfahrens zum Erhalten der Adresse erreicht. Wenn in den alten Protokollen das Schema in der Form Anfrage-Antwort einfach war, lautet das Schema jetzt wie folgt:
- Der Client sucht mit einer Broadcast-Anforderung nach dem Server und fordert zusätzliche Einstellungen an.
- Der Server antwortet dem Client mit einer IP-Adresse und anderen Einstellungen.
- Der Client bestätigt die empfangenen Informationen per Broadcast-Anfrage und gibt in der Bestätigung die IP-Adresse des ausgewählten Servers an.
- Der Server stimmt dem Client zu, indem er ihm eine Anfrage sendet, nach deren Erhalt der Client die Netzwerkschnittstelle bereits konfiguriert oder ablehnt.

Das Kommunikationsschema des Clients mit dem Weiterleitungsserver und dem Server.
Weitere Informationen zum Server-Client-Interaktionsschema und zur Struktur von Anforderungen und Antworten finden Sie beispielsweise im Material „ Struktur, Format und Zweck von DHCP-Paketen “.
Bei mehreren Interviews fragten sie mich: "Welchen Transport und Hafen nutzt DHCP?" Für alle Fälle antworten wir: "UDP-Server: 67, UDP-Client: 68".
Viele Implementierungen eines DHCP-Servers sind von vielen angetroffen worden, selbst beim Einrichten eines Heimnetzwerks. In der Tat ist der Server jetzt:
- Auf fast jedem Router, besonders auf SOHO.
- Auf Windows Server-Systemen. Informationen zum Server und seiner Konfiguration finden Sie in der offiziellen Dokumentation .
- Auf * nix-Systemen. Die vielleicht beliebteste Software ist ISC DHCP Server (dhcpd) und der Dnsmasq „Harvester“.
Es gibt viele spezifische Implementierungen, aber beispielsweise sind die Servereinstellungen auf SOHO-Routern beschränkt. Dies betrifft hauptsächlich zusätzliche Einstellungen zusätzlich zu der klassischen "IP-Adresse, Maske, Gateway, DNS-Server". Und genau diese zusätzlichen Optionen verursachen das größte Interesse an der Funktionsweise des Protokolls. Die vollständige Liste finden Sie im entsprechenden RFC , aber ich werde einige interessante Beispiele analysieren.
Erstaunliche DHCP-Optionen
In diesem Abschnitt werde ich die praktische Verwendung von DHCP-Optionen auf MikroTik-Geräten erläutern. Ich werde sofort darauf aufmerksam machen, dass nicht alle Optionen offensichtlich festgelegt sind. Das Format der Parameter wird im Wiki beschrieben . Es ist auch zu beachten, dass der Kunde die Optionen nur anwendet, wenn er danach fragt. Auf einigen Servern können Sie das Senden der Einstellungen erzwingen: In ISC DHCP Server ist beispielsweise die Anweisung dhcp-parameter-request-list dafür verantwortlich, und in Dnsmasq - * * --dhcp-option-force . MikroTik und Windows wissen nicht wie.
Option 6 und Option 15. Beginnen wir mit einer einfachen. Die Einstellungsnummer 6 sind die den Clients zugewiesenen DNS-Server, 15 ist das DNS-Suffix. Das Zuweisen eines DNS-Suffix kann hilfreich sein, wenn Sie mit Domänenressourcen in einem Nicht-Domänennetzwerk arbeiten, wie im Artikel „ Wie wir das Personal durch Wi-Fi reduziert haben “ beschrieben. Konfigurieren Sie MikroTik unter dem Spoiler.
MikroTik einrichten, Option 15 Zu wissen, dass ein DNS-Server auch eine Option ist, hat sich in letzter Zeit als nützlich erwiesen, wenn verschiedene Clients unterschiedliche DNS-Server ausstellen mussten. Die Entscheidung des Formulars „einen Server ausstellen und unterschiedliche dst-nat-Regeln für Port 53 festlegen“ passte aus mehreren Gründen nicht. Ein Teil der Konfiguration befindet sich wieder unter dem Spoiler.
MikroTik einrichten, Option 6 Option 66 und Option 67 . Diese Einstellungen stammen von BOOTP und ermöglichen es Ihnen, den TFTP-Server und das Image für den Netzwerkstart anzugeben. Für einen kleinen Zweig ist es sehr praktisch, dort Mikrotik- und plattenlose Workstations zu installieren und ein vorbereitetes Image einer ThinStation auf den Router zu werfen. Beispiel für eine DHCP-Konfiguration:
/ip dhcp-server option add name="option66" code=66 value="s'192.168.88.1'" add name="option67" code=67 value="'pxelinux.0'" /ip dhcp-server option sets add name="set-pxe" options=option66,option67
Option 121 und Option 249 . Sie werden verwendet, um zusätzliche Routen an den Client zu übertragen. Dies ist in einigen Fällen möglicherweise bequemer als das Registrieren von Routen auf dem Standard-Gateway. Die Einstellungen sind nahezu identisch, außer dass Windows-Clients letztere bevorzugen. Um den Parameter zu konfigurieren, müssen die Routen hexadezimal konvertiert werden, wobei die Zielnetzwerkmaske, die Netzwerkadresse und das Gateway in einer Zeile erfasst werden. Außerdem müssen Sie per RFC eine Standardroute hinzufügen. Die Tuning-Option befindet sich unter dem Spoiler.
RouteneinrichtungAngenommen, wir müssen Clients eine Route wie dst-address = 10.0.0.0 / 24 gateway = 192.168.88.2 hinzufügen, und das Hauptgateway lautet 192.168.88.1. Lassen Sie uns alles in HEX bringen:
Lassen Sie uns all dieses Glück in einer Zeile sammeln und die Einstellung erhalten:
/ip dhcp-server option add code=121 name=classless value=0x0A0000c0a8580200c0a85801
Lesen Sie mehr im Artikel „ Mikrotik, DHCP Classless Route “.
Option 252. Automatische Proxy-Server-Konfiguration. Wenn die Organisation aus irgendeinem Grund einen undurchsichtigen Proxy verwendet, ist es zweckmäßig, ihn mit Clients über eine spezielle wpad (pac) -Datei zu konfigurieren. Ein Beispiel für das Einrichten einer solchen Datei ist im PAC- Material (Proxy Auto Configuration) beschrieben . Leider verfügt MiroTik nicht über einen integrierten Webserver zum Hosten dieser Datei. Sie können hierfür das Hotspot- Paket oder die Metarouter- Funktionen verwenden. Es ist jedoch besser, die Datei an einer anderen Stelle abzulegen.
Option 82 . Eine der nützlichsten Optionen ist nicht nur für den Client, sondern auch für das DHCP-Relay. Ermöglicht die Übertragung von Informationen über den Switch-Port, mit dem der Client verbunden ist, und die ID des Switch selbst. Basierend auf diesen Informationen kann der Server wiederum bereits bestimmte Einstellungen für den Client vornehmen oder diese einfach protokollieren. Um den Verbindungsport des Clients zu finden, mussten nicht alle Switches hintereinander aufgerufen werden (insbesondere, wenn sie sich nicht auf dem Stapel befinden).
Nachdem DHCP-Relay auf dem Router konfiguriert wurde, werden die Felder Agent Circuit ID und Agent Remote ID in den Clientinformationen angezeigt, wobei das erste die Switch-Port- ID und das zweite die Switch- ID ist.

Adressen mit Option 82 ausgeben.
Die Informationen werden im Hexadezimalformat angegeben. Zur Vereinfachung können Sie das DHCP-Protokoll mithilfe von Skripten analysieren. Beispielsweise wird in der Technet-Skriptgalerie eine Lösung für eine Lösung von Microsoft mit dem Namen „ Dekorieren von DHCP-Optionen 82 “ veröffentlicht.
Option 82 wird auch aktiv im Abrechnungssystem von Anbietern und zum Schutz des Netzwerks vor Störungen von außen verwendet. Dies ist etwas detaillierter.
Fügen Sie Zuverlässigkeits- und Sicherheitsnetzwerke hinzu
Aufgrund der Einfachheit des Protokolls und des Vorhandenseins von Broadcast-Anforderungen kommt es zu effektiven Angriffen auf die Infrastruktur - hauptsächlich vom Typ MITM („Mann in der Mitte“). Angriffe werden durch Erhöhen Ihres DHCP-Servers oder -Relais ausgeführt. Wenn Sie die Ausgabe von Netzwerkeinstellungen steuern, können Sie den Datenverkehr problemlos auf ein gefährdetes Gateway umleiten. Um den Angriff zu erleichtern, wird DHCP-Hunger verwendet (der Angreifer gibt vor, ein Client oder ein Relay zu sein, und zwingt den "nativen" DHCP-Server, seine IP-Adressen zu erschöpfen). Weitere Informationen zur Implementierung des Angriffs finden Sie im Artikel „ Angriff auf DHCP “, während DHCP-Snooping die Schutzmethode ist.
Dies ist eine Switch-Funktion, mit der Sie einen DHCP-Server an einen bestimmten Port "binden" können. DHCP-Antworten an anderen Ports werden blockiert. Bei einigen Switches können Sie die Arbeit mit Option 82 konfigurieren, wenn sie im Paket erkannt wird (was auf das Vorhandensein eines Relais hinweist): Verwerfen, ersetzen, unverändert lassen.
In MikroTik-Switches ist DHCP-Snooping in den Bridge-Einstellungen aktiviert:
Die Konfiguration in anderen Switches ist ähnlich.
Es ist erwähnenswert, dass nicht alle MikroTik-Modelle vollständige Hardware-Unterstützung für DHCP-Snooping bieten - nur CRS3xx.
Zusätzlich zum Schutz vor böswilligen Hackern lindert diese Funktion Kopfschmerzen, wenn ein anderer DHCP-Server im Netzwerk angezeigt wird - beispielsweise wenn ein SOHO-Router, der als Switch mit einem Zugriffspunkt verwendet wird, seine Einstellungen zurücksetzt. Leider gibt es in Netzwerken, in denen SOHO-Geräte vorhanden sind, nicht immer eine kompetente Kabelnetzwerkstruktur mit verwalteten Routern. Aber das ist eine andere Frage.

Schönes Schalten ist der Schlüssel zur Gesundheit.
Andere Schutzmethoden umfassen die Port-Sicherheit ("Binden" einer bestimmten MAC-Adresse an den Router-Port, der Port wird blockiert, wenn Datenverkehr von anderen Adressen erkannt wird), die Verkehrsanalyse für die Anzahl der DHCP-Anforderungen und -Antworten oder die Begrenzung ihrer Anzahl und natürlich die Anzahl verschiedene IPS \ IDS- Systeme.
Wenn wir nicht nur über den Netzwerkschutz, sondern auch über die Zuverlässigkeit sprechen, ist es nicht unangebracht, die Funktionen von ausfallsicherem DHCP zu erwähnen. In der Tat ist DHCP aufgrund seiner Einfachheit häufig einer der Schlüsseldienste. Wenn dies fehlschlägt, kann die Arbeit des Unternehmens gelähmt werden. Wenn Sie jedoch nur zwei Server mit identischen Einstellungen installieren, führt nur ein Konflikt von IP-Adressen dazu.
Es scheint, dass Sie den Verteilungsbereich auf zwei Server aufteilen können und einen die eine Hälfte der Adressen und den anderen die andere geben lassen. Hier ist nur eine gelähmte Hälfte der Infrastruktur etwas besser als die ganze.
Wir werden weitere praktische Optionen analysieren.
Auf Windows Server- Systemen ab 2012 funktioniert das DHCP-Redundanzsystem sofort im Lastausgleichsmodus (Aktiv-Aktiv) oder im Fehlertoleranzmodus (Aktiv-Passiv). Eine detaillierte Beschreibung der Technologie und der Einstellungen finden Sie in der offiziellen Dokumentation . Ich stelle fest, dass die Fehlertoleranz auf Zonenebene konfiguriert ist, sodass verschiedene Zonen in verschiedenen Modi arbeiten können.

Konfigurieren des DHCP-Server-Failovers unter Windows.
ISC DHCP Server verwendet die Failover-Peer- Direktive zum Konfigurieren der Fehlertoleranz. Es wird vorgeschlagen, Daten unabhängig voneinander zu synchronisieren, z. B. mithilfe von rsync. Lesen Sie mehr im Artikel " Zwei DHCP-Server unter Centos7 ... "
Wenn Sie eine fehlertolerante Lösung auf Basis von MikroTik erstellen, können Sie nicht auf Tricks verzichten. Eine der Optionen zur Lösung des Problems wurde bei MUM RU 18 angekündigt und dann im Blog des Autors veröffentlicht . Kurz gesagt: Zwei Server sind konfiguriert, jedoch mit einem anderen Parameter für den Verzögerungsschwellenwert (Antwortverzögerung). Dann gibt der Server die Adresse mit weniger Verzögerung und mit einer längeren Verzögerung aus - nur wenn die erste ausfällt. Die Informationssynchronisation muss erneut mit Skripten erfolgen.
Persönlich habe ich einmal ziemlich nervös gemacht, als ein Router „versehentlich“ im Netzwerk auftauchte und sowohl mit der WAN- als auch mit der LAN-Schnittstelle mit dem lokalen Netzwerk verbunden war.
Sag mir, musstest du dich mit DHCP-Lepra auseinandersetzen?