Wie vielleicht der Ein oder Andere schon mitbekommen hat, habe ich mir heute ein bisschen DHCP angeschaut.
Dabei ist mir aufgefallen, dass ein Client besonders oft einen DHCP-Request absendet (Auswertung der dhcpd.leases).
Bei näherer Betrachtung viel mir auf, dass entsprechender Client (ein Device der Firma HTC (MAC: bc:cf:cc:xx:xx:xx) in 20 Minuten etwa 4500 DHCP Requests gestellt hat (Damit verursachte dieser Client ~ 45% des gesamten BOOTP/DHCP Traffics auf diesem GW). Auch unter der Annahme, dass Clients häufiger Nachfragen, da unser Netz überlastet ist, ist das eine viel zu hohe Anzahl.
Leider konnten wir den Knotenbetreiber (noch) nicht erreichen. Daher haben wir uns entschieden den Client im DHCPD zu blocken, respektive ihm nicht mehr zu antworten. Nun sendet der Client etwa 40 bis 60 DHCP Discover Anfragen pro SEKUNDE (die zum Glück vom Batman gewrappt werden und nur einem Gateway-Server aufgetischt werden).
Wir hoffen, dass wir in den nächsten Tagen Kontakt zum Knotenbetreiber aufnehmen können und das Problem endgültig beheben können.
Stay tuned…
PS: Wenn ich hier von DHCP rede, meine ich DHCPv4.
PPS: Mir sind heute noch 1-2 weitere Clients mit einem änhnlichen Verhalten aufgefallen.
PPPS: Ich will nicht unbedingt dem Client das Problem in die Schuhe schieben, auffällig war, das bei betroffenen Clients die Anzahl der Hops bis zum DHCP Server recht hoch war. Auf der anderen Seite waren an den entsprechenden Knoten weitere Clients angemeldet, die offensichtlich nicht solche Probleme verursacht haben.
Können wir direkt in der Knotenfirmware iptables-Regeln definieren?
Dann könnten wir dort schon eine maximale Rate von DHCP-Anfragen wegfiltern. Ich kann mir gut vorstellen, dass das eine App ist, die schnelles Netz verspricht oder so. Alternativ ginge das auch pro VPN-Anschluss auf den Gateways.
40-60 Anfragen / Sekunde sind, obwohl ich den Standard gerade nicht im Kopf habe, sicher nicht zugelassen. 1-2 / 10 Sekunden wäre normal.
So könnte man BTW sowieso das Netz flach legen: Massenhaft DHCP-Requests schicken, von wechselnden MAC-Adressen.
Bevor hier wieder “Netzneutralität” angeprangert wird: Niemand braucht mehr als eine Anfrage pro Sekunde, das entspräche schon 30 neu angemeldete Clients pro Minute (bei 1 Request und einer Retransmission pro Client).
Alternativ könnte man auch überlegen, den Uplink-Nodes über ein Skript
Lease-Bereiche zu verteilen und die dann DHCP machen zu lassen. Dann
gäbe es auch kein Problem bei wackeligen Uplinks…
Ok Rate Limit für DHCP habe ich da gesehen allerdings scheint das global zu sein und nicht pro Client (was ja besser wäre da sonst auch “vernüftige Clients” an dem Router runtergezogen werden).
Ich bin aus Gründen die ich am Wochenende beschreiben will, wieder dazu über gegangen eine Bridge vor das Bateman zu setzten. Dann kann man mit ebtables eine MAC zentral aussperren.
Mir ist gerade aufgefallen, dass teilweise gleiche bootp.id / Transaction ID häufiger vorkommen. Das sieht schon fast so aus, als wäre irgendwo ein loop. Ich schaue gerade, wie ich daraus eine Statistik bauen kann.
Nunja, auf den Nodes deployed wäre es egal. Wie schon geschrieben: Beim Durchlassen von 1 Paket /Sekunde könnten sich immer 10 Clients parallel mit DHCP-Adressen versorgen. Das ist schon die Hälfte einer 841-Kapazität.
Über Nacht habe ich auf parad0x einen tcpdump laufen lassen, dabei ist mir wie oben schon geschrieben aufgefallen, dass teilweise die Transaktions-ID häufiger vorkommt.
Hier mal eine Auswahl (anonymisiert, sende ich auf Wunsch via verschlüsseltem Kanal zu):
Die Auswertung wurde mit folgendem (zusammengeschusterten) Befehl erstellt (ich denke das kann man auch direkt mit tshark machen, aber da bin ich noch zu blöd zu):
dahinter, bekommt man die Anzahl der unique Transaktions-ID, MAC Tupel: 44735
Den TCP Dump habe ich ca. 10 Stunden auf parad0x laufen gehabt mit folgendem Befehl:
tcpdump -i bat0 port 67 or port 68 -w dhcp_fail_dump
Dabei wurden 166726 Pakete aufgezeichnet.
Bei einigen wenigen Clients im Netz scheint gehörig was schief zu laufen. Ob es letztendlich an diesen Clients oder an einer gehörigen Macke im Netz liegt, gilt es noch zu ermitteln.