Eigener PXE-Server: Fehler „ProxyDHCP service did not reply to request on port 4011“?


16.04.2025, 16:39

Ergänzung: Mittlerweile habe ich das ganze gelöst bekommen. Wie KarlRanseierIII erwähnte, fehlt die vollständige Implementierung DHCP-Phase. (die wird für den Boot benötigt)

Die DHCP-Phase läuft wie folgt ab:

DHCPDISCOVER -> DHCPOFFER -> DHCPREQUEST -> DHCPACK

leider hat die Implementierung ab der DHCPREQUEST gefehlt, weshalb der PXE-Client nicht bootete.

Der Aktuelle Code ist auf Pastebin: https://pastebin.com/enuZaA9c (Achtung: Nicht für Produktivzwecke gedacht!) Man sollte beachten dass der Code root-Rechte (oder Admin-Rechte) benötigt, um sich auf Port 67 (<1024) binden zu können.

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ich verstehe ehrlich gesagt die Komplikation mit dem DHCP Proxy (Relay Agent) nicht so wirklich.

Willst du die Auftrennung (Klassischer DHCP für IP Config) und DHCP Proxy für PXE wirklich?


schemil053 
Beitragsersteller
 13.04.2025, 03:09

Eigentlich ging es mir nicht um das Auftrennen, das Problem ist, dass der PC den Port 4011 unbedingt will (auch ohne den zweiten dhcp-proxy-server)

KarlRanseierIII  13.04.2025, 03:53
@schemil053

Verstehe, eventuell macht er das, weil er dazu genötigt wird, bzw. die Antwort so interpretiert.

Was mir grundsätzlich auffällt: Als erstes muß die Normale DHCP-Phase abgeschlossen werden, also DISCOVER, OFFER, REQUEST, ACK.

Ich bin kein Javaianer, aber ich habe auf Anhieb nicht gesehen, wo der eigentliche REQUEST angenommen, verarbeitet und mit einem ACK beantwortet wird - Das könnte ein Grund sein, warum der Client sich aus "Verzweiflung" an einen DHCP-Proxy für den eigentlichen Bootprozess wenden will.

Die Specs sind nicht so eindeutig formuliert, aber grundsätzlich, Option 60 im Offer, ohne Option 43 (PXE Suboptions) und ohne 'boot file name' sollten den Client zur Kontaktaufnahme des Proxy auf Port 4011 verleiten. Es ist nicht eindeutig formuliert, ob dabei ein Option 66 bereits reicht (die ist zum überladen gedacht). Auch etwas wage bleibt es bem Proxy mit Port 4011 (bei gleicher Maschine), ob der Port nur Unicast und Multicast machen soll - man kann das so lesen.

Das PXE-Protokoll ist auch nicht so ganz einfach, da die verschiedenen (Teil)dienste bzw. Phasen verschieden verteilt werden können.

KarlRanseierIII  13.04.2025, 03:56
@KarlRanseierIII

Hast Du zum Vergleich mal versucht mit Standard DHCP- und TFTP-Server nen PXE-Boto zu machen und die Packets zu capturen?

Das wäre vielleicht auch noch eien Option.

KarlRanseierIII  13.04.2025, 11:38
@KarlRanseierIII

Du könntest testweise mal annehmen, daß der Client ein vorhandensein von Option 60 im Offer so interpretiert, daß unbedingt ein Satz an PXE Optionen da sein muß und falls das fehlt, er einfach den Port 4011 versucht.

Mein Vorschlag wäre also:

Verzichte auf Option 60,66 und 67 und nutze mal in bootp Manier sname und bootfile bzw next-server. Schaue wie der (und andere Clients) sich verhalten - Das sollte gehen.

Als nächstes würde ich dann Options 66+67 nehmen aber immernoch die 60 weglassen.

Und dann einfaach mal in der Suchmaschine Deiner Wahl PXE Specification eingeben und mal in das Dokument reinlesen, inklusive der Abschnitte, wie welche Komponente sich denn verhalten soll. Eventuell habe ich auch etwas falsch interpretiert.

Hat denn die Fritzbox einen eigenen aktiven DHCP Server? 192.168.178.46 ist wohl Dein Java DHCP-Server. Mehrere DHCP Server für das gleiche Subnet ist zwar möglich, aber dann muss man einige Dinge beachten, sonst läuft das nicht richtig. Kann es sein, dass in Tat und Wahrheit die Fritzbox die IP offeriert hat und gar nicht Dein eigenes Programm? Das könnte erklären, warum der Client in der Folge auf Port 4011 keine Response erhält.

Du könntest ja auch einfach den PXE-Client direkt (p2p) mit einem Netzwerkkabel an demjenigen PC anschliessen, der den Java PXE-Server ausführt. Gemäss Source sind Services wie tftp auf der selben (PXE-Server) Maschine zu suchen. Dies zumindest um einmal die Grundfunktionalität zu prüfen. Oder Du verwendest VLAN's um verschiedene DHCP-Server zu isolieren.

Für die Trafficanalyse könntest Du z.B. mit einem Switch, der einen Mirrorport hat und einem Laptop, der den Mirrorport abhört, beidseitig der Fritzbox prüfen, welche Pakete gesendet werden. Damit findest Du vermutlich heraus, wo's klemmt.


schemil053 
Beitragsersteller
 13.04.2025, 03:07

Die IP-Adresse wird korrekt zugewiesen (also meine). Es läuft zwar auf der FritzBox ein DHCP-Server, aber auch das temporäre abschalten ändert nichts