나의 도전
실제로 많은 트래픽을 볼 수있는 무차별 모드로 남겨진 2 개의 인터페이스에서 많은 데이터를 tcpdumping해야합니다.
그것을 요 약하기
- 2 개의 인터페이스에서 무차별 모드로 모든 트래픽 기록
- 이러한 인터페이스에는 IP 주소가 할당 되지 않습니다
- pcap 파일은 ~ 1G마다 회전해야합니다
- 10TB의 파일이 저장되면 가장 오래된 파일을 자릅니다.
내가 현재하는 일
지금은 다음과 같이 tcpdump를 사용합니다.
ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
은 $FILTER
내가 사용할 수 있도록 SRC / DST 필터가 들어 있습니다 -i any
. 그 이유는 두 개의 인터페이스가 있고 두 개가 아닌 단일 스레드에서 덤프를 실행하고 싶기 때문입니다.
compress.sh
tar를 다른 CPU 코어에 할당하고, 데이터를 압축하고, 적절한 파일 이름을 지정하여 아카이브 위치로 옮깁니다.
두 개의 인터페이스를 지정할 수 없으므로 필터를 사용하고 any
인터페이스 에서 덤프하도록 선택했습니다 .
지금은 하우스 키핑을하지 않지만 디스크 모니터링을 계획하고 100G가 남았을 때 가장 오래된 파일을 초기화하기 시작합니다.
그리고 지금; 내 문제
패킷이 끊어졌습니다. 이것은 몇 시간 동안 실행되어 약 250 기가의 pcap 파일을 수집 한 덤프에서 가져온 것입니다.
430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel <-- This is my concern
너무 많은 패킷이 손실되지 않도록하려면 어떻게해야합니까?
내가 이미 시도하거나 본 것들
값이 변경 /proc/sys/net/core/rmem_max
되었고 /proc/sys/net/core/rmem_default
실제로 도움이 된 부분은 실제로 손실 된 패킷의 절반 정도만 처리했습니다.
또한 gulp를 살펴 봤습니다. gulp 의 문제점은 한 프로세스에서 여러 인터페이스를 지원하지 않으며 인터페이스에 IP 주소가 없으면 화를냅니다. 불행히도, 그것은 내 경우에는 거래 차단기입니다.
다음 문제는 파이프를 통해 트래픽이 흐를 때 자동 회전이 불가능하다는 것입니다. 하나의 거대한 10TB 파일을 얻는 것은 그리 효율적이지 않으며 wireshark를 실행할 수있는 10TB 이상의 RAM이있는 시스템이 없으므로 종료됩니다.
제안 사항 있어요? 아마도 내 트래픽 덤프를 수행하는 더 좋은 방법 일 수도 있습니다.