web-dev-qa-db-fra.com

Beaucoup de paquets abandonnés lorsque tcpdumping sur l'interface occupée

Mon défi

Je dois faire tcpdumping de nombreuses données - en fait de 2 interfaces laissées en mode promiscuous qui sont capables de voir beaucoup de trafic.

Résumer

  • Connectez-vous tout le trafic en mode promiscuous à partir de 2 interfaces
  • Ces interfaces sont non attribué une adresse IP
  • les fichiers PCAP doivent être pivotés par ~ 1g
  • Lorsque 10 TB= de fichiers sont stockés, commencez à tronquer le plus ancien

Ce que je fais actuellement

En ce moment, j'utilise tcpdump comme ceci:

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

Les $FILTER Contient des filtres SRC/DST afin que je puisse utiliser -i any. La raison en est que j'ai deux interfaces et j'aimerais exécuter la décharge dans un seul fil plutôt que deux.

compress.sh prend soin de l'attribution de goudron à un autre noyau de la CPU, comprimez les données, donnez-lui un nom de fichier raisonnable et déplacez-le à un emplacement d'archive.

Je ne peux pas spécifier deux interfaces, j'ai donc choisi d'utiliser des filtres et des décharges de any interface.

En ce moment, je ne fais pas de ménage, mais je planifie sur le disque de surveillance et quand j'ai 100g à gauche, je commencerai à essuyer les fichiers les plus anciens - cela devrait aller.

Et maintenant; mon problème

Je vois des paquets abandonnés. Cela provient d'une décharge qui fonctionne depuis quelques heures et a collecté environ 250 gigues de fichiers PCAP:

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

Comment puis-je éviter que de nombreux paquets sont abandonnés?

Ces choses que j'ai déjà essayés ou regardent

Changé la valeur de /proc/sys/net/core/rmem_max et /proc/sys/net/core/rmem_default qui a effectivement contribué - en fait, il s'est occupé de seulement la moitié des paquets abandonnés.

J'ai également regardé Gulp - Le problème de Gulp est que cela ne prend pas en charge plusieurs interfaces dans un processus et qu'il se fâche si l'interface n'a pas d'adresse IP. Malheureusement, c'est un disjoncteur de l'affaire dans mon cas.

Le problème suivant est que lorsque le trafic s'écoule bien qu'un tuyau, je ne peux pas obtenir la rotation automatique. Obtenir un énorme 10 == TB Fichier n'est pas très efficace et je n'ai pas de machine avec 10 To + RAM=== Je peux exécuter Wireshark sur, de sorte que cela soit sorti.

Avez-vous des suggestions? Peut-être même une meilleure façon de faire mon trafic.

12
Frands Hansen

J'ai fini par trouver une solution qui consiste à vivre avec. Les packages abandonnés ont été réduits de 0,0047% à 0,00013% - ce qui ne semble pas grand chose au début, mais lorsque nous parlons des millions de paquets, c'est beaucoup beaucoup.

La solution consistait en plusieurs choses. On devait changer la taille du tampon de la bague comme suggéré par Michael Hampton.

En outre, j'ai créé une RAMFS et j'ai rééchappé mon script de compresse pour prendre soin de déplacer les décharges de Ramfs sur le disque. Cela n'a diminué que très peu, mais suffisant pour être remarquable - même si tous les tests et comparer les montants du disque, que le disque ne doit pas être le goulot d'étranglement. Je suppose que l'accès est très important ici.

La désactivation de l'hyper filetage a également fait plus que ce que vous avez pensé.

7
Frands Hansen

tCPDump stocke des données entrantes dans une mémoire tampon d'anneau. Si le tampon déborde avant que TCPDump traite son contenu, vous perdez des paquets.

La taille de la mémoire tampon par défaut est probablement 2048 (2MIB).

Pour augmenter la taille du tampon, ajoutez le -B Option:

tcpdump -B 4096 ...

Vous devriez également essayer d'utiliser un stockage de disque plus rapide.

11
Michael Hampton