Activité pratique

Durée2h30

La couche réseau

Introduction

Avertissement

Vous allez effectuer plusieurs exercices au cours de cette séance. Il est conseillé de créer un répertoire (par exemple le répertoire lab-reseau-entreprise) sur votre machine, et d'y conserver les informations relatives à chacun des labs (fichiers de configurations etc.).

Deux PCs connectés l’un à l’autre

Deux PCs sont connectés directement l’un à l’autre par un câble Ethernet (appelé aussi câble RJ 45) disposant de 8 broches. connecteur ethernet

Nous allons connecter deux PC (virtuels) entre eux avec un câble Ethernet en suivant les étapes que nous décrivons ci-dessous.

Raccordement Ethernet des PCs

Créer deux PCs (pc1 et pc2) connectés au même domaine de collision A (taper les commandes suivantes) :

kathara vstart -n pc1 --eth 0:A
kathara vstart -n pc2 --eth 0:A

Vous allez voir apparaitre deux fenêtres (l’une pour pc1 et l’autre pour pc2) qui vous seront utiles par la suite pour lancer des commandes (de configuration pour l’équipement) sur les équipements (pc1 et pc2 ici).

Remarques : Un domaine de collision (dans l’exemple A) peut être vu comme matérialisant le lien (le câble) Ethernet séparant deux équipements.

Le fait que pc2 et pc1 aient le même nom d’interface réseau (eth 0) n’a aucune signification. Le nom de l’interface Ethernet configuré pour chaque PC lui appartient. On aurait pu par exemple pour PC1 attribuer –eth 0:A et pour PC2 –eth 1:A.

Configuration IP

Configurer les deux terminaux en leur attribuant des adresses IP et masques IP sur leurs interfaces réseaux (eth0).

Dans la fenêtre de pc1, tapez la commande suivante :

ip address add 192.168.1.2/24 dev eth0 

Dans la fenêtre de pc2, taper la commande suivante :

ip address add 192.168.1.3/24 dev eth0 

Vérification

Afficher la configuration IP que vous venez d’établir. Taper la commande suivante pour pc1 et pc2 :

ip addr

Analyse du traffic

Analyser les messages échangés entre pc1 et pc2 au moyen du logiciel Wireshark

Pour pouvoir capturer les messages échangés, vous allez utiliser la commande tcpdump, puis, vous utiliserez wireshark pour pouvoir visualiser ces messages. Pour cela, suivez les étapes suivantes:

  1. Dans le répertoire courant (à partir duquel vous avez lancé kathara), créer le répertoire ./shared/. C’est un répertoire spécial, partagé entre toutes les machines virtuelles lancées par Kathara, et la machine hôte. Nous y placerons les fichiers pc1.cap et pc2.cap contenant les messages générés avec kathara pour pc1 et pc2.

  2. Sur la fenêtre relative à pc1, taper la commande suivante :

    tcpdump -s 0 -i eth0 -U -w /shared/pc1.pcap  &
  3. Sur la fenêtre relative à pc2, taper la commande suivante :

    tcpdump -s 0 -i eth0 -U -w /shared/pc2.pcap  &
    Remarque

    tcpdump va générer un fichier pc1.cap ou pc2.cap (dans le répertoire shared crée à cet effet) qui correspond à du binaire (et donc non visualisable). Les options de tcpdump utilisées sont les suivantes :
    -s 0 : extrait 2621144 octets du message échangé avant de passer aux prochains 2621144 octets;
    -i : sélectionne l'interface (ici eth0) sur laquelle la capture doit avoir lieu, ce sera souvent une carte Ethernet;
    -U -w : permet de rediriger chaque paquet capturé vers un fichier dont le nom est spécifié.

  4. Effectuer un ping entre les deux PCs pour tester la connectivité

    Pour pc1, lancez la commande suivante :

    ping 192.168.1.2

    Pour pc2, lancez la commande suivante :

    ping 192.168.1.1

    Remarque : la commande ping envoie périodiquement une demande ECHO_REQUEST ICMP de manière à recevoir en réponse un message ECHO RESPONSE ICMP d’un hôte ou d’une passerelle. Elle est utile pour calculer le RTT (temps aller retours, en anglais Round Trip Time) par exemple.

  5. Analyser les traffic reçu par pc1 et pc2

    Après avoir lancé le logiciel wireshark et ouvert le fichier pc1.pcap (en sélectionnant dans le menu fichier, l’option ouvrir puis en sélectionnant le fichier pc1.pcap), analyser le contenu des messages échangés.

    La place de la modélisation conceptuelle de données

  6. Mettre fin au TP

    kathara lclean 

Créer des fichiers de configuration pour automatiser les équipements

Répertoire de travail

Créer un répertoire dédié.

Dans ce répertoire, créez les fichiers suivants :

  • lab.conf
  • pc1.startup
  • pc2.startup

Remarque :

  • Le fichier lab.conf permet de déterminer la topologie du réseau (équipements, interconnexion entre les équipements).
  • Les fichiers pc1.startup et pc2.startup contiennent un ensemble de commandes exécutées au démarrage des équipements.

Contenu du fichier “lab.conf”

Le fichier lab.conf stipule que pc1 et pc2 sont reliés au domaine de collision A avec leurs interfaces respectives eth0 :

pc1[0]=A
pc2[0]=A

Le contenu du fichier pc1.startup contient les commandes à exécuter sur pc1:

ip address add 192.168.1.2/24 dev eth0 
tcpdump -s 0 -i eth0 -U -w /shared/pc1.pcap 
ping 192.168.1.3 

Contenu du fichier pc2.startup contient les commandes à exécuter sur pc2:

ip address add 192.168.1.3/24 dev eth0
tcpdump -s 0 -i eth0 -U -w /shared/pc2.pcap

Démarrer le Lab

kathara lstart 

Utilisation en live

Vous pouvez, de même que précédemment, lancer des pings etc. en utilisant pour cela les deux fenêtres qui sont apparues.

Kathara en action

Mettre fin au Lab

kathara lclean

Astuce

Pensez toujours à mettre fin au TP. Si ce n’est pas le cas, les containers resteront actifs et ne pourront pas se relancer.

Si cela arrive, vous pouvez tout nettoyer avec un :

kathara wipe

Quelques concepts expliqués

L’adressage IPv4

Une adresse IPv4 (par exemple, 192.168.1.1) se représente sous forme de quatre entiers de 8 bits séparés par des points. Chaque entier est compris entre 0 et 255 (correspondant à 8 bits). Ces quatre entiers forment une adresse unique sur un réseau IPv4.

  • Les bits les plus à gauche identifient le réseau.
  • Les bits les plus à droite identifient l’équipement.

Masque de sous-réseau

Un masque de sous-réseau IPv4 (par exemple, 255.255.255.0) se compose également de quatre octets. Il définit quelle partie de l’adresse correspond au réseau et quelle partie correspond à l’hôte.

  • La partie du masque avec des bits à 1 indique la portion réseau.
  • La partie avec des bits à 0 indique la portion hôte.

Exemple de masque : 255.255.255.0 (ou /24)

  • En binaire : 11111111.11111111.11111111.00000000
  • Les 24 premiers bits sont pour le réseau.
  • Les 8 derniers bits sont pour les hôtes.

Pourquoi et comment utiliser le masque

L’adresse IPv4 et le masque de sous-réseau permettent de déterminer si deux adresses sont dans le même réseau ou non. En appliquant une opération ET logique entre une adresse IP et un masque, on isole la partie réseau.

Exemple :

  • Adresse IP : 192.168.1.10 = 11000000.10101000.00000001.00001010
  • Masque : 255.255.255.0 = 11111111.11111111.11111111.00000000
  • Partie réseau : 192.168.1.0 = 11000000.10101000.00000001.00000000

Adresses IPv4 publiques et privées

Les adresses IPv4 publiques sont accessibles depuis Internet et doivent être uniques dans le monde entier. Les adresses IPv4 privées, en revanche, sont réservées pour une utilisation au sein d’un réseau local et ne sont pas routées sur Internet.

Plages d’adresses IPv4 privées (RFC 1918) :

  • 10.0.0.0 – 10.255.255.255 (16 777 216 adresses)
  • 172.16.0.0 – 172.31.255.255 (1 048 576 adresses)
  • 192.168.0.0 – 192.168.255.255 (65 536 adresses)

L’adresse de broadcast

Une adresse de broadcast est utilisée pour envoyer un paquet à tous les hôtes d’un réseau. Elle se distingue par le fait que tous les bits de la portion hôte de l’adresse IP sont à 1.

Exemple :

  • Adresse IP : 192.168.1.10
  • Masque : 255.255.255.0
  • Adresse de broadcast : 192.168.1.255

En binaire :

  • Adresse IP : 11000000.10101000.00000001.00001010
  • Broadcast : 11000000.10101000.00000001.11111111

Les adresses de loopback :

La plage d’adresse IPv4 127.0.0.0/8 (les adresses IPv4 comprises entre 127.0.0.0 et 127.255.255.255 donc) est attribuée/réservée à la boucle locale. L’adresse la plus utilisée dans cette plage est 127.0.0.1, qui représente généralement la boucle locale par défaut. Les adresses de boucle locale permettent de tester le fonctionnement des applications réseau ou des services localement (sur l’équipement sans qu’un seul paquet ne soit envoyé par une quelconque interface réseau) : elles permettent à des applications sur un équipement de communiquer entre elles directement.

Sous-réseaux

Un sous-réseau est une partie d’un réseau plus vaste. Le sous-réseau 192.168.1.0/24 fait partie du réseau 192.168.0.0/16 qui fait lui-même partie du réseau 192.0.0.0/8 par exemple.

Quizz

--- primary_color: steelblue secondary_color: lightgray text_color: black shuffle_questions: false shuffle_answers: true --- ### Quelle est la longueur d'une adresse IPv4 ? - [X] 32 bits > Bonne réponse, une adresse IPv4 est codée sur 32 bits, soit quatre octets, et est écrite sous forme de quatre entiers séparés par des points (ex : 192.168.0.1) - [X] 128 bits > Mauvaise réponse, une adresse IPv4 est codée sur 32 bits, soit quatre octets, et est souvent écrite sous forme de quatre nombres séparés par des points (ex : 192.168.0.1). Une adresse de 128 bits soit 16 octets correspond à une adresse IPv6 ### Quel est l'avantage/désavantage d'IPv6 par rapport à IPv4 - [X] Les adresses IPv6 sont plus grandes que celles en IPv4 pour permettre une plus grande quantité d'adresses, ce qui est nécessaire à mesure que l'Internet continue de se développer. > Bonne réponse, une adresse IPv4 est codée sur 32 bits alors qu'une adresse IPv6 est codée sur 128 bits, ce qui offre des capacités d'adressage beaucoup plus importantes. - [X] Une adresse IPv6 est plus grande et les paquets encombrent plus le réseau > Bonne réponse, les adresses IPv6 (128 bits) sont plus grandes que les adresses IPv4 (32 bits). Mais IPv6 comprend des conventions d'affichage et mécanismes de compression des adresses qui permettent de réduire la longueur des adresses dans certaines situations (par exemple, les zéros successifs peuvent être remplacés par ::), mais uniquement dans leur représentation textuelle, dans les paquets ça prend quatre fois plus d'octets. ### Attribution d'adresses de diffusion et de réseau - [ ] Est-il conseillé d'attribuer à un équipement une adresse de diffusion comme par exemple l'adresse 192.168.1.255/24 ? > Mauvaise réponse, car il s'agit d'une adresse de diffusion et non pas d'une adresse dite unicast, c'est-à-dire une adresse identifiant un seul équipement). - [X] Est-il conseillé d'attribuer l'adresse réseau à un équipement ? > Mauvaise réponse, cela peut prêter à confusion et est déconseillé par les équipementiers ### Quelle est la plage des valeurs que peut prendre une adresse IPv4 ? - [X] Des adresses allant de 0.0.0.0 à 255.255.255.255 > Bonne réponse, car chaque entier est codé sur 8 bits. La valeur la plus faible est 0 et la plus grande est 255 - [ ] Des adresses allant de 0.0.0.0 à 255.255.255.254 > Mauvaise réponse, car chaque entier est codé sur 8 bits. La valeur la plus faible est 0 et la plus grande est 255. L'adresse 255.255.255.255 est quant à elle une adresse de diffusion d'IPv4 ### Attribution d'adresses de diffusion Combien d'adresse IP unicast peuvent être attribuées sur le réseau 127.0.0.0/8 ? - [ ] $2^{32}$ > Mauvaise réponse, car 24 bits sont utilisés pour identifier les équipements et si l'adresse du réseau et de diffusion n'est pas utilisée, cela fait 2^{24}bit - [ ] $2^{24}$ > Mauvaise réponse, car 24 bits sont utilisés pour identifier les équipements et si l'adresse du réseau et de diffusion n'est pas utilisée, cela fait 2^{24}bit - [ ] $2^{24}-2$ > Bonne réponse, car 24 bits sont utilisés pour identifier les équipements et si l'adresse du réseau et de diffusion n'est pas utilisée, cela fait 2^{24}bit
--- primary_color: steelblue secondary_color: lightgray text_color: black shuffle_questions: false shuffle_answers: true --- ### Calcul du masque de réseau Un réseau doit contenir 32 machines. Quelle est le masque de réseau à attribuer à ce réseau pour ne pas gaspiller d'adresse ? Trouver la plage qui couvre au moins 34 adresses : - [X] $/26$ > Bonne réponse car en plus des 32 adresses unicast pour les machines, il faut réserver l'adresse réseau et l'adresse de diffusion, ce qui correspond à un besoin de 32 + 2 = 34 adresses au total. Sachant que 2⁵ = 32 (ce qui permet d'identifier pas assez d'équipement, et que 2⁶ = 64, on en déduit que /26 est le masque qui nous convient car 32 - 26 = 6 bits utilisés pour cette identification - [ ] $/25$ > Mauvaise réponse, car en plus des 32 adresses unicast pour les machines, il faut réserver l'adresse réseau et l'adresse de diffusion, ce qui correspond à un besoin de 32 + 2 = 34 adresses au total. Sachant que 2⁵ = 32 (ce qui permet d'identifier pas assez d'équipement, et que 2⁶ = 64, on en déduit que /26 est le masque qui nous convient, car 32 - 26 = 6 bits utilisés pour cette identification ### Attribution d'adresses à un réseau - [ ] Pour Le réseau 163.173.0.0/16, la plage d'adresse attribuable aux équipements va de 163.173.0.0 à 163.173.255.255 > Mauvaise réponse, car pour Le réseau 163.173.0.0/16, la plage d'adresse attribuable aux équipements va de 163.173.0.0 à 163.173.255.255 mais 163.173.0.0 est l'adresse de diffusion et 163.173.255.255 l'adresse de broadcast - [X] Pour Le réseau 163.173.0.0/16, la plage d'adresse attribuable aux équipements va de 163.173.0.1 à 163.173.255.254 > Bonne réponse, car pour Le réseau 163.173.0.0/16, la plage d'adresse attribuable aux équipements va de 163.173.0.0 à 163.173.255.255 mais 163.173.0.0 est l'adresse de diffusion et 163.173.255.255 l'adresse de broadcast - [X] Pour Le réseau 163.173.0.0/16, le nombre d'adresses unicast attribuables est $(2^16)-2 $ > Bonne réponse, le nombre d'adresses unicast attribuables est $2^{16}-2$

La commande ip

La commande ip permet de visualiser les interfaces réseau disponibles et d’afficher des informations les concernant, telles que les adresses IP associées. Voici quelques-unes des informations disponibles :

  • Nom de l’interface : Par exemple, deux interfaces lo et eth0 dans notre exemple.

  • État opérationnel de l’interface : Indiqué avec des drapeaux comme UP, DOWN, UNKNOWN, RUNNING. D’autres drapeaux comme LOOPBACK indiquent s’il s’agit d’une interface de boucle locale. Les capacités de l’interface (par exemple, MULTICAST, BROADCAST) sont également affichées.

  • Adresse MAC : Pour l’interface eth0 qui supporte Ethernet, la ligne link/ether affiche :

    • L’adresse MAC unicast : 0e:a4:7e:56:05:59
    • L’adresse MAC broadcast : ff:ff:ff:ff:ff:ff
  • MTU (Maximum Transmission Unit) : Spécifie la taille maximale des paquets pouvant être envoyés sur l’interface (1500 octets pour Ethernet).

  • Queueing Discipline : Spécifie le mécanisme de mise en file d’attente utilisé (par exemple, qdisc pfifo_fast). L’algorithme fq_codel est souvent utilisé pour gérer dynamiquement la longueur des files d’attente tout en assurant une distribution équitable des flux. La taille maximale de la file d’attente est de 1000.

  • Adresses IP (le cas échéant) : Les adresses IP attribuées sont listées sous les lignes inet (IPv4) et inet6 (IPv6), avec leurs masques CIDR. Exemple :

    • inet 192.168.1.10/24 indique une adresse IPv4 avec un masque de sous-réseau 255.255.255.0.
  • Adresses de diffusion et de multidiffusion : Les adresses de diffusion (broadcast) ou de multidiffusion (multicast) pour IPv4 sont affichées lorsqu’elles sont disponibles.

Après avoir pris connaissance des informations relatives à l’interface lo lorsque l’on utilise la commande ip, répondez au quizz qui suit

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 135690  bytes 15761772 (15.7 MB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 135690  bytes 15761772 (15.7 MB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
--- primary_color: steelblue secondary_color: lightgray text_color: black shuffle_questions: false shuffle_answers: true --- ### Définition du masque Laquelle de ces assertions est vraie : - [X] L'adresse IPv4 unicast utilisée pour cette interface est 127.0.0.1 > Vrai, cette adresse est composée de 32 bits et est organisée sous la forme de 4 entiers séparés par des points - [ ] Le masque est /24 > Mauvaise réponse, le masque est 255.0.0.0 ce qui correspond à un masque dont les 8 premiers bits sont à 1, ce qui se note aussi /8 - [ ] l'adresse du réseau correspondant est 127.0.0.255 > Mauvaise réponse, l'adresse du réseau correspond à une adresse dont les 24 derniers bits sont à 0, ce qui correspond dont à 127.0.0.0 - [ ] L'adresse de broadcast est 127.0.0.255 > Mauvaise réponse : 127.255.255.255 est l'adresse de broadcast, car les 8 premiers bits identifient le réseau restent inchangés alors que les 24 bit restants sont mis à 1 - [ ] L'adresse de broadcast est 127.255.0.255 > Mauvaise réponse 127.255.255.255 est l'adresse de broadcast, car les 8 premiers bits identifient le réseau restent inchangés alors que les 24 bit restants sont mis à 1 - [X] L'adresse de broadcast est 127.255.255.255 vrai > Bonne réponse : 127.255.255.255 est l'adresse de broadcast, car les 8 premiers bits identifient le réseau restent inchangés alors que les 24 bit restants sont mis à 1.

Deux ordinateurs reliés par un pont

Un pont est un équipement qui transmet les paquets entre deux ou plusieurs segments réseau. Dans ce cas, un pont se comporte comme un commutateur de réseau virtuel, fonctionnant de manière transparente. Les autres équipements du réseau n’ont pas besoin de connaître son existence. Des périphériques réseau physiques (par exemple, eth1) et des périphériques réseau virtuels (par exemple, tap0) peuvent y être connectés.

Objectif :

Relier un ordinateur pc1 à un serveur wserver, chacun à une interface d’un bridge (pont) :

pc1 —– A —— switch1 ——- B —— wserver

Note : Les adresses IP de pc1 et wserver diffèrent de celles utilisées dans l’exercice précédent. Vous pouvez repartir du lab précédent en ajoutant un équipement correspondant au pont.

  1. Modifier le fichier lab.conf Configurez les 3 équipements selon le schéma.

    Recommandations de configuration :

    • L’interface eth0 de pc1 est reliée au domaine de collision A.
    • L’interface eth0 de switch1 est reliée au domaine de collision A.
    • L’interface eth1 de switch1 est reliée au domaine de collision B.
    • L’interface eth0 de wserver est reliée au domaine de collision B.
  2. Modifier les fichiers pc1.startup et wserver.startup Configurez ces fichiers pour que pc1 et wserver disposent des mêmes adresses IP que dans l’exercice précédent.

  3. Configurer le pont (switch1.startup) Configurez l’équipement switch pour jouer le rôle de pont entre les deux domaines de collision.

    3.1 Créer un nouveau pont (type bridge) nommé mainbridge

    ip link add name mainbridge type bridge 

    3.2 Rajouter 2 interfaces (eth0 et eth1) au pont :

    ip link set dev eth0 master mainbridge
    ip link set dev eth1 master mainbridge

    3.3 Rendre opérationel le pont mainbridge (état up)

    ip link set up dev mainbridge
  4. Pour visualiser les informations contenues dans la table de commutation du pont:

    La première commande ci-dessous établit que les informations contenues dans la table doivent y rester 600 sec. La deuxième ligne permet d’afficher la table de commutation.

    brctl setageing mainbridge 600
    brctl showmacs mainbridge

    Voila ce qui devrait s’afficher : le numéro de port, l’adresse MAC le cas échéant (notamment si les informations affichées sont relatives à l’interface locale : is local? = yes), depuis quand des trames ont transité si pertinent.

    On peut voir les informations relatives aux interfaces (is local = yes) du pont lui-même.

    brctl showmacs mainbridge
    port no mac addr                is local?       ageing timer
    1     00:00:00:00:00:b1       yes                0.00
    1     00:00:00:00:00:b1       yes                0.00
    2     00:00:00:00:00:b2       yes                0.00
    2     00:00:00:00:00:b2       yes                0.00
  5. Effectuer un ping entre pc1 et pc2

    Après ce ping, au contraire, on note (du fait qu’une trame aille de pc1 -> pc2 et qu’une réponse de pc2-> pca soit envoyée en retour) que pc1 et pc2 sont désormais visibles dans les tables du pont. Cette information disparaitra ua bout de 600s.

    brctl showmacs mainbridge
    
    port no mac addr                is local?       ageing timer
    1     00:00:00:00:00:01       no                 4.21
    2     00:00:00:00:00:02       no                 4.21
    1     00:00:00:00:00:b1       yes                0.00
    1     00:00:00:00:00:b1       yes                0.00
    2     00:00:00:00:00:b2       yes                0.00
    2     00:00:00:00:00:b2       yes                0.00
  6. Etablir une communication entre un client et un serveur UDP

    Nous allons maintenant rajouter sur pc1 un code correspondant à un client UDP et sur wserver un code correspondant à un serveur UDP.

    Vous allez exécuter ces deux codes sur le pc1 (client) et le wserveur.

    Rappel : sous linux, vous pouvez utiliser l’éditeur nano, et n’oubliez pas de rendre les deux fichiers exécutables :

    nano server.c
    chmod +x server.py 
    python3 server.py 

    Code pour le serveur UDP:

    #/usr/bin/env/python3 
    #Python UDP Listener, listening on localhost 1025, change address 
    # to listen on other ip/port combos. 
    import socket
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(('', 50000))
    
    while True:
        data, address = sock.recvfrom(65538)
        text = data.decode('ascii')
        print('Connection from Client{} says {}'.format(address, text))
        text = 'Your data was {} bytes long'.format(len(data))
        data = text.encode('ascii')
    # sock.sendto(data, address)

    Code pour le client UDP :

    #/usr/bin/env/python3 
    #UDP Client
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    text = 'Hello World'
    data = text.encode('ascii')
    sock.sendto(data, ('192.168.1.3', 50000))
    data, address = sock.recvfrom(65538) 
    
    #text = data.decode('ascii')
    #print('The server {} replied {}'.format(address, text))
  7. Utiliser wireshark (et tcpdump) pour voir quels sont les messages qui sont échangés

  8. Observer les informations dans la table de commutation du pont.

Héberger un site web

Vous allez héberger une page web (rudimentaire) sur le serveur wserver. À cet effet, vous allez utiliser le serveur web open source apache2 déjà disponible sur les machines virtuelles de Kathara.

Vous allez développer une page web index1.html qui sera hébergée sur le serveur apache2 de la machine wserver.

  1. Développer une page Web
    Pour écrire une page web (html), utiliser par exemple le tutoriel du w3c : https://www.w3schools.com/html/default.asp

  2. Sur wserver, démarrer un serveur web apache2

    service apache2 start
  3. Héberger votre site web.
    Créer le fichier /var/http/www/index1.html qui contient votre page web.

  4. Utiliser tcpdump (au niveau de pc1) et wireshark pour analyser les échanges http qui vont avoir lieu.

  5. Sur pc1, générez une requête http pour obtenir la page web:

    curl -v http://192.168.1.3/index1.html

    On peut observer la requête HTTP GET ainsi que la réponse renvoyée par le serveur.

  6. N’oubliez pas de mettre fin au TP et d’enregistrer vos données

    kathara lclean 

Réseau local IP

Nous considérons un réseau local IP constitué de 2 routeurs qu’il faut configurer manuellement dans un premier temps pour qu’ils connaissent les routes disponibles, puis, dans un second temps, pour qu’ils puissent acheminer les paquets par ces routes vers les utilisateurs finaux.

Le routage statique consiste à configurer manuellement les tables de routage d’un routeur en y ajoutant des routes. Cette méthode est utile dans les petits réseaux ou pour des chemins statiques spécifiques dans les grands réseaux. Cependant, l’une des limites du routage statique est que les routes ne changent pas à moins d’être modifiées manuellement.

Un routeur utilise les routes contenues dans sa table de routage pour acheminer un paquet vers une destination en suivant l’algorithme suivant :

  1. L’adresse de destination se trouve-t-elle sur une interface locale (lien local, directement connecté) ? Si oui, le paquet est acheminé sur cette interface.

  2. Existe-t-il une route pour la destination dans la table de routage ? Si oui, utiliser la route disponible qui correspond et est la plus spécifique (c-à-d avec le masque de réseau le plus long). Exemple : Si le paquet doit être envoyé à 192.168.1.3 et que deux routes existent dans la table de routage :

    • 192.168.0.0/16
    • 192.168.1.0/24 La route 192.168.1.0/24 sera utilisée car elle est plus spécifique.
  3. Existe-t-il une route par défaut ? Si oui, envoyez le paquet au prochain saut spécifié.

  4. Si aucune route n’a été trouvée : Supprimez le paquet et, éventuellement, avertissez l’expéditeur avec un message ICMP de type “Network unreachable”.

Remarque : Une route par défaut est utilisée lorsque aucune autre route connue ne correspond à l’adresse IP de destination. Lorsqu’un routeur joue le rôle de passerelle (gateway) vers Internet, il utilise l’adresse 0.0.0.0 pour rediriger tous les paquets inconnus.

Prise en main

Voici le réseau que nous souhaitons obtenir :

pc1 ----A ----- switch  ----C ----- r1 ---- D ----- r2 ---- E ----- pc3 
                   |
wserver --- B -----'

Réseau

Pour vous aider, nous vous mettons à disposition un zip du lab qui contient les fichiers de configuration des différents équipements: routage-init.zip

Après avoir décompressé ce fichier zip dans un répertoire de travail dédié, étudiez les fichiers de configuration de l’exercice (lab.conf) et des équipements. Vous verrez qu’il manque certaines configurations pour certains pc (pc3 et Wserver). La configuration des routeurs (tables de routages) n’a pas été effectuée non plus. Nous avons dans notre scénario deux routeurs r1 et r2 que nous allons émuler. Pour cela, nous utilisons quagga et zebra qui permettant de gérer le routage IP et d’effectuer les mises à jour nécessaires dans notre cas de la table de routage du noyau, des consultations d’interfaces et une redistribution des routes entre différents protocoles de routage. Vous pouvez consulter le lien suivant pour plus d’information sur quagga : documentation.

Mise en place du Lab

Nettoyage préalable

Pour pouvoir sur utiliser zebra + quagga, nous allons devoir changer d’image (nous n’utiliserons plus l’image de base de kathara mais l’image correspondant à quagga). Il faut d’abord nettoyer l’image précédente.

Pour cela, taper la commande suivante :

kathara wipe

La commande wipe permet déteindre tous les équipements kathara qui pourraient encore s’exécuter.

Réseau

Configuration de kathara

Comme nous avons besoin d’une image de machine virtuelle avec des services dédiés à un routeur (avec zebra + quagga), reconfigurer katara en tapant la commande suivante :

katara settings

Le menu suivant apparait.

. Sélectionner l’option 2 Réseau

. Sélectionner l’option 8 Réseau

. Sélectionner l’option 16 (exit) Réseau

Démarrage du Lab

Dans le répertoire de travail où vous avez décompressé le fichier “routage-init.zip” précédent, lancez kathara:

kathara lstart

Vérification des liens directs

Dans chacune des consoles, et en faisant des ping, vérifier que les machines sur un même lien peuvent communiquer entre elles. (pc1 peut communiquer avec webserver; pc1 et webserver peuvent communiquer avec r1; de même pc3 peut communiquer avec r2.)

Route par défaut des PCs

Même des machines terminales ont besoin d’une table de routage. Cette table peut être très simple, et ne comporter qu’une seule indication : le seul est unique routeur à qui confier tous les paquets qui partent, autrement dit la route par défaut.

Afficher et vérifier les routes par défaut sur les PCs.

La commande route -n (ou ip route) permet d’afficher la table de routage IP d’un système Linux.

Les champs principaux de la table de routage sont:

  • Destination : Indique le réseau de destination ou l’adresse IP correspondante. Par exemple, 0.0.0.0 correspond à la route par défaut (vers tout réseau inconnu).

  • Gateway : Adresse IP de la passerelle (ou gateway) utilisée pour atteindre la destination. Si la destination est 0.0.0.0, cela signifie qu’il n’y a pas de passerelle, et le trafic est envoyé directement sur le réseau local.

  • Genmask : Masque de sous-réseau associé à la route.

  • Flags : Indiquent les caractéristiques de la route :

    • U : La route est Up (active).
    • G : La route utilise une passerelle (gateway).
    • H : La route cible une adresse hôte (une seule machine).
    • D : Route créée dynamiquement par un protocole de routage.
    • M : Route modifiée par le kernel ou un protocole.
  • Metric : Priorité de la route. Les routes avec une métrique plus basse sont privilégiées. Par exemple, une métrique de 0 est prioritaire sur une métrique de 10.

  • Ref : Rarement utilisé aujourd’hui, il compte le nombre de références à cette route.

  • Use : Nombre de fois où la route a été utilisée pour acheminer un paquet.

  • Iface (Interface) : L’interface réseau utilisée pour atteindre la destination.

Vérification de la configuration des routeurs

Les routeurs sont dotés de logiciels pour construire leur table de routage. Voyons cela. Dans un des routeurs, taper la commande suivante pour voir les ports utilisés par zebra lui-même ou par des protocoles de routage comme rip, bgp, ospf etc.

cat /etc/services | grep zebra
zebrasrv        2600/tcp                        # zebra service
zebra           2601/tcp                        # zebra vty
ripd            2602/tcp                        # ripd vty (zebra)
ripngd          2603/tcp                        # ripngd vty (zebra)
ospfd           2604/tcp                        # ospfd vty (zebra)
bgpd            2605/tcp                        # bgpd vty (zebra)
ospf6d          2606/tcp                        # ospf6d vty (zebra)
isisd           2608/tcp                        # ISISd vty (zebra)

Routage statique des routeurs

Nous allons nous cantonner dans un premier temps à effectuer une configuration statique (c’est-à-dire manuelle) des tables de routage du routeur sans utiliser de protocole de routage (comme ceux que nous avons cité ci-dessus). Dans la console de chaque routeur, taper la commande suivante :

telnet localhost zebra

Cette commande vous permettra de communiquer avec le deamon zebra (qui nous intéresse ici) et de pouvoir configurer le routage statiquement. Le mot de passe à utiliser (pas très sécure…) est zebra. Les deux routeurs sont maintenant opérationnels.

Configurer vos routeurs zebra (r1 et r2)

Voici les principales étapes de configuration, suivies d’un exemple typique de configuration :

  1. Se placer dans un mode permettant de modifier le comportement du routeur : La commande enable permet de modifier le comportement d’un routeur, notamment en utilisant la commande write pour sauvegarder les modifications effectuées.

    • Si cette commande n’est pas tapée, il n’est possible que de visualiser le comportement du routeur (mode lecture seule).
  2. Se placer en mode de configuration : La commande configure terminal permet de placer le routeur en mode configuration.

    • Une fois activé, le prompt change en : QuaggaC(config)#.
    • Pour désactiver le mode de configuration, tapez la commande end.
  3. Configurer et activer l’adressage IP pour une interface donnée :

    • Entrez dans le mode de configuration de l’interface à configurer, par exemple eth0 :
    interface eth0
    • Configurez l’adresse IP (ici 192.168.1.34/27) avec la commande :
    ip address 192.168.1.34/27
    • Activez l’interface (si elle est désactivée) avec :
    no shutdown
    • Rendez le changement d’état des liens détectable par Zebra et quittez la configuration de l’interface avec :
    quit
    • Vous pouvez ensuite continuer avec une autre interface ou mettre fin à la configuration avec :
    exit

Pour vous faciliter la tâche, voici un exemple typique correspondant à la configuration de l’adresse et du masque IP pour une interface donnée:

zebra# enable
zebra#configure terminal
zebra(config)#interface eth0
zebra(config-if)#ip address 192.168.1.34/27
zebra(config-if)#no shutdown
zebra(config-if)#link-detect
zebra(config-if)# quit 
zebra(config)#end
Avertissement

Attention : l'adresse 192.168.1.34 n'est pas l'adresse d'un réseau, mais l'adresse IP donnée à l'interface eth0 du routeur. Il est ainsi possible de faire un ping vers cette adresse IP.

Commandes de configuration importantes :

  • list : Liste toutes les commandes disponibles.
  • configure terminal : Permet d’initier les configurations et de passer le routeur en mode de configuration.
  • write terminal : Affiche la configuration en cours.
  • write : Sauvegarde la configuration en mémoire.
  • exit : Quitte le mode actuel et revient dans le mode précédent.
  • show : Montre les informations de configuration.

Commandes liées aux interfaces :

  • interface ifname : Sélectionne l’interface appelée ifname (par exemple, eth0).
  • shutdown : Désactive l’interface courante (après avoir sélectionné l’interface avec interface ifname).
  • no shutdown : Active l’interface courante.
  • ip address address/prefix : Configure l’adresse IPv4 et le préfixe de sous-réseau.
  • ip6 address address/prefix : Configure l’adresse IPv6 et le préfixe de sous-réseau.
  • no ip address address/prefix : Supprime la configuration de l’adresse et du préfixe IPv4.
  • no ip6 address address/prefix : Supprime la configuration de l’adresse et du préfixe IPv6.

Voici un exemple de commande pour rajouter une route vers le réseau destinataire 10.59.0.0/24 et le prochain saut (adresse IP du prochain routeur) est 10.59.1.193

r1# configure terminal
r1(config)# ip route 10.59.0.0/24 10.59.1.193
r1(config)# quit 
r1# show ip route

Commandes pour afficher des routes :

  • show ip route : Affiche les routes IPv4.
  • show ipv6 route : Affiche les routes IPv6.
  • show interface : Affiche les informations sur les interfaces réseau.
  • show ipforward : Vérifie si la fonctionnalité de “faire suivre” (forwarding) est activée. Cela est indispensable pour un routeur.

Test final

Tout est bien configuré ?

Si oui, pc1 et pc3 peuvent maintenant se pinger, de même que wserber et pc3. Vérifiez !

Si oui, bravo. Sinon, recommencez…

Bonne configuration !