Probleme mit DHCP Relay und Firewalls
Hallo zusammen,
wir haben einen DHCP-Server (Windows 2012r2) zentral. Netze außerhalb des lokalen Netzes des Servers sind per DHCP-Relay angebunden. DHCP-Relay-Agents sind 2 Router (1x OPNSense 1, Bintec be.ip). beim Aufräumen (Firewallregeln entrümpeln etc.) bin ich auf ein Problem gestoßen:
Ich hatte angenommen, dass die DHCP-Clients keine Verbindung zum DHCP-Server benötigen, da das DHCP-Protokoll aus Client-Sicht am DHCP-Relay-Agent endet. Dies scheint nicht so zu sein, verschiedene Clients versuchen den DHCP_Server direkt zu kontaktieren. Z.B.
DHCPREQUEST Quelle: Client_in_anderem_subnetz Ziel: DHCP-Server
Was ich hier nicht verstehe - woher haben die die Adresse des DHCP-Servers? Müssten die nicht alle Pakete vom DHCP-Relay-Agent bekommen?
Die RFCs zu DHCP und BOOTTP drücken sich da igendwie vor einer konkreten Beschreiben des DHCP_RELAY Mechanismus (vielleicht habe ich es auch nur nicht gefunden).
Zweites Problem: Einer der DHCP_Relay_Agents (die OPNSense) sendet DHCPOFFER-Broadcasts auf ein Interface, für das DHCP-RELAY gar nicht aktiviert ist. Das ist eigentlich ein OPNSense-Problem. Hier stellt sich die Frage, wo der Fehler liegt. Werden solche Broadcasts an alle Schnittstellen gesendet (ich meine so etwas für früher mal gelesen zu haben)?
Meine eigentliche Frage: Kann mir jemand auf die Sprünge helfen, was beim DHCP_Relay denn nun Standard? Bevor ich eine fehlerhafte DHCP-Client oder DHCP-Relay-Agent Implementation unterstelle, würde ich gerne wissen, was richtig und was falsch wäre. Seltsam finde ich jedenfalls, dass Firewallregeln für DHCP oft global für IN+OUT / ANY / UDP Port67+68 (quasi eine Scheunentorregel) beschrieben werden. Ich wollte das konkreter machen, momentan klappt das aber nicht.
Grüße
lcer
wir haben einen DHCP-Server (Windows 2012r2) zentral. Netze außerhalb des lokalen Netzes des Servers sind per DHCP-Relay angebunden. DHCP-Relay-Agents sind 2 Router (1x OPNSense 1, Bintec be.ip). beim Aufräumen (Firewallregeln entrümpeln etc.) bin ich auf ein Problem gestoßen:
Ich hatte angenommen, dass die DHCP-Clients keine Verbindung zum DHCP-Server benötigen, da das DHCP-Protokoll aus Client-Sicht am DHCP-Relay-Agent endet. Dies scheint nicht so zu sein, verschiedene Clients versuchen den DHCP_Server direkt zu kontaktieren. Z.B.
DHCPREQUEST Quelle: Client_in_anderem_subnetz Ziel: DHCP-Server
Was ich hier nicht verstehe - woher haben die die Adresse des DHCP-Servers? Müssten die nicht alle Pakete vom DHCP-Relay-Agent bekommen?
Die RFCs zu DHCP und BOOTTP drücken sich da igendwie vor einer konkreten Beschreiben des DHCP_RELAY Mechanismus (vielleicht habe ich es auch nur nicht gefunden).
Zweites Problem: Einer der DHCP_Relay_Agents (die OPNSense) sendet DHCPOFFER-Broadcasts auf ein Interface, für das DHCP-RELAY gar nicht aktiviert ist. Das ist eigentlich ein OPNSense-Problem. Hier stellt sich die Frage, wo der Fehler liegt. Werden solche Broadcasts an alle Schnittstellen gesendet (ich meine so etwas für früher mal gelesen zu haben)?
Meine eigentliche Frage: Kann mir jemand auf die Sprünge helfen, was beim DHCP_Relay denn nun Standard? Bevor ich eine fehlerhafte DHCP-Client oder DHCP-Relay-Agent Implementation unterstelle, würde ich gerne wissen, was richtig und was falsch wäre. Seltsam finde ich jedenfalls, dass Firewallregeln für DHCP oft global für IN+OUT / ANY / UDP Port67+68 (quasi eine Scheunentorregel) beschrieben werden. Ich wollte das konkreter machen, momentan klappt das aber nicht.
Grüße
lcer
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 643448
Url: https://administrator.de/contentid/643448
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
14 Kommentare
Neuester Kommentar
verschiedene Clients versuchen den DHCP_Server direkt zu kontaktieren. Z.B.
Das ist unmöglich und können sie gar nicht. Bzw. dann hat der Relay Agent einen Bug oder du hast ihn falsch konfiguriert und müsste ihnen ja aktiv den Server mitteilen.DHCP basiert ja auf einem Broadcast den der Client sendet. In einem Broadcast steht ja nix von einer DHCP Server Zieladresse.
Die kennt ja einzig nur der Relay Agent und forwardet den Broadcast dann als Unicast zum Server mit seiner Absender IP. Die ersetzt der Agent.
Wenn du dir das mit einem Wireshark am Client einmal ansiehst, dann siehst du auch genau das wenn der Relay Agent sauber arbeitet.
Deine Annahme ist also richtig das die Clients keine Verbindung zum Server brauchen, das braucht logischerweise rein nur der Relay Agent.
sendet DHCPOFFER-Broadcasts auf ein Interface, für das DHCP-RELAY gar nicht aktiviert ist.
Muss man sich bei der buggy OPNsense Firmware wohl auch nicht groß wundern. Mit pfSense passiert das wenigstens nicht.Werden solche Broadcasts an alle Schnittstellen gesendet
Nein, nur an die wo das Relaying aktiv ist und dann im Layer 2 (der Relay cacht die Mac des Clients) nur auf dem spezifischen Client Interface.Ich wollte das konkreter machen, momentan klappt das aber nicht.
Was willst du denn da noch konkreter machen ?? Mehr Ports kennt DHCP ja gar nicht:https://de.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol#DHCP-R ...
Bedenken solltest du aber das die Absender IP immer 0.0.0.0 ist. Eine Regel die also auf die lokale Netzwerk Adresse filtert ist dann natürlich tödlich für DHCP. Die Port 67 und 68 Filter müssen dann jeweils ANY dort haben.
also müßte z.B. 0.0.0.0/32 + 192.168.4.0/24 ja passen.
Nein, denn die Source IP ist 0.0.0.0/32 und Destination IP 255.255.255.255 da ja ein All Network UDP Broadcast !Logisch, denn der DHCP Client kennt das IP Netz ja vorher gar nicht !
Nimm den Wireshark zur Hand und sieh dir das doch selber einmal an !
Request:
Inhalt des Requests:
Hier im Beispiel ohne Relay IP da das Segment ohne Relay arbeitet.
Es gibt wirklich keine Unicasts zwischen Client und relay bzw. Server
Ist doch auch logisch ! Denke mal nach.... Den Unicast schickt doch der Relay an den DHCP Server und NICHT der Client !Wenn, dann müsstest du mit dem Wireshark den DHCP Server sniffern mit Filter auf die lokale IP Adresse der Firewall als Absender.
Der Relay wandelt den empfangenen Client Broadcast in einen Unicast mit der Relay eigenen IP als Absender an den DHCP Server um.
Beispiel Cisco Router:
Stinknormale Konfig:
!
interface Vlan1
ip address 172.30.1.1 255.255.255.0
!
interface Vlan10
ip address 172.30.10.1 255.255.255.0
ip helper-address 172.30.1.222
!
(.1.222 ist der DHCP Server)
DHCP Client hängt am Interface "vlan 1" und ein Wireshark an einem Switch Mirrorport der den DHCP Server Port spiegelt.
DHCP Discover vom Relay:
Hier kannst du im Layer 2 sehen genau das die Absender IP die des Relays ist und die Layer 2 Mac Adresse ebenfalls die des Relays (Cisco) im vlan 1 ist.
cisco-router#sh int vlan 1
Vlan1 is up, line protocol is up
Hardware is EtherSVI, address is f0f7.5502.73b6 (bia f0f7.5502.73b6)
Internet address is 172.30.1.1/24
DHCP Offer vom DHCP Server als Antwort an den Relay:
Fazit: Works as designed !
Wenn deine Firewall da irgendwas von an unbeteiligte Interfaces flutet oder sonstwie forwardet hat die garantiert einen Bug oder ist falsch konfiguriert.
der DHCPREQUEST vom Client direkt an den DHCP Server geschickt
Das kann gut sein, denn im Offer steht ja die direkte DHCP Server IP drin. Folglich kann der Client ja auch den Server direkt erreichen um den Lease zu verlängern.Für die Firewall bedeutet das, dass keine Regel den Verkehr zwischen Clientnetz und DHCP Server blockieren darf.
Das ist dann zweifelsohne richtig, jedenfalls für die DHCP Ports UDP 67 und 68. wenn mehrere Router zwischen Client und Server liegen, muss auf jedem ein Relay-Agent aktiviert sein.
Nein, das ist (sorry) Unsinn und de facto FALSCH ! Es ist ja ein Unicast mit korrekter Absender und Empfänger IP Adresse was stinknormal geroutet wird. Router in den Hops dazwischen müssen natürlich dann niemals Relays sein. Der Relay umgeht bloss die UDP Broadcast Problematik die ja prinzipbedingt am Router endet. Niemals aber direkt routebare Unicast IP Frames. Vergiss das also... Stell dir vor ein mehrfach segmentiertes Firmennetz und da müsstest du auf allen Routehops einen Relay definieren. Das wäre unsinnig und ist auch nicht der Fall. Genau deshalb wird es ja als routebarer Unicast weitergeleitet. Weisst du als IP Profi auch selber ! Das wäre zumindest ein Einstiegspunkt für die Problematik der seltsamen Broadcasts.
Da hast du Recht. Bei Cisco und anderen Herstellern ist die Layer 2 Option aber per se gar nicht möglich und ausgeschlossen weil die Kommando Syntax das gar nicht hergibt:https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp/command/iap-cr-b ...
Da ist es also per se immer Layer 3.
Ein kurzer Labor Test eben zeigt: Der Cisco flutet es erwartungsgemäß nicht an weitere lokale IP Ports am gleichen Gerät. Ebenso ein Ruckus ICX 7150 Switch im Layer 3 Mode macht das auch nicht. Die pfSense ebensowenig. Alle können das Relay problemlos über mehrere Routing Hops erledigen. (Router Kaskade mit OSPF dazwischen)
Mikrotik müsste ich noch testen, erwarte da aber auch das gleiche Verhalten weil es nur eine Layer 3 Option da gibt.
Wahrscheinlich ist es tatsächlich eine Option, die DHCPREQUESTs per Broadcast-Relay-Kette bis zum Zielserver durchzureichen.
Das wäre aber Protokoll technsich ziemlicher Unsinn, denn an jedem Router käme dieser Broadcast nicht weiter. Stell dir ein stark segementiertes Campus Netz eines großen Unternehmens vor mit zentraler DHCP Verwaltung. Wieviel tausend Mal willst du dann auf wieviel Interfacen immer den Relay konfigurieren...?!Das wird vermutlich heute nicht mehr verwendet
Richtig. Das wäre ja dann nicht skalier- und managebar. In der Praxis heutiger Netze wird sowas logischerweise auch niemals gemacht aus diesen Gründen. Die fehlende L2 Option bei den Router und L3 Switchherstellern spricht da ja eine deutliche Sprache.Möglich aber das da ein Amok laufender Prozess sowas verursacht wenn die L2 Option dort noch irgendwie im BSD Kernel aktiv ist. In der Tat spannend...
Ich denke ich hab die Lösung, hatte das gleiche Phänomen bei einem Kunden.
Es lag am Parallelbetrieb.
Alte Firewall: 10.10.10.1
DHCP: 10.10.10.10
Neue Firewall 10.10.10.254
Neues Netz 10.12.12.0
Ich hab auf dem DHCP einen Packet Capture gemacht, sehe als Client die 10.10.10.254 und im Relay Agent die 10.12.12.1, es kommt aber kein Reply raus. Der DHCP hat als Standardgateway noch die alte 10.10.10.1.
Testweise hab ich dann für 10.12.12.0 eine Netzroute auf 10.10.10.254 gelegt und schon gings. Einen Sinn konnte ich nicht wirklich erkennen, aber ich arbeite auch recht selten mit DHCP relay. Ich hab dann 3 mal (in Worten: drei) die Route gelöscht, DHCP neu gestartet am Client ipconfig /release .. wieder keine IP bekommen, dann route wieder rein, neustart, release .. IP bekommen. Ich denke es ist/war reproduzierbar und man findet diesbezüglich auch wenig weil es wohl nur im Parallelbetrieb Probleme macht.
Normalerweise schreibe ich nicht in so alte Threads aber es war der 2te Hit in Google wenn man nach dem Problem sucht.
BTW. so buggy ist OPNsense jetzt auch wieder nicht ;)
Es lag am Parallelbetrieb.
Alte Firewall: 10.10.10.1
DHCP: 10.10.10.10
Neue Firewall 10.10.10.254
Neues Netz 10.12.12.0
Ich hab auf dem DHCP einen Packet Capture gemacht, sehe als Client die 10.10.10.254 und im Relay Agent die 10.12.12.1, es kommt aber kein Reply raus. Der DHCP hat als Standardgateway noch die alte 10.10.10.1.
Testweise hab ich dann für 10.12.12.0 eine Netzroute auf 10.10.10.254 gelegt und schon gings. Einen Sinn konnte ich nicht wirklich erkennen, aber ich arbeite auch recht selten mit DHCP relay. Ich hab dann 3 mal (in Worten: drei) die Route gelöscht, DHCP neu gestartet am Client ipconfig /release .. wieder keine IP bekommen, dann route wieder rein, neustart, release .. IP bekommen. Ich denke es ist/war reproduzierbar und man findet diesbezüglich auch wenig weil es wohl nur im Parallelbetrieb Probleme macht.
Normalerweise schreibe ich nicht in so alte Threads aber es war der 2te Hit in Google wenn man nach dem Problem sucht.
BTW. so buggy ist OPNsense jetzt auch wieder nicht ;)
Einen Sinn konnte ich nicht wirklich erkennen
Nachdenken.... Wenn der DHCP Reply über einen anderen Pfad kommt als der Sender wird das Paket verworfen. Wäre dem nicht so könnte man den Relay nach Belieben sabotieren.Es ist also logisch das man bei einem Parallelbetrieb von Router oder Firewall zwingend einen Relay deaktiviert !
Ausnahmen gibt es nur wenn die parallelen Maschinen in einem Cluster arbeiten mit VRRP, CARP usw.
Solche Binsenweisheiten sollte man als Netzwerk Admin aber auch kennen.
Kann Kollege @lcer00 seinen Thread auch nun endlich mal als erledigt schliessen !
Wie kann ich einen Beitrag als gelöst markieren?