0% ont trouvé ce document utile (0 vote)
1 vues9 pages

Itech

Le projet vise à concevoir et implémenter un réseau de campus résilient avec une architecture basée sur des commutateurs et des VLANs pour différents groupes d'utilisateurs. Il inclut des configurations détaillées pour le trunking, le VTP, le STP, et des tests de résilience pour valider la robustesse du réseau. Une partie du projet présente également un outil de supervision développé en Python pour simuler et surveiller le comportement du réseau.

Transféré par

osedjerabe7
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
1 vues9 pages

Itech

Le projet vise à concevoir et implémenter un réseau de campus résilient avec une architecture basée sur des commutateurs et des VLANs pour différents groupes d'utilisateurs. Il inclut des configurations détaillées pour le trunking, le VTP, le STP, et des tests de résilience pour valider la robustesse du réseau. Une partie du projet présente également un outil de supervision développé en Python pour simuler et surveiller le comportement du réseau.

Transféré par

osedjerabe7
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Projet : Infrastructure Résiliente d’un Campus

Conception et Implémentation

Équipe Réseau
1er juin 2026

Table des matières


1 Introduction et objectifs 2

2 Topologie du réseau 2

3 Détails de configuration réseau (A à Z) 2


3.1 Création des VLANs et trunking 802.1Q . . . . . . . . . . . . . . . . . . . 2
3.2 VTP (VLAN Trunking Protocol) . . . . . . . . . . . . . . . . . . . . . . . 3
3.3 STP (Spanning Tree Protocol) – Définition du Root Bridge . . . . . . . . . 3
3.4 Etherchannel entre SW1 et SW2 . . . . . . . . . . . . . . . . . . . . . . . . 4
3.5 Port security sur les ports utilisateurs . . . . . . . . . . . . . . . . . . . . . 4

4 Scénarios de test de résilience 4


4.1 Simulation de panne d’un lien – Convergence STP . . . . . . . . . . . . . . 4
4.2 Coupure d’un lien au sein de l’Etherchannel . . . . . . . . . . . . . . . . . 5
4.3 Débranchement d’un équipement non autorisé . . . . . . . . . . . . . . . . 5

5 Implémentation Python – Supervision et simulation avec Socket et Stream-


lit 5
5.1 Structure du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.2 Code complet (Python 3.9+) . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.3 Utilisation de l’outil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

6 Conclusion 9

1
1 Introduction et objectifs
Ce projet vise à concevoir et implémenter un réseau de campus robuste et résilient.
L’architecture repose sur des commutateurs (SW1, SW2, . . .), un serveur central fournis-
sant des services DNS, HTTP, DHCP et RADIUS, ainsi que des postes clients répartis
dans trois VLANs distincts :
— VLAN Administration : 4 PC
— VLAN Étudiants : 20 PC
— VLAN Professeurs : 7 PC
Les objectifs techniques incluent la mise en place de VLANs, du trunking 802.1Q, du
protocole VTP, de STP avec définition du pont racine, d’un Etherchannel entre SW1 et
SW2, ainsi que la sécurité des ports utilisateurs. Des scénarios de test sont définis pour
valider la résilience (panne de lien, coupure d’un lien Etherchannel, détection de maté-
riel non autorisé). La seconde partie du rapport détaille l’implémentation d’un outil de
supervision basé sur Python (bibliothèques socket et streamlit) permettant de simuler
et surveiller le comportement du réseau.

2 Topologie du réseau

SW1 (VTP Serveur, Root Bridge) ←→ (Etherchannel) ←→ SW2 (VTP


Client)
|
SW3, SW4, ... (VTP Client)
Serveur (DNS, HTTP, DHCP, RADIUS) connecté à SW1 (port trunk/mixte)
PCs Administration (VLAN 10), PCs Étudiants (VLAN 20), PCs
Professeurs (VLAN 30)
Figure 1 – Topologie logique du réseau de campus

Le cœur du réseau est formé par SW1 et SW2 reliés par un Etherchannel (deux ou
quatre liens agrégés). Tous les autres commutateurs (SW3, SW4, ...) sont reliés en étoile
ou en cascade selon les besoins. Le serveur central est attaché à SW1 via un port trunk
autorisant les VLANs nécessaires. Les postes clients sont répartis sur les ports d’accès des
différents switchs.

3 Détails de configuration réseau (A à Z)


Toutes les configurations sont données pour des commutateurs Cisco (IOS-like). Les
noms des VLANs et les identifiants sont :
— VLAN 10 : Administration
— VLAN 20 : Étudiants
— VLAN 30 : Professeurs
— VLAN 99 : Native (non utilisé pour le trafic utilisateur, recommandation sécurité)

3.1 Création des VLANs et trunking 802.1Q


Sur SW1 (configuration initiale) :

2
1 enable
2 configure terminal
3 vlan 10
4 name Administration
5 exit
6 vlan 20
7 name Etudiants
8 exit
9 vlan 30
10 name Professeurs
11 exit
12 vlan 99
13 name Native
14 exit
Listing 1 – Création des VLANs sur SW1
Sur les ports trunk (vers SW2, autres switchs et serveur) :
1 interface gigabitethernet 0/1
2 switchport trunk encapsulation dot1q
3 switchport mode trunk
4 switchport trunk native vlan 99
5 switchport trunk allowed vlan 10 ,20 ,30
6 end

Pour les ports d’accès des PC :


1 interface fastethernet 0/1
2 switchport mode access
3 switchport access vlan 10
4 spanning - tree portfast
5 end

3.2 VTP (VLAN Trunking Protocol)


SW1 est configuré en VTP Serveur, les autres switchs en clients. Domaine : CAMPUS.
1 # Sur SW1 ( serveur )
2 vtp mode server
3 vtp domain CAMPUS
4 vtp password securepass
5 vtp version 2
6
7 # Sur SW2 et autres ( client )
8 vtp mode client
9 vtp domain CAMPUS
10 vtp password securepass

Vérification : show vtp status.

3.3 STP (Spanning Tree Protocol) – Définition du Root Bridge


SW1 est défini comme racine primaire pour tous les VLANs.
1 spanning - tree vlan 1 -30 root primary
2 spanning - tree vlan 1 -30 priority 4096 # Optionnel , root primary le
fait automatiquement

Pour renforcer la résilience, on active PortFast et BPDUguard sur les ports d’accès :

3
1 interface range fastethernet 0/1 -24
2 spanning - tree portfast
3 spanning - tree bpduguard enable

3.4 Etherchannel entre SW1 et SW2


Agrégation de deux ports (GigabitEthernet 0/1-2) en mode LACP (ou PAgP). Nous
utilisons LACP actif.
1 # SW1
2 interface range gigabitethernet 0/1 -2
3 channel - group 1 mode active
4 channel - protocol lacp
5 exit
6 interface port - channel 1
7 switchport mode trunk
8 switchport trunk native vlan 99
9 switchport trunk allowed vlan 10 ,20 ,30
10
11 # SW2 ( m m e configuration )
12 interface range gigabitethernet 0/1 -2
13 channel - group 1 mode active
14 channel - protocol lacp
15 exit
16 interface port - channel 1
17 switchport mode trunk
18 switchport trunk native vlan 99
19 switchport trunk allowed vlan 10 ,20 ,30
Vérification : show etherchannel summary.

3.5 Port security sur les ports utilisateurs


Sur chaque port d’accès, limiter à une adresse MAC, avec violation shutdown (ou
restrict).
1 interface fastethernet 0/1
2 switchport mode access
3 switchport access vlan 10
4 switchport port - security
5 switchport port - security maximum 1
6 switchport port - security mac - address sticky
7 switchport port - security violation shutdown
8 end
En cas de violation, le port est désactivé. Réactivation manuelle ou via errdisable
recovery.

4 Scénarios de test de résilience


4.1 Simulation de panne d’un lien – Convergence STP
On débranche un lien redondant entre deux switchs non racines. Le protocole STP doit
recalculer la topologie et rétablir la connectivité en moins de 50 secondes (ou temps confi-
guré avec spanning-tree vlan 1-30 hello-time, forward-delay). Le test est réussi
si les pings entre PC de VLANs différents (via la racine) reprennent après la convergence.

4
4.2 Coupure d’un lien au sein de l’Etherchannel
L’Etherchannel SW1-SW2 utilise deux liens physiques. Si l’un des deux liens est dé-
branché, le trafic continue de transiter sur le lien restant sans interruption (aucune coupure
de flux ICMP). Vérifier avec show etherchannel 1 port-channel.

4.3 Débranchement d’un équipement non autorisé


Connecter un PC inconnu sur un port où la port-security est active. Le port passe
en état errdisable et le trafic est bloqué. L’événement est journalisé. La récupération
nécessite une intervention ou un timeout de récupération automatique.

5 Implémentation Python – Supervision et simulation


avec Socket et Streamlit
Cette section présente un outil de supervision complet développé en Python. Il utilise
deux bibliothèques :
— socket : pour recevoir des alertes en temps réel (simulation de syslog ou traps
SNMP) depuis les commutateurs.
— streamlit : pour créer un tableau de bord interactif affichant l’état du réseau
(VLANs, Etherchannel, root bridge, sécurité) et permettant de déclencher des tests
de panne simulés.
Le code est auto-suffisant et contient des fonctions de simulation (car dans un environne-
ment réel on interrogerait les équipements via SSH/SNMP, ici on émulte les événements
pour la démonstration).

5.1 Structure du code


Le programme se compose de :
1. Un serveur UDP basé sur socket écoutant sur le port 514 (syslog) et affichant les
messages reçus (violations de port security, changements STP, etc.).
2. Une application Streamlit qui :
— Affiche la configuration des VLANs, le root bridge (SW1), le statut de l’Ether-
channel.
— Permet d’injecter des événements simulés (panne de lien, coupure Etherchannel,
branchement non autorisé).
— Monte un graphique de l’état des ports et des alertes.
Les deux composants communiquent via une file d’attente interne ou via socket (l’interface
Streamlit peut envoyer des commandes au serveur). Par souci de clarté, nous fournissons
un seul script intégré exécutable avec Streamlit, et intégrons un thread serveur socket.

5.2 Code complet (Python 3.9+)


1 import streamlit as st
2 import socket
3 import threading
4 import time
5 import random

5
6 import pandas as pd
7 from datetime import datetime
8
9 # - - - - - - - - - - - - - - - - - - - Configuration r s e a u s i m u l e - - - - - - - - - - - - - - - - - - -
10 NETWORK_STATE = {
11 " root_bridge " : " SW1 " ,
12 " etherchannel " : { " status " : " UP " , " active_links " : 2 , " total_links " :
2} ,
13 " vlans " : {10: " Administration " , 20: " Etudiants " , 30: " Professeurs " } ,
14 " port_security " : {
15 " Gig0 /1 " : { " status " : " secure " , " violations " : 0} ,
16 " Fast0 /1 " : { " status " : " secure " , " violations " : 0} ,
17 " Fast0 /2 " : { " status " : " secure " , " violations " : 1 , " last_violation
" : " 2025 -02 -15 10:23:45 " }
18 },
19 " stp_topology " : " C o n v e r g e "
20 }
21

22 # File d ’ attente pour les alertes socket


23 alert_queue = []
24
25 # - - - - - - - - - - - - - - - - - - - Serveur Socket ( UDP ) pour r c e p t i o n d ’ alertes
-------------------
26 def udp_sy slog_ser ver ( port =514) :
27 " " " Simule un serveur syslog recevant des messages des switchs . " " "
28 sock = socket . socket ( socket . AF_INET , socket . SOCK_DGRAM )
29 sock . bind (( " [Link] " , port ) )
30 sock . settimeout (1.0)
31 st . toast ( f " Serveur UDP d m a r r sur le port { port } " , icon = " ")
32 while True :
33 try :
34 data , addr = sock . recvfrom (1024)
35 message = data . decode ( ’utf -8 ’)
36 timestamp = datetime . now () . strftime ( " %Y -% m -% d % H :% M :% S " )
37 alert_queue . append ( f " [{ timestamp }] { addr }: { message } " )
38 # Mise jour dynamique de l ’ tat si besoin
39 if " port - security violation " in message . lower () :
40 # Simuler la mise jour d ’ un compteur
41 for port in NETWORK_STATE [ " port_security " ]:
42 if port in message :
43 NETWORK_STATE [ " port_security " ][ port ][ " violations
" ] += 1
44 NETWORK_STATE [ " port_security " ][ port ][ "
last_violation " ] = timestamp
45 break
46 elif " etherchannel link down " in message . lower () :
47 NETWORK_STATE [ " etherchannel " ][ " active_links " ] = max (1 ,
NETWORK_STATE [ " etherchannel " ][ " active_links " ] -1)
48 if NETWORK_STATE [ " etherchannel " ][ " active_links " ] == 1:
49 NETWORK_STATE [ " etherchannel " ][ " status " ] = " D G R A D
"
50 elif NETWORK_STATE [ " etherchannel " ][ " active_links " ] == 0:
51 NETWORK_STATE [ " etherchannel " ][ " status " ] = " DOWN "
52 except socket . timeout :
53 continue
54 except Exception as e :
55 print ( f " Erreur socket : { e } " )
56

6
57 # Lancer le thread serveur UDP
58 threading . Thread ( target = udp_syslog_server , args =(514 ,) , daemon = True ) .
start ()
59
60 # - - - - - - - - - - - - - - - - - - - Fonctions de simulation de tests
-------------------
61 def s imu le r_ pan ne _l ien () :
62 " " " Simule une panne de lien redondant = > convergence STP . " " "
63 st . toast ( " Simulation : panne d ’ un lien redondant . Convergence
STP en cours ... " , icon = " ")
64 NETWORK_STATE [ " stp_topology " ] = " Recalcul en cours "
65 time . sleep (2) # Simule le temps de convergence
66 NETWORK_STATE [ " stp_topology " ] = " C o n v e r g e ( nouvelle topologie ) "
67 alert_queue . append ( f " [{ datetime . now () }] ALERTE STP : changement de
topologie d t e c t , convergence OK . " )
68 return True
69
70 def s i m u l e r _ c o u p u r e _ e t h e r c h a n n e l () :
71 " " " Simule la perte d ’ un lien dans l ’ Etherchannel . " " "
72 st . toast ( " Coupure d ’ un lien Etherchannel entre SW1 et SW2 " ,
icon = " ")
73 if NETWORK_STATE [ " etherchannel " ][ " active_links " ] > 1:
74 NETWORK_STATE [ " etherchannel " ][ " active_links " ] -= 1
75 if NETWORK_STATE [ " etherchannel " ][ " active_links " ] == 1:
76 NETWORK_STATE [ " etherchannel " ][ " status " ] = " D G R A D "
77 alert_queue . append ( f " [{ datetime . now () }] Etherchannel : lien
perdu , { NETWORK_STATE [ ’ etherchannel ’][ ’ active_links ’]} lien ( x ) actif (
s ) . Trafic maintenu . " )
78 else :
79 st . warning ( " Il ne reste qu ’ un lien , l ’ Etherchannel est d j
d g r a d .")
80 return True
81
82 def s i m u l e r _ a p p a r e i l _ n o n _ a u t o r i s e ( port ) :
83 " " " Simule la connexion d ’ un appareil non a u t o r i s sur un port . " " "
84 st . toast ( f " Tentative de connexion non a u t o r i s e sur le port
{ port } " , icon = " ")
85 if port in NETWORK_STATE [ " port_security " ]:
86 NETWORK_STATE [ " port_security " ][ port ][ " violations " ] += 1
87 NETWORK_STATE [ " port_security " ][ port ][ " status " ] = " errdisable "
88 alert_queue . append ( f " [{ datetime . now () }] Port - security violation
sur { port } - port d s a c t i v . " )
89 else :
90 # nouveau port
91 NETWORK_STATE [ " port_security " ][ port ] = { " status " : " errdisable " ,
" violations " : 1 , " last_violation " : datetime . now () . strftime ( " %Y -% m -% d
% H :% M :% S " ) }
92 return True
93
94 # - - - - - - - - - - - - - - - - - - - Interface Streamlit - - - - - - - - - - - - - - - - - - -
95 st . set_page_config ( page_title = " Supervision R s e a u R s i l i e n t " , layout = "
wide " )
96 st . title ( " Infrastructure R s i l i e n t e du Campus " )
97 st . markdown ( " ** Dashboard de supervision et tests de r s i l i e n c e ** " )
98
99 col1 , col2 = st . columns (2)
100
101 with col1 :

7
102 st . subheader ( " tat g n r a l ")
103 st . metric ( " Pont racine STP " , NETWORK_STATE [ " root_bridge " ])
104 st . metric ( " Topologie STP " , NETWORK_STATE [ " stp_topology " ])
105 st . metric ( " Etherchannel " , f " { NETWORK_STATE [ ’ etherchannel ’][ ’ status
’]} ({ NETWORK_STATE [ ’ etherchannel ’][ ’ active_links ’]}/{ NETWORK_STATE [ ’
etherchannel ’][ ’ total_links ’]} liens ) " )
106
107 st . subheader ( " VLANs c o n f i g u r s " )
108 vlan_df = pd . DataFrame ([{ " ID " : vlan , " Nom " : name } for vlan , name in
NETWORK_STATE [ " vlans " ]. items () ])
109 st . dataframe ( vlan_df , u se _ co n t ai n er _ w id t h = True )
110

111 with col2 :


112 st . subheader ( " Port Security " )
113 port_df = pd . DataFrame . from_dict ( NETWORK_STATE [ " port_security " ] ,
orient = " index " )
114 port_df . index . name = " Port "
115 st . dataframe ( port_df , u se _ co n t ai n er _ w id t h = True )
116
117 st . subheader ( " S c n a r i o s de test ( simulation ) " )
118 test_col1 , test_col2 , test_col3 = st . columns (3)
119 with test_col1 :
120 if st . button ( " Panne d ’ un lien redondant ( STP ) " ) :
121 s imu le r_ pan ne _l ien ()
122 st . rerun ()
123 with test_col2 :
124 if st . button ( " Coupure d ’ un lien Etherchannel " ) :
125 s i m u l e r _ c o u p u r e _ e t h e r c h a n n e l ()
126 st . rerun ()
127 with test_col3 :
128 port_choice = st . selectbox ( " Port cible " , options = list ( NETWORK_STATE [
" port_security " ]. keys () ) + [ " Fast0 /3 " , " Fast0 /4 " ])
129 if st . button ( " Appareil non a u t o r i s " ) :
130 s i m u l e r _ a p p a r e i l _ n o n _ a u t o r i s e ( port_choice )
131 st . rerun ()
132

133 st . subheader ( " Alertes temps r e l ( Socket UDP - port 514) " )
134 aler t_placeh older = st . empty ()
135 if alert_queue :
136 # Afficher les d e r n i r e s alertes dans l ’ ordre inverse ( plus
r c e n t e s en haut )
137 alerts_to_show = list ( reversed ( alert_queue [ -15:]) )
138 a lert_pla ceholder . text_area ( " D e r n i r e s alertes " , value = " \ n " . join (
alerts_to_show ) , height =200)
139 else :
140 a lert_pla ceholder . info ( " Aucune alerte r e u e pour le moment . Envoyez
un message UDP sur le port 514 pour tester . " )
141

142 st . markdown ( " ---" )


143 st . caption ( " " "
144 ** L g e n d e des tests de r s i l i e n c e :**
145 - STP : Convergence automatique a p r s panne ( simulation de d l a i ) .
146 - Etherchannel : Perte d ’ un lien physique le trafic continue .
147 - Port Security : Blocage i m m d i a t d ’ un quipement non a u t o r i s .
148 """)
Listing 2 – supervision_reseau.py - Outil de supervision avec Socket et Streamlit

8
5.3 Utilisation de l’outil
1. Installer les dépendances : pip install streamlit pandas
2. Exécuter le script : streamlit run supervision_reseau.py
3. Le serveur UDP tourne en arrière-plan. Pour envoyer une alerte réelle (depuis un
switch simulé), on peut utiliser la commande :
1 echo " port - security violation on Fast0 /1 " | nc -u - w1 localhost
514
2

4. Utiliser les boutons de l’interface pour déclencher les scénarios de panne. L’état du
réseau évolue en conséquence.

6 Conclusion
Le réseau de campus conçu répond aux exigences de segmentation (VLANs), de redon-
dance (Etherchannel, STP) et de sécurité (port security). Les scénarios de test montrent
la résilience : panne d’un lien sans impact global, maintien du trafic lors de la défaillance
d’un lien Etherchannel, et blocage des équipements non autorisés. L’outil de supervision
Python, combinant socket et Streamlit, permet de visualiser l’état en temps réel et d’in-
jecter des pannes pour valider le comportement. Cette approche professionnelle couvre
l’ensemble du cycle de conception, configuration et validation.

Vous aimerez peut-être aussi