Nous allons configurer les 3 routeurs (R1, R2, R3) pour qu’ils deviennent des voisins OSPF.
Objectifs :
La configuration OSPF respectera les conventions simples suivantes :
- Tous les routeurs participent à OSPF
- Chaque routeur annonce tous ses liens directement connectés
- Tous les liens sont passifs par défaut à l’exception des liens inter-routeurs
- Désactiver l’interface passive uniquement sur l’interface qui parle OSPF
- Une seule zone OSPF 0 est utilisée
Exigences : Les messages HELLO d’OSPF sont envoyés à partir de l’interface actif e0/1 de nos routeurs. Les adresses IP de connexion SSH sont récupérées à partir d’un fichier texte IP_Addresses.txt.
Avant l’exécution du code :
On vérifie si les routeurs sont voisins avec la commande ‘show ip ospf neighbors’ :



D’après les sorties de commandes, les routeurs ne sont pas des voisins OSPF.
Dans le code, le nom d’utilisateur et le mot de passe sont donnés en clair, ici on s’intéresse seulement à la configuration OSPF mais il existe plusieurs façons de gérer les informations d’identification afin de garder leurs confidentialités.
Après Exécution du script :
Nous allons faire une vérification au niveau des routeurs :
On tape la commande ‘show run | s r o’



Et aussi ‘show ip ospf neighbors’:



On constate que l’exécution se déroule normalement et que les routeurs ont formé des voisins OSPF.
Voici le code avec quelques commentaires :
import paramiko
import time
#création d’une session ssh avec la librairie paramiko
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#Lecture du fichier contenant les adresses
f = open('IP_Addresses.txt', 'r')
address = f.read().splitlines()
#Récupération des différentes adresses
for ip in address:
ip = ip.strip()
router = {'hostname': ip, 'port': '22', 'username': 'SSHadmin', 'password': 'ciscossh123'}
print('Connexion sur '+ip)
#Etablissement de la connexion avec le routeur
ssh_client.connect(**router, look_for_keys=False, allow_agent=False)
shell = ssh_client.invoke_shell()
#Envoi des commandes à la session ouverte
shell.send('enable\n')
shell.send('sh version | i Cisco\n') #Vérification du type d’équipement
time.sleep(2)
sortie = shell.recv(10000).decode()
if "Cisco IOS Software" in sortie:
print('Configuration OSPF')
shell.send('conf t\n')
shell.send('router ospf 1\n')
shell.send('network 0.0.0.0 0.0.0.0 area 0\n')
shell.send('passive-interface default\n')
shell.send('no passive-interface e0/1\n')
shell.send('end\n')
shell.send('terminal length 0\n')
shell.send('sh ip protocols\n') #Pour vérifier si OSPF est activé
time.sleep(2)
output = shell.recv(10000).decode()
print(output) #Affiche les sorties de commandes
else:
print("Ce n'est pas un routeur!!!")
if ssh_client.get_transport().is_active() == True:
print('Fermeture de connexion!!!')
ssh_client.close()
Le script utilise une liste d’adresses IP des routeurs à configurer.
Le script récupère d’abord une adresse IP d’un routeur dans le fichier IP_Addresses.txt, ensuite il s’y connecte. Dès que la connexion est établi, l’ensemble des commandes sont transmises vers le routeur qui les exécute une à une. Le même processus se répète sur les autres routeurs à travers l’utilisation d’une boucle for. Et à chaque routeur on vérifie si le protocole OSPF est actif.
Remarque : Vous constaterez sur le code que l’on vérifie à chaque fois s’il s’agit réellement d’un routeur ou pas. En effet cela est dû au fait que le fichier contient des adresses IP de différents types d’équipements.