Meine Herausforderung
Ich muss eine Menge Daten tcpdumping - tatsächlich von 2 Schnittstellen, die im Promiscuous-Modus verbleiben und viel Verkehr sehen können.
Etwas zusammenfassen
- Protokollieren Sie den gesamten Datenverkehr im Promiscuous-Modus von 2 Schnittstellen
- Diesen Schnittstellen wird keine IP-Adresse zugewiesen
- PCAP-Dateien müssen pro ~ 1G gedreht werden
- Wenn 10 TB Dateien gespeichert sind, schneiden Sie die ältesten ab
Was ich gerade mache
Im Moment benutze ich tcpdump wie folgt:
ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
Das $FILTER
enthält src / dst Filter, damit ich verwenden kann -i any
. Der Grund dafür ist, dass ich zwei Schnittstellen habe und den Speicherauszug in einem einzigen Thread anstatt in zwei ausführen möchte.
compress.sh
kümmert sich darum, tar einem anderen CPU-Kern zuzuweisen, die Daten zu komprimieren, ihm einen angemessenen Dateinamen zu geben und ihn an einen Archivspeicherort zu verschieben.
Ich kann nicht zwei Schnittstellen angeben, daher habe ich mich für die Verwendung von Filtern und Dump von der any
Schnittstelle entschieden.
Im Moment mache ich keine Hausarbeit, aber ich plane, die Festplatte zu überwachen, und wenn ich noch 100G habe, werde ich anfangen, die ältesten Dateien zu löschen - das sollte in Ordnung sein.
Und nun; mein Problem
Ich sehe verworfene Pakete. Dies ist von einem Dump, der seit einigen Stunden läuft und ungefähr 250 Gigs PCAP-Dateien gesammelt hat:
430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel <-- This is my concern
Wie kann ich verhindern, dass so viele Pakete verworfen werden?
Diese Dinge habe ich schon ausprobiert oder angeschaut
Der Wert von wurde geändert /proc/sys/net/core/rmem_max
und /proc/sys/net/core/rmem_default
was hat tatsächlich geholfen - tatsächlich hat es nur etwa die Hälfte der verworfenen Pakete erledigt.
Ich habe mir auch gulp angesehen - das Problem mit gulp ist, dass es nicht mehrere Schnittstellen in einem Prozess unterstützt und es wütend wird, wenn die Schnittstelle keine IP-Adresse hat. Leider ist das in meinem Fall ein Deal Breaker.
Das nächste Problem ist, dass ich die automatische Rotation nicht in Gang bringen kann, wenn der Verkehr durch eine Leitung fließt. Das Abrufen einer riesigen 10-TB-Datei ist nicht sehr effizient und ich habe keinen Computer mit 10 TB + RAM, auf dem wir Wireshark ausführen können.
Hast du irgendwelche Vorschläge? Vielleicht sogar eine bessere Möglichkeit, meinen Traffic Dump insgesamt zu erledigen.