# Routage statique ## 1. Complément de cours Au niveau de la couche réseau, le routage utilise une table de routage qui contient une ou plusieurs entrées contenant chacune essentiellement deux informations : * une désignation d'une destination (machine ou réseau) à l'aide d'une adresse IP et d'un masque * une indication sur comment joindre la destination : * en précisant seulement une interface si celle-ci est directement joignable (on parle de routage direct), * en précisant en plus l'IP d'un routeur directement joignable si la destination n'est accessible que par un routeur (on parle de routage indirect). En pratique ces informations sont découpées en plusieurs colonnes (IP destination, masque, interface, passerelle...). Par ailleurs, les machines sont rarement indiquées comme destination. On utilise en général les adresses de réseau qui permettent de couvrir toutes les adresses machines de ce réseau comme destination possible. Un routeur peut être un équipement spécialisé ou simplement un hôte ordinaire relié à plusieurs réseaux. Le décision de routage se fait par la recherche d’une correspondance dans la table de routage en appliquant pour chaque ligne, le masque de réseau à l’adresse de destination. Quatre cas peuvent alors se présenter : - le réseau de la destination est directement connecté. Il y une remise directe en utilisant le réseau local sous-jacent. - le réseau de la destination est accessible via un routeur. Le paquet est transmis au routeur sans changer les adresses IP de l’émetteur et du destinataire. - le réseau de la destination est absent de la table de routage, mais il existe une route par défaut. Le paquet est transmis au routeur désigné. - le réseau de la destination est absent de la table de routage, et il n’existe pas de route par défaut. Envoi d’un message ICMP à l’émetteur : `Network is unreachable` Chaque routeur recevant un paquet IP applique le même algorithme. ## 2. Configuration statique des routes Ci-dessous une liste de commandes pour réaliser des opérations de consultation et configuration réseau d'interface et de routage (certaines sont des alternatives). Les opérations de configuration sont à réaliser en tant que root (`sudo su`). Utiliser le `man`(uel) pour connaître le détail des commandes notamment pour supprimer une route ou désactiver une interface.. Pour le routage, les commandes utiles sont * `ip l(ink)` pour consulter les liaisons * `ip a(ddress)` (ou anciennement `ifconfig`) pour consulter et configurer l’adresse IP d’une interface * `ip r(oute)` et (et anciennement `route`) pour consulter, modifier et activer les routes d’une table de routage d’un hôte * `ping` pour générer un trafic ICMP echo request/echo reply permettant de tester la connectivité Ci-dessous, les commandes sont d'abord présentées. Elles ne sont pas à exécuter. Vous aurez un exercice pratique en section 3. Pour consulter la configuration réseau des interfaces de votre machine (chaque ligne est une alternative) : ip addr show ip addr ip a ifconfig # -a pour connaître celles qui sont disponibles pas seulement les actives Pour consulter les routes actuellement configurées sur votre machine ip route show ip route ip r route Pour configurer l'interface eth1 (si celle-ci est disponible) de votre machine en lui attribuant l'adresse IP 172.16.1.1 et le masque 255.255.255.0 (i.e. /24). Attention, dans cette section, les commandes sont données à titre d'exemple. Si vous executez tous une des commandes ci-dessous vous aurez tous la même adresse IP... ip addr add 172.16.1.1/24 dev eth1 ifconfig eth1 172.16.1.1/24 `ìp a` et `ifconfig` ont des comportements différents. Si vous utilisez plusieurs fois `ìp a add` avec des adresses IP différentes, vous ajoutez autant d'adresses IP à l'interface sélectionnée. Avec `ifconfig`, vous écrasez la précédente adresse. Par ailleurs, si vous oubliez de préciser le masque, la commande peut être considérée comme valide mais cela peut aboutir à un problème de configuration. Le masque 32 sera considéré par `ip` tandis que `ifconfig` va chercher à déduire en fonction de l'ancien système de classes d'adresses. En cas d'erreur avec `ip`, il faudra supprimer l'adresse avec un `ìp a del`. Pour activer l'interface (en général automatique avec `ifconfig`) ip link set eth1 up ifconfig eth1 up Lorsque l'on configure une interface, les routes directes sont automatiquement rajoutées. Pour configurer une route pour un réseau localement connecté sur une interface ip route add 192.168.1.0/24 dev eth0 route add -net 192.168.1.0/24 dev eth0 Pour configurer une route vers un hôte présent sur un réseau localement connecté sur une interface route add 192.168.1.0 dev eth0 Pour ajouter une route par défaut via une passerelle (172.16.1.254) ip route add default via 172.16.1.254 route add default gw 172.16.1.254 Pour ajouter une route pour accéder à un réseau (172.16.2.0/24) via une passerelle (172.16.1.254) ip route add 172.16.2.0/24 via 172.16.1.254 dev eth1 route add -net 172.16.2.0/24 gw 172.16.1.254 route add -net 172.16.2.0 netmask 255.255.255.0 gw 172.16.1.254 Pour tester une route via une interface (en général la spécification de l'interface est optionnelle) ping 172.16.1.254 -I eth1 Pour activer le "pontage" entre les deux cartes réseaux (i.e. autoriser une machine à faire suivre un paquet d'une interface à une autre... utile en tant que routeur) echo 1 > /proc/sys/net/ipv4/ip_forward De manière générale, veiller à ce que * la liaison physique existe au niveau local. * les routes existent dans les deux sens ! * les masques soient correctement attribuées lors de la configuration. * Le même masque et identifiant réseau sont utilisés par les machines d'un même réseau local... ## 3. Exercice : routage direct et pontage Par petits groupes de 3-4 étudiants réservez-vous 3-4 machines et affectez-vous un identifiant X distint par groupe. Selon les interfaces disponibles sur votre machine (cad non configurée initialement), adaptez le sujet ci-dessous. Actuellement le sujet suppose que votre machine possède les interfaces eth1 et eth2 de disponibles. Soit le réseau suivant [A]eth1-----eth1[B]eth2----eth2[C] A sur eth1 192.168.X.1/24 B sur eth1 192.168.X.254/24 sur eth2 172.16.X.254/24 C sur eth2 172.16.X.1/24 Reportez toutes les commandes que vous tapez sur chacune des 3 machines pour que C puisse "pinguer" A. Observez l'état des interfaces, des routes et la sortie du ping après chaque commande. Si besoin, outre les routes directes, n'utilisez que des routes par défaut. ## 4. Exercice : routage statique par passerelle Rajouter la machine D telle que [A]eth1-----eth1[B]eth2----eth2[C]eth1----eth1[D] C sur eth1 172.20.X.254/24 D sur eth2 172.20.X.2/24 Reportez toutes les commandes que vous tapez sur 2 machines et éventuellement les précédentes pour que D puisse "pinguer" A. Observez l'état des interfaces, des routes et la sortie du ping après chaque commande. Plusieurs solutions sont possibles. Vous pouvez remplacer des routes par défaut par des routes en spécifiant explicitement les passerelles. ## 5. Exercice : pour aller plus loin Observer avec wireshark