Wer auf einem Raspberry (egal ob 3 oder 4) Docker und Container die über den macvlan-Treiber angebunden sind nutzt, erlebt es dass bei jedem Neustart des Containers ein DHCP-Request erfolgt! Ist kein DHCP-Server in diesem Netz, fällt das Problem nicht auf. Wenn aber doch, kann es sein, dass hunderte (je nach Poolgröße) DHCP-Leases bezogen werden.
Hier sieht man, dass die beiden Container „web1-v1“ und „web2-v1“ beim Neustart einen DHCP-Discover und daraufhin einen DHCP-Request auslösen.
Die MAC-Adressen sind dabei zufällig und weder dem späteren Container noch dem Host zugehörig:
Im DHCP-Server wird daraufhin eine/mehrere Leases erstellt (Hostname ist dabei der Name des Hostbetriebssystems – NICHT der Hostname des späteren Containers):
Als Vendor-Class-ID wird der DHCP-Client-Daemon von Linux übermittelt:
Lösung des Problems
Soweit ist der Bug lästig, weil je nach Router unzählige Leases erzeugt werden, die nicht automatisch gelöscht werden (z. B. bei AVM-Geräten) oder sich der IP-Pool temporär erschöpft.
Abhilfe schafft hier lediglich ein managed-Switch, auf dem man ACL-Regeln definieren kann (Achtung: ACL-Reglen matchen immer auf den ingress-Traffic – nicht auf den egress-Traffic des Ports). Ein einfaches UDP -> Port 67-68 -> DROP löst das Problem auf dem Port, der zum Raspberry geht:
Damit löst man zwar nicht ursächlich das Problem (Bug), aber die Auswirkung auf das Netz kann verhindert werden.
Es wäre zu testen, ob eine Software-Firewall direkt auf dem Host (Raspberry) das Problem lösen könnte?
Die initiale Kommunikation der DHCP-Requests findet aber auf Layer 2 statt, Firewalls filtern i. d. R. erst ab Layer 3…
System- und Netzwerkadministrator
Informationstechnik – Netzwerktechnik – Consulting
MCSA+M | MCSE | MTCNA