Configurer la route par défaut en utilisant IPSLA

Table of Content

IP SLA a été inventé par Cisco. Cisco IOS IP SLA est à la base une technologie qui permet de mesurer les performances du réseau.
Ici, nous l'utiliserons non pas pour réaliser des mesures de performance, mais pour modifier la table de routage sur une modification d'état d'une route ou d'une interface (route ou interface UP/DOWN).

Toutes les commandes suivantes ont été testées sur un routeur cisco C892FSP-K9 avec comme rom, la c800-universalk9-mz.SPA.152-4.M6.bin.

Configuration des interfaces

rtr>en
Password: 
rtr#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
rtr(config)#interface gigabitEthernet 8
rtr(config-if)#description Primary link ISP1
rtr(config-if)#ip address 192.168.1.1 255.255.255.0
rtr(config-if)#exit
rtr(config-if)#
rtr(config)#interface gigabitEthernet 9
rtr(config-if)#description Primary link ISP2
rtr(config-if)#ip address 192.168.2.1 255.255.255.0
rtr(config-if)#exit

Je ne m'attarderai pas ici sur la configuration complete des interfaces, ce n'est pas l'objet. Je les ai indiqués uniquement pour la compréhension. L'acces à Internet se fait donc via les interface GI8 et GI9 du routeur, cf diagramme ci-dessous.

Diagramme1

Création du SLA:

Tester un accès à Internet et donc un défaut de service de l'ISP1:

Dans cet exemple, nous allons pinger le dns primaire de google. Si vous faites cela, il vaut mieux au préalable demander une autorisation. Vous n'aimeriez pas que quelqu'un face la même chose avec vos serveurs. Choisissez bien l'adresses que vous voulez pinger.

Si le ping ne fonctionne pas, cela veut dire que soit le DNS de google n'est plus joignable, soit il y a un probleme d'acces à internet (DNS de l'ISP, box en panne...), tout ceci, même si le lien entre la box et le routeur fonctionne parfaittement.

rtr(config)#ip sla 1
rtr(config-ip-sla)#icmp-echo 8.8.8.8 source-interface GigabitEthernet8
rtr(config-ip-sla)#frequency 5
rtr(config-ip-sla)#exit
rtr(config)#ip sla schedule 1 life forever start-time now

ip sla 1 = entre dans le mode de configuration d'IPSLA en définissant l'instance, ici 1

icmp-echo 8.8.8.8 source-interface GigabitEthernet8 = configuration de l'action désiré. ici, un ping sur 8.8.8.8 avec comme source Gi8

frequency 5 = toutes les 5 secondes, le ping sera lancé

ip sla schedule 1 life forever start-time now = définit quand IPSLA (ici, notre ping) doit commancer et quand il doit se terminer. Il doit commancer maintenant et ne jamais s'arrêter. Attention, le numero 1 n'est pas anodin, il definit l'instance qui est à démarer.

Tester un probleme de lien avec la box, modem:

rtr(config)#ip sla 1
rtr(config-ip-sla)#icmp-echo 192.168.1.254 source-interface GigabitEthernet8
rtr(config-ip-sla)#frequency 5
rtr(config-ip-sla)#exit
rtr(config)#ip sla schedule 1 life forever start-time now

Ici, ce sont les mêmes paramètres. Au lieu de pinger le DNS de google, nous pingons la box d'ISP1. Nous testons le lien entre le routeur et la box. Si le ping ne fonctionne pas, la box est en panne ou le câble est débranché ou altéré.

Création du trackers:

rtr(config)#track 1 ip sla 1

track 1 ip sla 1 = surveille l'instance 1 d'IPSLA. Telle que la commande est définie, le code retourné par IPSLA (OK/Non-OK) sera surveillé. c'est l'option par défaut.

Définition des routes par défaut:

Cas du test d'un acces à Internet:

rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1
rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.254 2
rtr(config)#ip route 8.8.8.8 255.255.255.255 192.168.1.254

ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1 = ce sera la route par défaut tant que le track 1 sera bon (OK)
ip route 0.0.0.0 0.0.0.0 192.168.2.254 2 = si le track 1 est Non-OK, la route par défaut disparait et celle-ci, pondérée par le 2 à la fin de la ligne, deviendra la route pour l'acces à Internet. L'instance à la fin de la ligne définit la priorité.
ip route 8.8.8.8 255.255.255.255 192.168.1.254 = je défini la route manulellement pour cette adresse. Cela permet de forcer le ping via l'interface voulu. Ici, GigabyteEthernet 8. Ceci même si la route pour internet (0.0.0.0) est définit via GigabyteEthernet 9 (192.168.2.254). Dès que le ping fonctionnera de nouveau, le tracker deviendra OK et la route pour internet redeviendra la permière ligne (celle avec le tracker 1)

Cas du probleme de lien avec la box:

rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1
rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.254 2

ici, pas besoin de définir une route pour atteindre la box. La box est directement branché à GI8.

Vérification du bon fonctionnement de notre configuration:

Vérification quand tout va bien sur Gi8:

Vérifions l'état de l'IPSLA:

rtr#sh ip sla summary 
IPSLAs Latest Operation Summary
Codes: * active, ^ inactive, ~ pending

ID           Type        Destination       Stats       Return      Last
                                           (ms)        Code        Run 
-----------------------------------------------------------------------
*1           icmp-echo     8.8.8.8         RTT=1       OK          3 seconds ago

Ici, nous pouvons voir:

  • l'instance (*1)
  • le type de test effectué (ping)
  • la destination du ping (8.8.8.8)
  • le temps mis pour recevoir le retour du ping (1ms)
  • le code retourné (OK)
  • le temps depuis la dernière exécution du dernier ping (3s).

Vérifions les routes:

rtr#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.1.1 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 192.168.1.1
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, GigabitEthernet8
L        192.168.1.1/32 is directly connected, GigabitEthernet8
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet9
L        192.168.2.1/32 is directly connected, GigabitEthernet9
....
      8.0.0.0/8 is subnetted, 1 subnets
S        8.8.8.8 [1/0] via 192.168.1.254

Quand Il y a un probleme sur la route utilisant Gi8:

Vérifions l'état de l'IPSLA:

rtr#sh ip sla summary 
IPSLAs Latest Operation Summary
Codes: * active, ^ inactive, ~ pending

ID           Type               Destination       Stats                  Return                        Last
                                                  (ms)                   Code                          Run 
--------------------------------------------------------------------------------------------------------------------
*1           icmp-echo           8.8.8.8          RTT=1         Socket set option erro            24 seconds ago

ici, la route est tombé depuis 24 secondes et le code de retour est en erreur.

Vérifions les routes:

rtr#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.2.1 to network 0.0.0.0

S*    0.0.0.0/0 [2/0] via 192.168.2.1
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, GigabitEthernet8
L        192.168.1.1/32 is directly connected, GigabitEthernet8
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet9
L        192.168.2.1/32 is directly connected, GigabitEthernet9
....
      8.0.0.0/8 is subnetted, 1 subnets
S        8.8.8.8 [1/0] via 192.168.1.254

Ici, nous voyons que la route vers le 0.0.0.0 (internet) a changé. La route n'est plus via 192.168.1.1, mais via 192.168.2.1. C'est la route avec l'instance 2 qui a pris le relais ([2/0]).
Les autres routes sont toujours en place car les interfaces fonctionnent encore. Cela indique un probleme chez le fournisseur d'acces (ISP1) ou un probleme sur le dns de google. Je vous laisse juger.

Voila, c'est tout pour aujourd'hui.

Référence:

Information sur Cisco IOS IP SLA (en anglais)
Analyse des performances d'un réseau grâce à IPSLA (en français)
Documents à partir desquels je me suis basé pour faire ce tutoriel:
Dual internet links NATing with PBR and IP SLA par Marwan ALshawi (en anglais)
Configuring Static Route Tracking using IP SLA (Basic) par un auteur inconnu (en anglais)