Banyak paket yang terjatuh saat tcpdumping pada antarmuka sibuk

11

Tantangan saya

Saya perlu melakukan tcpdumping banyak data - sebenarnya dari 2 antarmuka yang tersisa dalam mode promiscuous yang dapat melihat banyak lalu lintas.

Singkatnya

  • Log semua lalu lintas dalam mode promiscuous dari 2 antarmuka
  • Antarmuka tersebut tidak diberi alamat IP
  • file pcap harus diputar per ~ 1G
  • Ketika 10 TB file disimpan, mulailah memotong yang tertua

Apa yang saya lakukan saat ini

Saat ini saya menggunakan tcpdump seperti ini:

ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER

The $FILTERberisi filter src / dst sehingga saya bisa menggunakan -i any. Alasan untuk ini adalah, bahwa saya memiliki dua antarmuka dan saya ingin menjalankan dump dalam satu utas daripada dua.

compress.sh menangani pemberian tar ke inti CPU lain, kompres data, berikan nama file yang masuk akal dan pindahkan ke lokasi arsip.

Saya tidak dapat menentukan dua antarmuka, jadi saya memilih untuk menggunakan filter dan membuang dari anyantarmuka.

Saat ini, saya tidak melakukan pembersihan, tetapi saya berencana untuk memonitor disk dan ketika saya memiliki 100G kiri saya akan mulai menghapus file tertua - ini seharusnya baik-baik saja.

Dan sekarang; masalahku

Saya melihat paket yang jatuh. Ini dari dump yang telah berjalan selama beberapa jam dan mengumpulkan sekitar 250 gigs file pcap:

430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel  <-- This is my concern

Bagaimana saya bisa menghindari begitu banyak paket yang jatuh?

Hal-hal ini sudah saya coba atau lihat

Mengubah nilai /proc/sys/net/core/rmem_maxdan /proc/sys/net/core/rmem_defaultyang memang membantu - sebenarnya hanya menangani sekitar setengah dari paket yang dijatuhkan.

Saya juga telah melihat tegukan - masalah dengan tegukan adalah, bahwa itu tidak mendukung banyak antarmuka dalam satu proses dan itu menjadi marah jika antarmuka tidak memiliki alamat IP. Sayangnya, itu adalah pemecah kesepakatan dalam kasus saya.

Masalah berikutnya adalah, bahwa ketika lalu lintas mengalir melalui pipa, saya tidak bisa mendapatkan rotasi otomatis. Mendapatkan satu file 10 TB besar tidak terlalu efisien dan saya tidak memiliki mesin dengan 10TB + RAM yang dapat saya jalankan wireshark, jadi itu keluar.

Apakah Anda punya saran? Mungkin bahkan cara yang lebih baik untuk melakukan dump traffic sama sekali.

Frands Hansen
sumber
Dalam kasus saya, saya menggunakan opsi -s0, mengubahnya ke -s1600 (tepat di atas MTU) menyelesaikannya untuk saya.
LatinSuD

Jawaban:

11

tcpdump menyimpan data yang masuk dalam buffer cincin. Jika buffer overflow sebelum tcpdump memproses isinya, maka Anda kehilangan paket.

Ukuran buffer cincin default mungkin adalah 2048 (2MiB).

Untuk menambah ukuran buffer, tambahkan -Bopsi:

tcpdump -B 4096 ...

Anda juga harus mencoba menggunakan penyimpanan disk yang lebih cepat.

Michael Hampton
sumber
Saya akan mencoba mengubah ukuran buffer. Saya hampir yakin bahwa kecepatan penyimpanan disk bukanlah masalahnya. Itu menulis data dengan sekitar 15M / detik ketika membuang dan ketika melakukan file 17 manggung: 17179869184 byte (17 GB) disalin, 23,5737 s, 729 MB / s (menggunakan bs = 8k hitung = 2048k)
Frands Hansen
7

Saya akhirnya menemukan solusi untuk hidup bersama. Paket yang dijatuhkan telah menurun dari 0,0047% menjadi .00013% - yang pada awalnya tidak banyak, tetapi ketika kita berbicara jutaan paket, jumlahnya cukup banyak.

Solusinya terdiri dari beberapa hal. Salah satunya adalah mengubah ukuran buffer cincin seperti yang disarankan oleh Michael Hampton.

Juga, saya membuat ramf dan melakukan dumping langsung untuk itu, menulis ulang skrip kompres saya untuk memindahkan dump dari ramf ke disk. Ini hanya mengurangi jumlah yang sangat sedikit, tetapi cukup untuk menjadi terkenal - meskipun semua pengujian dan pembandingan disk menunjukkan, bahwa disk tidak boleh menjadi hambatan. Saya kira waktu akses sangat penting di sini.

Menonaktifkan hyper threading juga menghasilkan lebih dari yang Anda duga.

Frands Hansen
sumber
Apakah maksud Anda "menonaktifkan hyper threading" sangat membantu? Berapa banyak yang bisa membantu? Terima kasih.
poordeveloper
Terus terang, saya tidak bisa mengingat secara spesifik lagi. Saya telah mengubah tempat kerja sejak saat itu, tetapi dari apa yang saya tulis sepertinya menonaktifkan hyper threading membantu masalah ini.
Frands Hansen