Docker – macvlan und ungewollte DHCP-Requests

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):

 

AVM-DHCP
Mikrotik-DHCP

 

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:

Anmerkung: Ohne definierten VLAN-Header matcht die Regel auf tagged und untagged Frames.

 

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…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert