# Diagnostiquer une configuration réseau et configurer une interface réseau ## 1. Objectifs Savoir - auditer et configurer le paramétrage réseau sur votre machine Linux - utiliser les commandes réseaux : `ip`, `ping`, `ss`... - savoir lire les affichages retournés par les commandes réseaux - connaître l’existence des commandes `ifconfig` (remplacée par `ip addr`), `arp` (remplacée par `ip n(eigh(bo(u)r))`, `route` (remplaçable par `ip route`), `netstat` (remplacée par `ss`) Depuis la Debian 10 (sortie en juillet 2019), les commandes `ifconfig`, `arp` et `netstat` ne sont plus présentes. Il faut utiliser `ip` et `ss`. ## 2. Connaître ### 2.1 Connaître la configuration des interfaces IP réseau La commande `ip` (et anciennement `ifconfig`) permet de consulter et configurer le paramétrage des interfaces réseaux. Pour consulter le _manuel_ d'une commande linux (savoir à quoi elle sert, quelles sont ses options, voir des exemples d'utilisation), il faut taper dans un teminal : man ip # man ifconfig `man` signifie _manuel_ La commande `ip` indique les _interfaces_ disponibles, leur état d'activité, leur adresse MAC, ainsi que leur configuration réseau éventuelle en termes d'adresse IP v4/v6, masque, adresse de diffusion. Les _interfaces_ sont un moyen pour désigner les différentes portes d'entrée/sortie sur le réseau de la machine courante. L'interface _locale (lo)_ est ce que l'on appelle la _boucle sur soi-même_ (*loopback*). Elle permet, depuis votre machine, de faire appel à une application réseau qui tourne sur votre propre machine. Une application réseau se compose en fait de deux applications : une application _cliente_ qui sollicite un service et une application _serveuse_ qui rend un service. Pour attaquer une application serveuse, il faut son adresse _IP_ et son numéro de _port_ d'écoute. L'adresse IP associée est `127.0.0.1`. L'adresse MAC sert pour identifier une machine dans un réseau local. A chaque carte réseau correspond une adresse MAC unique. Dans les réseaux d'infrastructure Ethernet, l'adresse MAC est aussi appelée adresse Ethernet. L'adresse IP permet d'identifier une machine à un niveau indépendant de l'infrastructure physique qui soutient le réseau. En particulier elle permet d'identifier une machine dans l'Internet (c'est-à-dire à un niveau qui interconnecte tous les réseaux). L'adresse IP compte une partie pour désigner une adresse d'un réseau et une autre partie pour identifier une machine sur ce réseau. Un masque sert à connaître la partie de l'adresse IP qui correspond à l'identifiant du réseau IP dans lequel se trouve la machine (via un "et logique"). Par complémentarité, la partie restante désigne l'identifiant IP machine. Une adresse de diffusion permet d'adresser dans un même temps toutes les machines d'un réseau IP. #### Questions Sans relire, les définitions ci-dessous arrivez-vous à rappeler à quoi sert : une interface, l'interface locale, l'adresse MAC, l'adresse IP, le masque, l'adresse de diffusion ? A quoi sert l'interface locale ? A quoi sert une adresse MAC ? A quoi sert une adresse IP ? A quoi sert un masque ? A quoi sert une adresse de diffusion ? Tapez : `ip addr` ou `ip a` (`addr` en abrégé) Pour une interface qui ne soit pas la locale, reconnaissez vous l'adresse MAC, les adresses IPv4, masque et adresse de diffusion ? Quels sont leurs "petits noms" ? Même question pour IPv6. Retrouvez-vous ces informations avec la commandes ifconfig ? Dans la description de l’activité d’une interface, `` le « `UP` » signifie que l’interface est « active ». Par défaut, la commande ifconfig n’affiche pas les interfaces désactivées. Pour les afficher, il faut taper `ifconfig -a` (pour `all`). Quelles interfaces sont disponibles ? Lesquelles sont effectivement actives ? `LOWER_UP `est relatif à l’activité au niveau liaison. Si vous êtes en filaire et que vous lisez `NO-CARRIER` c’est probablement que votre câble est mal branchée… ### 2.2 Connaître l'état du cache ARP sur la machine ARP est un protocole qui permet de trouver l'adresse MAC correspondant à une adresse IP donnée sur le réseau local. La commande `ip n(eigh(bo(u)r))` (et anciennement `arp`) rend compte de l'état des associations connues à un moment donné. La commande `arp` pouvait être utilisée avec l'option `-n` pour afficher les adresses numériques au lieu d'essayer de déterminer les nom d'hôtes symboliques. `ip n` n'a pas l'option "-n" ; autrement dit, on n'a jamais de résolution nommée des adresses, uniquement les numériques. #### Questions Les IP de quelles machines sont actuellement représentées dans votre cache ARP. Si la commande `arp` est disponible, comparer l'affichage de la commande `arp` et `arp -n`. ### 2.3 Connaître l'état des routes pour accéder aux réseaux locaux interfacés et joindre le(s) routeur(s)/gateway (i.e. passerelle) La commande `ip r(oute)` (et anciennement `route`) permet de consulter et configurer la table de routage de la machine courante. Dans une table de routage, une route indique l'interface à utiliser pour joindre telle ou telle adresse IP machine ou réseau. Si la destination indiquée est une adresse réseau, cela signifie que la machine sait joindre toutes les machines du réseau indiqué. Une entrée supplémentaire pour indiquer comment joindre une machine appartenant à ce réseau est donc inutile. Lorsqu'une machine n'est pas directement accessible sur un réseau local, on indique en plus de l'interface l'adresse IP de la gateway/passerelle (machine sur un réseau local directement accessible) à qui transmettre les paquets ; on suppose que cette gateway saura quoi faire... On rajoute en général aussi une "route par défaut" pour traiter tous les paquets pour lesquels il n y aurait aucune destination spécifiée. Si une destination n'est pas présente ou qu'il n'y a pas de route par défaut, on ne saura pas transmettre de paquets à cette destination. #### Questions Taper : `ip route` ou `ip r` (`route` en abrégé). Identifier la liste des adresses de destination référencées. S'agit il d'adresses machine ou réseau ? La commande `ip route|column -s " " -t` permet d'améliorer le visuel de l’affichage en transformant les espaces en tabulations… Identifier les colonnes donnant la passerelle, le masque et l'interface. Dans le cas où vous voyez le symbole « * », que signifie t’il à votre avis ? A quoi sert la ligne où il y a une entrée désignée par "default" (si présente) Retrouvez-vous les adresses de destination, les masques associées, l’interface de sortie et éventuellement la passerelle à utiliser avec la commande route (souvent plus lisible) ? ### 2.4 Connaître les numéros de port des services Les numéros de port servent à identifier des instances de service (serveur). Si l'on souhaite faire tourner deux serveurs identiques (par exemple deux serveurs web) sur une même machine, il faudra leur octroyer deux ports d'écoute distincts ! Les 1024 premiers numéros de port sont réservés. Il n'y a pas forcément un serveur qui écoute derrière un port. Quelques services sélectionnés : * `ftp` est un protocole et une application réseau pour gérer l'hébergement de fichiers à distance * `ssh` est un protocole et une application réseau pour obtenir un shell distant sécurisé * `smtp` est un protocole et une application réseau gérant la transmission de mail * `dns` est un protocole et une application réseau gérant la résolution d'adresse IP et de nom de domaine * `http` (ou Word Wide Web / www) est un protocole et une application réseau la demande et la réception de contenu distant ; réseau dit Web Pour se faire taper la ligne suivante cat /etc/services La commande `ss -taupen` (et anciennement `netstat`) permet de connaître l'état des connexions de votre machine avec d'autres machines et par là de connaître les services qui tournent sur votre machine et les clients de votre machine impliqués dans des connexions. Une colonne désigne l'IP et le port local, une autre désigne éventuellement l'IP et le port de la machine distante. Une colonne désigne si la connexion est établie (`ESTABLISHED`) ou seulement en écoute (`LISTEN`). En "écoute", signifie que votre machine a un service (identifié par le numéro de port ou un nom symbolique) qui est disponible sur votre machine. Le paramétrage `-taupen` de `ss` et de `netstat` est identique. #### Questions A quoi servent les services suivants : ftp, ssh, smtp, doman (dns), http ? Quel est leur numéro de port théorique ? Ces services tournent-ils actuellement sur votre machine ? ### 2.5 Connaître les serveurs DNS Pour se faire taper la ligne suivante cat /etc/resolv.conf (à partir de ubuntu 12.04 `cat /etc/network/interfaces` et `/run/resolvconf/resolv.conf`) ## 3. Configuration et test d'une interface réseau Les commandes `ip` et `ifconfig` permettent de configurer une interface. C'est-à-dire d'associer une adresse IP à une interface. Avec la commande `ifconfig` quand le masque n'est pas communiqué, celui-ci est déduit de la classe d'adresse supposée de l'adresse. On va constater que ce n’est pas le cas de la commande `ip`… L'adresse de diffusion est déduite quant à elle automatiquement du masque. Avec la commande `ifconfig`, lorsqu'une adresse IP est associée à une interface, l'interface est automatiquement activée et une route est automatiquement rajoutée (visible avec la commande route). Nous verrons qu’avec la commande `ip`, il faudra clairement expliciter ces différentes informations. Chacune de vos machines ont un identifiant. Voir le cablage derrière votre poste. Par la suite vous utiliserez l'adresse IP suivante 192.168.1.VOTRE_IDENTIFIANT. Nous travaillerons avec une interface disponible, ce devrait être le cas de l'interface 1 eth1. Passez en root avec la commande `sudo su` Tapez `ip a`. L'interface eth1 est-elle configurée (voyez-vous une IP) ? Ajoutez une adresse IP » à l’interface en oubliant de préciser le masque... Tapez ip a add 192.168.1.VOTRE_IDENTIFIANT dev eth1 puis `ip a`. Quel est le masque associé ? Pour tenter de corriger, tapez la commande suivante en précisant un masque (ici /24) ip a add 192.168.1.VOTRE_IDENTIFIANT/24 dev eth1 puis `ip a`. Est-ce que cela a corrigé le problème ? Pour supprimer une configuration associée à une interface, utiliser la commande suivante (attention à bien préciser le masque…). ip a del 192.168.1.VOTRE_IDENTIFIANT/MASQUE dev eth1 L'interface est-elle active (voyez-vous un « UP ») ? Pour activer une interface, tapez : sudo ip link set up dev eth1 (pour la désactiver utiliser `down` à la place de `up`) Demander à votre voisin de vous indiquer son adresse MAC. Consulter votre cache ARP. Est-elle présente ? (elle ne le devrait pas) Configurez votre interface pour être sur le même réseau (même masque et même identifiant réseau) que votre voisin. "Pinguez le". ping IP_DE_VOTRE_VOISIN Si l'affichage n'indique pas que le host est inconnu alors le ping est reçu et le "pong" est renvoyé. Si le ping a fonctionné, consulter votre cache ARP, l'adresse MAC de votre voisin est-elle présente ? Configurer votre interface pour être sur un réseau différent de votre voisin (changer seulement le masque). Est-ce que le ping marche encore ? Demandez à votre chargé de TD si vous avez le temps de jouer avec la commande `ifconfig` à la place de `ip`. Si oui, essayez de configurer une interface en précisant ou non un masque ifconfig eth1 192.168.1.VOTRE_IDENTIFIANT ou bien ifconfig eth1 192.168.1.VOTRE_IDENTIFIANT/16 observez avec la commande ifconfig et comparez avec ip Activez (up) ou désactivez (down) une interface (observez et comparez avec l’affichage de ip) ifconfig eth1 192.168.1.VOTRE_IDENTIFIANT down Jouer avec "up" et "down" et regarder avec la commande route, les routes qui sont ajoutés/retirées automatiquement. ## 4. Pour aller plus loin * présentation de la salle réseau (système live + baie de brassage) * pour simuler un client `nc localhost 80`