Les outils de couche Réseau
Sommaire
I. Outils d’analyse de trafic
L’outil qui vient en premier à l’esprit à ce niveau est ping. Il permet de tester la connectivité IP de bout-en-bout mais également d’avoir des informations concernant les enregistrements de l’annuaire DNS :
# ping 172.17.18.19
mydmn.org (172.17.18.19): 56 data bytes
64 bytes from 172.17.18.19: icmp_seq=0 ttl=56 time=7.7 ms
64 bytes from 172.17.18.19: icmp_seq=1 ttl=56 time=6.0 ms
64 bytes from 172.17.18.19: icmp_seq=2 ttl=56 time=5.5 ms
REMARQUE : la réponse à la commande ping est différente selon que la route existe (ou est inconnue), et que la machine cible est ou non disponible. Mais, dans l’instruction ci-dessus, on remarque que la résolution de nom mydmn.org est automatiquement résolue avec l’adresse IP.
RAPPEL : la commande ping s’appuie sur le protocole ICMP (Internet Control Message Protocol), permettant la vérification de la connectivité et des paquets envoyés. L’interrogation de la commande ping, peut également renseigner sur les informations suivantes :
- L’adresse IP (avec le nom enregistré dans l’annuaire DNS.
- Le numéro de séquence ICMP
- La durée de vie du paquet (aussi appelé Time-To-Live ou TTL)
- Le temps de propagation en boucle (aussi appelé round-trip delay)
- Le nombre de paquets perdus
La durée de vie ou TTL permet de connaître le nombre de routeurs traversés par le paquet lors de l’échange entre l’émetteur et le destinataire. Chaque paquet IP possède un champ TTL valorisé avec une valeur relativement grande. A chaque passage de routeur, ce champ est automatiquement décrémenté. Lorsque la valeur atteint la valeur zéro, le routeur interprétera cela comme le fait que le paquet tourne en boucle et le détruira.
IMPORTANT : Le temps de propagation correspond à la durée d’un aller-retour entre l’émetteur et le destinataire. Un paquet doit en règle générale avoir un temps de propagation inférieur à 200ms.
Cela permet aussi d’envoyer des paquets de type broadcast en utilisant l’option –b et en mentionnant l’adresse IP sur laquelle on souhaite effectuer la diffusion :
# ping –b 192.168.1.255
De plus, on peut passer en paramètre une taille d’intervalle avec l’option –i (par défaut, la valeur est positionnée à 1 seconde). On peut également forcer le nombre d’écho que l’on souhaite, via l’option -c :
# ping –i 0.2 –c 10 192.168.1.7
II. Outils d’analyse de route
La commande route est utilisée pour configurer statiquement des routes. Mais, elle peut également fournir des éléments de diagnostic :
# route
Table de routage IP du noyau
Destination Gateway Genmask Flags Metric Ref Use Iface
10.32.16.0 * 255.255.252.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default cb1-vrrp-srv 200 0.0.0.0 UG 0 0 0 eth0
En effet, dans le champ ‘Flags’ ci-dessus, on peut connaître les réseaux (locaux ou distants, dans le cas d’accessibilité d’une passerelle) ou éventuellement quelles routes seront acceptées ou rejetées par le système local. Les cas possibles sont les suivants :
- U : Up - la route est active et exploitable.
- H : Host - la cible est un hôte.
- G : Gateway - la cible est accessible par une passerelle.
- D : Dynamic - la route est configurée par un protocole de routage.
- ! : Le noyau a rejeté la route
REMARQUE : comme on le constate, la commande route, seule permet d’afficher les routes statiques définies sur le système. Si l’on souhaite ajouter une route, il suffit d’utiliser l’option add et de préciser s’il s’agit d’un réseau, d’un hôte ou d’une passerelle.
La commande route, par défaut affiche la table de routage au format numérique (option –n). Mais, on peut demander l’affichage au format d’hôte (avec résolution de nom), en utilisant l’option –e.
Le formalisme standard de la commande est le suivant :
# route [Options]
Où les options peuvent être :
"-n" : affiche la table de routage au format numérique.
"-e" : affiche la table de routage au format d’hôte FQDN.
"add" : permet d’ajouter une route statique.
"del" : permet de supprimer une route statique.
Avec les options add et del on peut alors indiquer quel type de cible on souhaite traiter (et de quelle façon, on souhaite le faire) :
Exemple : ajout d’une route statique à un réseau dans la table de routage :
# route add –net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
III. Outils de traçage
La commande traceroute, tout comme ping, permet de déterminer à quel niveau du circuit emprunté par les paquets, il y a une rupture de trafic vers le destinataire. On peut ainsi interroger la cible avec son om FQDN (enregistré dans l’annuaire DNS) ou avec son adresse IP :
# traceroute mydmn.org
La commande traceroute s’appuie sur le champ TTL des paquets IP. Lorsque ce champ arrive à zéro, le routeur, estimant que le paquet tourne en boucle le détruit et envoie une notification ICMP à l’expéditeur.
C’est exactement ce que fait traceroute : il envoie des paquets à un port UDP non privilégié, réputé non utilisé par la pile TCP/IP (par défaut, il s’agit du port 33434) avec un TTL à 1. Et, le premier routeur rencontré va supprimer le paquet et renvoyer un paquet ICMP, donnant entre autre, l’adresse IP du routeur et son temps de propagation en boucle. En incrémentant séquentiellement le champ TTL afin d’obtenir une réponse de chacun des routeurs sur le circuit, traceroute va, au final, récupérer une réponse "ICMP port unreachable", de la part de l’équipement cible, et reconstituant par la même, le chemin parcouru. En cas de rupture dans le cheminement, on devrait voir apparaître des caractères "*". Dns le cas contraire, la résolution va jusqu’à son terme :
# traceroute to www.google.fr (216.58.210.35), 64 hops max, 52 byte packets
1 par81-024.ff.avast.com (62.210.189.205) 25.107 ms 24.235 ms 24.383 ms
2 62-210-189-1.rev.poneytelecom.eu (62.210.189.1) 27.341 ms 27.119 ms 28.184 ms
3 a9k1-45x-s43-1.dc3.poneytelecom.eu (195.154.1.92) 25.910 ms 25.040 ms 25.558 ms
4 72.14.218.182 (72.14.218.182) 36.234 ms 39.907 ms 38.130 ms
5 108.170.244.177 (108.170.244.177) 25.880 ms
108.170.244.240 (108.170.244.240) 25.791 ms
108.170.244.177 (108.170.244.177) 26.449 ms
6 216.239.62.143 (216.239.62.143) 26.491 ms
216.239.43.157 (216.239.43.157) 26.414 ms
216.239.62.139 (216.239.62.139) 26.400 ms
…
9 108.170.246.161 (108.170.246.161) 33.174 ms
108.170.246.129 (108.170.246.129) 34.342 ms
108.170.246.161 (108.170.246.161) 33.707 ms
10 108.170.232.105 (108.170.232.105) 33.845 ms 33.846 ms
108.170.232.103 (108.170.232.103) 34.206 ms
11 lhr25s11-in-f35.1e100.net (216.58.210.35) 34.094 ms 33.353 ms 33.718 ms
IV. Outils de vérification des connexions actives
Outre l’outil que l’on a vu ci-dessus, concernant le routage, il existe également une autre commande listant les connexions TCP actives de la machine. La commande netstat permet de lister l’ensemble des ports TCP et UDP ouverts au niveau du serveur et d’obtenir des statistiques concernant certains protocoles tels que Ethernet, IPv4, IPv6, ICMP…
La commande utilisée seule affiche l’ensemble des connexions ouvertes par la machine que ce soit en UDP ou en TCP. Le formalisme de la commande est le suivant :
# netstat [-a] [-e] [-n] [-o] [-s] [-p <Proto>] [-r] [intervalle]
L’option –a affiche l’ensemble des connexions et des ports en écoute sur la machine. Si l’on souhaite faire afficher les adresses et les numéros de port au format numérique (sans résolution de noms), il faut utiliser l’option –n. Pour afficher les statistiques Ethernet, on peut positionner l’option –e.
Exemple : affichage des connexions sur le port web TCP/80 :
# netstat –an|egrep ".* :80"
Ce genre de commande affichera le résultat de toutes les connexions écoutant sur le port 80 :
L’option –o permet de détailler le numéro de processus associé à une connexion et l’option –r affiche alors la table de routage. Il nous reste alors l’option –p suivi du nom du protocole (au choix, TCP, UDP ou IP), permettant d’afficher les informations concernant le protocole passé en paramètre. Enfin, l’option –s affiche les statistiques détaillées, classées par protocole.
REMARQUE : en option, il est possible de passer un intervalle permettant de déterminer la période de rafraichissement des informations (en secondes). Par défaut, cette option est valorisée à 1.
Exemple : afficher les statistiques des connexions par type de protocole IP, TCP ICMP…
# netstat -s