Activité pratique

Durée2h30

La couche réseau

Lors de cette séance, nous allons utiliser l’émulateur kathara que vous devez avoir installé sur votre ordinateur. Si vous n’avez pas installé kathara, les intructions sont disponibles, Kathara nous sera utile pour émuler un réseau virtuel. En pratique Kathara sur des containers Docker. Chaque container peut émuler un équipement tel qu’un ordinateur, un switch, un routeur, un pare-feu, ou un serveur hébergeant des services. Nous allons ici créer au cours des différents exercices plusieurs réseaux virtuels dont il vous faudra configurer les équipements.

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

Réseau Deux PCs (pc1 et pc2) 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

Avant de commencer, vous allez télécharger et deziper le fichier adhoc.zip

Vous allez vous placer dans le répertoire dézippé (en tapant la commande cd adhoc), et vous allez y trouver 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 respectivement pc2.startup sont vides mais ils contiendront quand vous aurez fini l’exercice l’ensemble de commandes exécutées au démarrage pour configurer pc1 et respectivement pc2.

Contenu du fichier “lab.conf”

Ouvrez le 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

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 1 et pour PC2 eth 0 ou vis versa.

Démarrer le Lab

Pour démarrez le lab, placez-vous dans le répertoire adhoc

cd adhoc

Puis, taper la commande suivante qui va démarrer pc1 et pc2 :

kathara lstart

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) sur les équipements (pc1 et pc2 ici).

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 qui assigne à l’interface eth0 l’adresse IP 192.168.1.2 et le masque /24:

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 trafic

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), regardez si le répertoire ./shared/ existe. Si c’est le cas, passez à l’étape 2 directement. Dans le cas contraire, créez le répertoire ./shared/ en tapant la commande ‘mkdir shared’, et relancer le labo (‘kathara lclean; kathara lstart’, puis reconfiguration ip…) 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.3

    Pour pc2, lancez la commande suivante :

    ping 192.168.1.2

    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 trafic 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 

Automatiser le configuration de pc1 et pc2

Ajouter les information ci-dessous dans le fichier pc1.startup:

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 

Ajouter les information ci-dessous dans le fichier pc2.startup :

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

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 aussi tout nettoyer avec un :

kathara wipe

### Correction

La correction est disponible après le TP à l’adresse suivante : adhoc-correction.zip

Dans le fichier README, vous trouverez des explications liées à la correction

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) - [ ] 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 - [ ] Il est conseillé d'attribuer à un équipement une adresse de diffusion comme par exemple l'adresse 192.168.1.255/24 ? > Mauvaise réponse, il n'est pas conseillé d'attribuer une adresse de diffusion à un équipement car ce n'est pas d'une adresse dite unicast. - [ ] Il est conseillé d'attribuer l'adresse réseau à un équipement > Mauvaise réponse, attribuer une adresse réseau à un équipement peut prêter à confusion et est souvent déconseillé ### 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, la plage de valeur d'une adresse IPv4 va de 0.0.0.0 à 255.255.255.255 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, la plage de valeur d'une adresse IPv4 va de 0.0.0.0 à 255.255.255.255 et non jusqu'à 255.255.255.254 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, sur le réseau 127.0.0.0/8 24 bits (et non pas 32 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 - [ ] $2^{24}$ > Mauvaise réponse, sur le réseau 127.0.0.0/8 24 bits sont utilisés pour identifier les équipements mais si l'adresse du réseau et de diffusion n'est pas utilisée, cela fait 2^{24}-2 - [X] $2^{24}-2$ > Bonne réponse, sur le réseau 127.0.0.0/8, 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}-2
--- 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, le masque de réseau est /26 pour contenir 32 machines 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, le masque de réseau est /26 et non pas /25 pour contenir 32 machines 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. 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 127.0.0.1 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 > 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

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). Par abus de l’angage, nous l’appelons switch.

Note : Les adresses IP de pc1 et wserver ne diffèrent pas 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 (appelé ici switch 1).

vous allez télécharger et deziper le fichier pont.zip

  1. Configurer pc1 et wserver : pour assigner une adresse IPv4 et un masque à chacun, vous pouvez vous inspirer de l’exercice précédent.

  2. Configurer le pont pour jouer le rôle de pont entre les deux domaines de collision.

    2.1 Pour créer un nouveau pont (type bridge) nommé mainbridge, taper la commande suivante dans la fenêtre de switch :

    ip link add name mainbridge type bridge 

    2.2 Pour rajouter 2 interfaces (eth0 et eth1) au pont, taper la commande suivante :

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

    2.3 Pour rendre opérationel le pont mainbridge (état up), taper la commande suivante

    ip link set up dev mainbridge
  3. 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, si les informations affichées sont relatives à l’interface locale : is local? = yes), depuis quand des trames ont transité.

    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

    Aucune communication n’a eu lieu. La commande demande d’afficher les adresses MACs connues : les adresses MACs des 2 interfaces du switch (00:00:00:00:00:b1 et 00:00:00:00:00:b2) s’affichent. La même ligne se répète deux fois car l’une des lignes correspond au VLAN1 utilisé pour des tâches administratives et configuré par défaut.

  4. Effectuer un ping entre pc1 et wserver

    Après ce ping, au contraire, on note (du fait qu’une trame aille de pc1 -> wserver et qu’une réponse de wserver-> pc1 soit envoyée en retour) que pc1 et wserver sont désormais visibles dans les tables du pont. Cette information disparaitra au 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
  5. Etablir une communication entre un client UDP (pc1) et un serveur UDP (wserver)

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

    Vous allez ensuite exécuter le code client sur pc1 et le code du serveur sur wserver.

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

    Ainsi, sur wserver, taper les commandes ci-dessous pour éditer le fichier server.py et rajouter le code du serveur UDP, rendre exécutable le fichier server.py et enfin exécuter le code server.py :

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

    Code pour le serveur UDP:

#/usr/bin/env/python3 
#Python UDP Listener, listening on localhost 50000, 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)	

Vous remarquerez que la dernière ligne dans le fichier ci-dessous doit être décommentée si vous voulez que le serveur renvoie une réponse au client.

**Important: pensez bien à lancer le serveur UPD avant de lancer le client UDP. **

De même sur pc1, taper les commandes suivantes : 
 ```
nano client.py
chmod +x client.py 
python3 client.py 
```


Code pour le client UDP :

```python
#/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))
```

Remarque : le code ci-dessus envoie à wserver (adresse ip 192.168.1.3 sur le port 50000) le message Hello World.

  1. Utiliser wireshark (et tcpdump) pour voir quels sont les messages qui sont échangés. Vous devez retouver des messages icmp (ping) et des messages UDP.

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

### Correction

La correction est disponible après le TP à l’adresse suivante : pont-correction.zip

Dans le fichier README, vous trouverez des explications liées à la correction.

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 :

Réseau

vous allez télécharger et deziper le fichier 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 de 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 permettent 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. Attention, si le menue qui apparait est un peu différent, vous devrez faire avec et

. Sélectionner l’option Choose default image en tapant 2 (comme indiqué ci-dessous, toutefois, sil le numéro correspondant n’est pas deux dans le menu qui apparait, taper le bon numéro) Réseau

. Sélectionner l’option kathara quagga en tapant 8 (comme indiqué ci-dessous, toutefois, sil le numéro correspondant n’est pas deux dans le menu qui apparait, taper le bon numéro) Réseau

. Sélectionner l’option exit en tapant 16 (comme indiqué ci-dessous, toutefois, sil le numéro correspondant n’est pas deux dans le menu qui apparait, taper le bon numéro) Réseau

Démarrage du Lab

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

kathara lstart

Votre objectif est maintenant de :

  1. configurer wserver puis pc3 qui ne sont pas configurés
  2. configurer r1 et r2

Pour vous aider, nous vous donnons des exemples dans ce qui suit. Ne les recopiez pas un exemple tel quel, il vous faut l’adapter/le modifier à vos cas.

Comment ajouter une route par défaut à un PC ?

Même des pcs 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. C’est le cas dans la commande ci-dessous qui stipule que le routeur 192.168.1.1 jour le rôle de gateway par défaut et donne ainsi un accès à n’importe quel réseau:

ip route add default via 192.168.1.1

La commande ci-dessous au contraire donne accès au réseau 192.168.1.0/24 seulement via la passerelle (gateway) 190.1.1.1

ip route add 192.168.1.0/24 via 190.1.1.1

Il est ainsi possible pour un pc de définir plusieurs passerelles avec chaque passerelle donnant accès à un réseau particulier.

Comment afficher les routes par défaut d’un PC ?

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.

Avertissement

Maintenant que vous savez comment ajouter un route sur un PC et comment afficher les routes, à vous maintenant de configurer wserver puis pc3 qui ne sont pas configurés et de vérifier que vos configurations sont bonnes !!! Une fois cela effectué, il vous reste encore à configurer r1 et r2, comme nous allons le voir ci-après

Comment configurer des routeurs?

Les routeurs sont dotés de logiciels pour construire leur table de routage. Voyons cela. Dans chaque routeur (r1 et puis ensuite faire la même chose pour r2), 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)

Nous allons nous cantonner dans un premier temps à effectuer une configuration statique (c’est-à-dire manuelle) des tables de routage de chaque 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 de chaque routeur. Le mot de passe à utiliser (pas très sécure…) est zebra. Les deux routeurs zebra sont maintenant opérationnels mais il vous reste à les configurer.

Comment configurer des routeurs zebra

Avertissement

Voici les principales étapes de configuration, suivies d'un exemple typique de configuration. Attention, ne tapez pas ces commandes telles quelles, il vous faut vous en inspirer et les adapter à votre cas pour configurer r1 et r2

Voici les principales étapes de configuration, suivies d’un exemple typique de configuration que vous ne recopirez pas tel quel.

  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 : zebra(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, dans l’exemple ci-dessous, nous slélectionnons eth0 :
    interface eth0
    • Configurez l’adresse IP (dans l’exemple ci-dessous, nous considérons l’adresse IP 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
    • Quittez la configuration de l’interface avec :
    quit
    • Vous pouvez ensuite continuer avec une autre interface ou mettre fin à la configuration en tapant la commande write pour que les configurations d’interface que vous avez effectuées deviennent opérationnelles et en tapant exit pour quitter le mode configuration :
    write
    end

Pour vous faciliter la tâche, voici un autre 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-if)# write
zebra(config)#end
Avertissement

Attention : dans l'exemple ci-dessus, 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. Maintenant que vous venez de comprendre de quelle manière vous pouvez configurer les interfaces d'un routeur, à vous de configurer les interfaces de vos routeurs r1 et r2.

Quelles sont les commandes de configuration importantes d’un routeur :

  • 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.

Quelles sont les commandes liées aux interfaces dans un routeur:

  • 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.
  • no ip address address/prefix : Supprime la configuration de l’adresse et du préfixe IPv4.

Comment configurer une route dans un routeur :

Avertissement

Il vous faut encore configurer une route au niveau du routeur r1 et une route au niveau du routeur r2 pour que les réseaux distants de chacun soient atteignables. En effet, au niveau de pc3, si vous tentez de faire un ping à pc1, vous verrez que cela ne marche pas.

Pour configurer des routes dans les routeurs r1 et r2, vous pouvez vous inspirer de l’exemple ci-dessous, dans lequel une route vers le réseau 10.59.0.0/24 passant par le prochain routeur (dont l’adresse IP la plus proche est 10.59.1.193) est ajoutée. Bien sur il vous faut dans votre cas adapter les code ci-dessous.

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

Quelles sont les commandes pour afficher des routes d’un routeur :

  • 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.

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

Test final

Tout est bien configuré ?

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

Si oui, bravo. Sinon, recommencez…

Bonne configuration !

La correction est disponible après le TP à l’adresse suivante : routage.zip

Dans le fichier README, vous trouverez des explications liées à la correction.

Pour aller plus loin : exercice portant sur un plan d’addressage

Comme dans la plupart des disciplines, il est important de sortir son crayon et son papier avant de réfléchir au déploiment d’un réseau. Une des étapes correspond à la définition du plan d’adressage du réseau : en fonction des équipement courants, des futurs extensions d’équipements, et de facilité de maintenance, l’opérateur réseau doit définir qu’elles seront les adresse réseaux des différentes entités d’une organisation.

La société Arcad’oke est spécialisée dans les bars d’arcade et de karaoké. Elle est présente dans plus de 15 pays et a ouvert, jusqu’à présent, 170 établissements ainsi que 4 entrepôts destinés au stockage et à la réparation des équipements. Chaque année, elle ouvre 15 nouveaux établissements à travers l’Europe.

Dans le cadre de son nouveau siège social, l’entreprise a décidé de revoir l’interconnexion entre ses différents sites et entrepôts en utilisant un VPN IP fourni par un fournisseur d’accès européen. La société utilise des adresses privées pour ses réseaux internes.

Siège social

Situé à Sophia Antipolis, le nouveau siège social est composé de trois bâtiments distincts hébergeant les différents services de l’entreprise.

Le premier bâtiment abrite :

  • Les bureaux de la direction (et leurs 45 équipements),
  • Le département marketing (et ses 12 équipements),
  • Les services de gestion des installations (et leurs 5 équipements),
  • Les services administratifs (et leurs 4 équipements),
  • Les services informatiques (et leurs 38 équipements),
  • Une salle serveurs (et ses 128 équipements).

Le deuxième bâtiment abrite le département comptabilité (et ses 12 équipements).

Le troisième bâtiment abrite :

  • Le département juridique (et ses 12 équipements),
  • Le département développement commercial (et ses 12 équipements),
  • Une seconde salle serveurs (et ses 64 équipements).

En plus de chaque VLAN dédié à chaque service, un VLAN est dédié au service de téléphonie sur IP (ToIP) de l’entreprise.

Bars

Chaque bar propose plusieurs salles de karaoké ainsi qu’une salle d’arcade. Les VLAN suivants sont disponibles :

  • Un VLAN général (pour jusqu’à 32 équipements),
  • Un VLAN pour les ordinateurs des employés (pour deux machines),
  • Un VLAN pour l’équipement de karaoké (pour jusqu’à 15 équipements),
  • Un VLAN pour les machines de la salle d’arcade (pour jusqu’à 40 équipements).

Les clients ont accès à un Wi-Fi gratuit, qui ne fait pas partie du réseau privé mais utilise l’accès Internet du fournisseur d’accès local. Entrepôts

Les entrepôts sont utilisés pour la réparation et le stockage des équipements de karaoké et d’arcade. Les VLAN suivants sont disponibles :

  • Un VLAN général (pour jusqu’à 32 équipements),
  • Un VLAN pour les ordinateurs des employés (pour deux machines),
  • Un VLAN pour un Wi-Fi sécurisé utilisé à des fins logistiques.

L’objectif est de proposer un plan d’adressage cohérent pour le routage du trafic interne de l’entreprise. Ce schéma d’adressage sera évalué selon trois critères :

  • La lisibilité des adresses, afin d’identifier facilement le réseau auquel elles appartiennent ;
  • La capacité à agréger facilement les préfixes réseau appartenant au même site ou ouverts au même groupe d’utilisateurs ;
  • La possibilité d’inclure de nouveaux réseaux dans le plan d’adressage sans remettre en question le principe de gestion.