## Note à ceux qui éditeraient cette page : si vous souhaitez présenter une autre vision ## des choses merci d'en faire une section indépendante, voir une sous-page ou autre page. ## Je pense à ce type de projet depuis pas mal de temps et j'ai des idées bien précises. ## Je ne souhaites donc pas qu'on les discute pour le moment. -- Jean Christophe André Cette page présente quelques idées pour faciliter l'analyse du trafic réseau. == Justification == Les problèmes de lenteur sur le réseau ne sont pas toujours facile à analyser. Il faut d'abord déterminer entre quels points se situe le ralentissement, avec des outils tels que `mtr`, ce qui permet alors de déterminer nos possibilités d'intervention. Ensuite, si le problème se trouve dans notre infrastructure et que nous avons donc la possibilité d'intervenir, il reste à comprendre la cause du ralentissement. Les causes peuvent aller des problèmes physiques (câbles, cartes réseau, switch, ...) aux problèmes de téléchargements massifs, en passant par des problèmes plus subtils tels que collision, boucle de routage, diffusion massive (broadcast) ou encore un manque d'optimisation (typiquement de cache) ou de gestion de flux. Généralement nous sommes capables de déterminer la cause du problème quand nous en faisons un analyse immédiate. Nous avons de bons outils pour nous y aider, tels que `iptraf` ou même un simple `tcpdump` avec filtrage. Cependant quand le problème survient en notre absence, ou que nous n'avons pas la possibilité de l'analyser au moment où il survient, nous manquons alors d'information pour comprendre ce qui s'est passé. Certes nous avons nos graphiques `mrtg` ou `smokeping` qui permettent de savoir qu'il y a eu un problème, mais ils ne permettent généralement pas d'en savoir plus sur la nature du problème. D'autre part, vu les besoins croissant en utilisation du réseau, ce qui est tout à fait compréhensible dans un monde moderne, il va être grandement temps de mettre en place une gestion de qualité de service réseau (QoS) pour donner la priorité à certains flux sur d'autres (VoIP, Vidéo-Conférence, accès SSH administratif, accès TSE, ...). == Idées == Faire du comptage de paquets sur les passerelles et en faire des statistiques. La nouveauté ici sera de rendre ce comptage plus fin que le classique comptage des entrées/sorties. Il faut découper ce comptage suivant la nature des statistiques souhaitées. Quelques idées de statistiques qui pourraient être intéressantes : * par protocole sur Ethernet : ARP, $alien, IPv4, IPv6, autre * $alien = IPX, ATALK * '''Objectif''' : repérer les problèmes ARP, les protocoles non souhaités et la répartition IPv4/IPv6 * par protocole sur IP : ICMP, ESP, TCP, UDP, autre * '''Objectif''' : avoir une vue d'ensemble sur les grandes catégories de protocoles circulant sur le réseau * par protocole sur {TCP,UDP}/IP : SSH, DNS, $vpn, $chat, $voip, $mail, $web, $p2p, autre * $vpn = OpenVPN (1194, à fusionner avec ESP ?) * $chat = XMPP (5222), XMPPS (5223), Yahoo (5050), MSN (...), IRC (6666-6670 en majorité) * $voip = IAX2 (4569), SIP (5060, mais ce n'est pas le gros du traffic, il faut suivre la suite avec conntrack) * $mail = SMTP, SMTPS, POP3, POP3S, IMAP, IMAPS * $web = HTTP (80 uniquement ? ou bien compter ce qui va au proxy), HTTPS * $p2p = difficile, mais il y a plusieurs ports fixes connus, et on verra le reste dans autre * '''Objectif''' : repérer quel type de transfert pourrait être à l'origine d'un problème * par machine destinataire dans le réseau local, pour celles en IP fixe * '''Objectif''' : repérer quelle machine pourrait être à l'origine d'un problème Quelques idées de techniques pour y arriver : * dans un premier temps, faire du comptage via des compteurs `iptables` * par la suite, éventuellement faire un crochet vers un service utilisateur dédié (pour optimiser la vitesse de comptage, à voir si ce sera nécessaire ou non) * collecter les données avec `rrdtool` (extraordinaire cet outil !!) * faire les graphiques avec `rrdtool` (extraordinaire cet outil !! (bis) ;-) ) == Expérimentations == * 2007-01-04 : j'ai commencé par faire un premier test local sur ma machine, voir [[/test1]]