Moje wyzwanie
Muszę zrobić tcpdump dużej ilości danych - właściwie z 2 interfejsów pozostawionych w trybie rozwiązłym, które są w stanie zobaczyć duży ruch.
Podsumowując
- Rejestruj cały ruch w trybie rozwiązłym z 2 interfejsów
- Interfejsy te nie mają przypisanego adresu IP
- Pliki pcap muszą być obracane o ~ 1G
- Po zapisaniu 10 TB plików rozpocznij obcinanie najstarszego
Co aktualnie robię
Obecnie używam tcpdump w następujący sposób:
ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
$FILTER
Zawiera filtry src / dst tak, że można używać -i any
. Powodem tego jest to, że mam dwa interfejsy i chciałbym uruchomić zrzut w jednym wątku zamiast dwóch.
compress.sh
zajmuje się przypisaniem tar do innego rdzenia procesora, kompresowania danych, nadania rozsądnej nazwy pliku i przeniesienia go do lokalizacji archiwum.
Nie mogę określić dwóch interfejsów, dlatego zdecydowałem się na użycie filtrów i zrzut z any
interfejsu.
W tej chwili nie zajmuję się sprzątaniem, ale planuję monitorować dysk, a kiedy pozostanie 100G, zacznę wymazywać najstarsze pliki - powinno być dobrze.
I teraz; mój problem
Widzę upuszczone pakiety. Jest to zrzut, który działał przez kilka godzin i zebrał około 250 koncertów plików pcap:
430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel <-- This is my concern
Jak mogę uniknąć upuszczenia tylu pakietów?
Te rzeczy, które już próbowałem lub na które patrzyłem
Zmieniłem wartość /proc/sys/net/core/rmem_max
i /proc/sys/net/core/rmem_default
co rzeczywiście pomogło - w rzeczywistości zajęło to około połowy upuszczonych pakietów.
Patrzyłem też na gulp - problem z gulp polega na tym, że nie obsługuje wielu interfejsów w jednym procesie i denerwuje się, jeśli interfejs nie ma adresu IP. Niestety w moim przypadku jest to przełom.
Kolejny problem polega na tym, że gdy ruch przepływa przez rurę, nie mogę uruchomić automatycznego obrotu. Zdobycie jednego ogromnego pliku 10 TB nie jest bardzo wydajne i nie mam komputera z 10 TB + RAM, na którym mogę uruchomić Wireshark, więc to nie działa.
Masz jakieś sugestie? Może nawet lepszy sposób na zrobienie mojego zrzutu.