Failover Vpn site à site (GRE + IPSec)

Ce document fournit une configuration pour les tunnels IPsec entre deux routeurs Cisco placés dans 2 sites distincts, entre deux réseaux locaux (lien site à site). Les configurations se feront sur des routeurs C892FSP-K9, avec comme rom, la c800-universalk9-mz.SPA.152-4.M6.bin. J’ai choisi de garder les box pour bénéficier des autres services fournis (TV et téléphone), cela influera un peu sur la configuration.

Pour bien comprendre ce que nous allons faire, voici la topologie du réseau:

Topologie reseau

Du côté Free, le routeur aura pour nom, Routeur2 et du côté Bouygues-SFR, le routeur aura pour nom Routeur1.

Le but du VPN est de faire en sorte que les 2 sites communiquent exactement comme si ils étaient directement reliés entre eux, de manière à ce que les 2 réseaux puissent êtres directement routés (et non passer par du NAT).

Voici donc à quoi ressemblera là topologie du réseau final:

Topologie reseau idealise 001La liaison directe entre les 2 routeurs se fera via les 2 réseaux (172.16.1.0/30 => SFR et 172 .16.2.0/30 => Bouygues). Ils symbolisent les liens que nous souhaitons créer avec les VPNs.

La mise en place des VPNs se fera en 3 phases:

  • Mise en place des Tunnels (GRE) entre les 2 sites (définition des interfaces virtuelles)
  • Mise en place du routage entre les 2 Réseaux locaux
  • Cryptage des tunnels.

Configuration des interfaces

Pas de difficulté particulière. Je le mets pour information.

Réseau1:

Nous allons d’abord configurer les interfaces Gi8, Gi9, Vlan1:


>en
#conf t
(config)#interface gi9
(config-if)#Description Lien secondaire Bouygues
(config-if)#ip address 192.168.2.100
(config-if)#ip nat outside
(config-if)#exit
(config)#

(config)#interface gi8
(config-if)#Description Lien primaire SFR
(config-if)#ip address 192.168.1.100
(config-if)#ip nat outside
(config-if)#exit
(config)#

(config)#interface vlan1
(config-if)#Description Reseau local
(config-if)#ip address 192.168.100.254
(config-if)#ip nat inside
(config-if)#exit
(config)#

Configurons maintenant les tunnels, interfaces virtuel tunnel 0 et 1:


>en
#conf t
(config)#interface Tunnel0
(config-if)#Description Lien Tunnel SFR
(config-if)#ip address 172.16.0.1 255.255.255.252
(config-if)#tunnel source 192.168.1.100
(config-if)#tunnel destination 78.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

(config)#interface Tunnel1
(config-if)#Description Lien Tunnel Bouygues
(config-if)#ip address 172.16.1.1 255.255.255.252
(config-if)#tunnel source 192.168.2.100
(config-if)#tunnel destination 78.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

La configuration d’un tunnel se fait de la même manière que pour une interface normale. Il faut seulement définir la source du tunnel (ip wan du routeur, ici 192.168.1.100 et 192.168.2.100) et la destination (l’adresse ip publique du site au bout du tunnel, ici 78.0.0.1).

Attention, les commandes « tunnel source » et « tunnel destination » fonctionneront uniquement dans des interfaces de type « interface tunnel x« .
Attention, nous sommes dans le réseau qui a 2 liens vers internet, nous connectons le réseau via 2 tunnels à 1 seul site distant. Donc 2 tunnels avec deux sources et une seul destination.

Réseau2:

Nous allons configurer les interfaces Gi9 et Vlan1:


>en
#conf t
(config)#interface gi9
(config-if)#Description Lien vers Internet
(config-if)#ip address 192.168.10.200
(config-if)#ip nat outside
(config-if)#exit
(config)#

(config)#interface vlan1
(config-if)#ip address 192.168.200.254
(config-if)#ip nat inside
(config-if)#exit
(config)#

Configurons maintenant les interfaces virtuel tunnel 0 et 1:

Ici, nous faisons l’inverse. Nous allons paramétrer 2 tunnels avec 1 source et 2 destinations.


>en
#conf t
(config)#interface Tunnel0
(config-if)#Description Lien Tunnel SFR
(config-if)#ip address 172.16.0.2 255.255.255.252
(config-if)#tunnel source 192.168.10.200
(config-if)#tunnel destination 109.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

(config)#interface Tunnel1
(config-if)#Description Lien Tunnel Bouygues
(config-if)#ip address 172.16.1.2 255.255.255.252
(config-if)#tunnel source 192.168.10.200
(config-if)#tunnel destination 128.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

Routage et accès à internet

Les interfaces sont configurées, mais pour l’instant, rien ne communique avec rien. Du fait que les routeurs sont derrières des box, les ip sur les interfaces WAN (Gi8 / Gi9) sont des ip locales non routables. Il faut donc mettre en place du nat pour que les machines derrière le routeur puissent accéder à internet. Nous allons voir ça maintenant.

Nat sur le réseau 1

Pourquoi nonat (pas de nat)? Parceque le trafique qui doit passer dans les tunnels ne doit pas être naté. Nous nous en assurerons en définissant les « deny« . Tout ce qui est « permit » sera autorisé et naté (ici, l’acces à internet), le reste ne sera pas autorisé car à la fin d’une access list, il y a toujour un deny implicit.

Définition de l’access list SFR-nonat :


>en
#conf t
(config)#ip access-list extended SFR-nonat
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.200.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.200.0 0.0.0.255 192.168.1.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.100.0 0.0.0.255 any
(config-ext-nacl)#exit
(config)#

Le « deny ip 192.168.100.0 0.0.0.255 192.168.200.0 0.0.0.255 » permet d’interdire le trafic pour les machines à destionation du réseau 192.168.200.0/24. Ce trafic passera par les tunnels et donc ne doit pas être autorisé sur cette interface. Cela revient à dire qu’il ne faut pas que le trafic soit natter.
Idem pour « deny ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255« .

Le « permit ip 192.168.200.0 0.0.0.255 192.168.1.0 0.0.0.255 » permet au réseau 2 (192.168.200.0/24) d’être natter pour avoir accès à la box SFR (192.168.1.1)
Le « permit ip 192.168.100.0 0.0.0.255 any » met en place le NAT pour le Vlan1 pour l’accès à internet.

Définition de l’access list Bouygues-nonat :


>en
#conf t
(config)#ip access-list extended Bouygues-nonat
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.200.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.200.0 0.0.0.255 192.168.2.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.100.0 0.0.0.255 any
(config-ext-nacl)#exit
(config)#

Le principe reste le même que pour l’access list SFR-nonat.

Activation du nat sur chaque interface :


>en
#conf t
(config)# ip nat inside source list SFR-nonat interface gi8 overload
(config)# ip nat inside source list Bouygues-nonat interface gi9 overload

Maintenant, nous allons mettre en place le failover et les routes qui vont biens.

Nat sur le réseau 2

Définition de l’access list Free-nonat :


>en
#conf t
(config)#ip access-list extended Free-nonat
(config-ext-nacl)#deny ip 192.168.200.0 0.0.0.255 192.168.100.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.200.0 0.0.0.255 192.168.1.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.200.0 0.0.0.255 192.168.2.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.200.0 0.0.0.255 any
(config-ext-nacl)#exit
(config)#

Activation du nat :


>en
#conf t
(config)# ip nat inside source list Free-nonat interface gi9 overload

Failover (Uniquement sur le réseau 1)

Nous allons utiliser IPSla pour réaliser le failover. IPSla va permettre de pinger une ip et en fonction du résultat, activera ou désactivera la route. Pour plus de détail, voir l’article que j’ai réaliser: Cliquer ici

IPSla pour le réseau 1 (nous ne configurerons que celui-ci):

ip sla 1
icmp-echo 8.8.8.8 source-interface GigabitEthernet8
frequency 5
ip sla schedule 1 life forever start-time now
!
track 1 ip sla 1
!
ip route 8.8.8.8 255.255.255.255 192.168.1.1

Routage

Réseau 1:


>en
#conf t
(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1
(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.254 2

ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1 = 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 KO, 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 (le 2) à la fin de la ligne définit la priorité.

Avec le changement de route vers internet, le tunnel changera.

Réseau 2:


>en
#conf t
(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.254

Rien de bien difficile.

Juqu’ici, nous avons configuré les interfaces, les tunnels, les routes et le failover. Avant de commencer à mettre en place le cryptage sur les tunnels, nous allons d’abord tester que ceux-ci sont fonctionnels et que le basculement entre les deux tunnels fonctionne.

Vérification des tunnels et du failover

Tout est déjà configuré et la route par défaut passe par SFR.


routeur1#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

Regardons l’état de nos interfaces:


routeur1#show ip interface brief 
Interface                  IP-Address      OK? Method Status                Protocol
GigabitEthernet0           unassigned      YES unset  up                    up
GigabitEthernet1           unassigned      YES unset  down                  down    
GigabitEthernet2           unassigned      YES unset  down                  down    
GigabitEthernet3           unassigned      YES unset  down                  down    
GigabitEthernet4           unassigned      YES unset  up                    up      
GigabitEthernet5           unassigned      YES unset  down                  down    
GigabitEthernet6           unassigned      YES unset  up                    up      
GigabitEthernet7           unassigned      YES unset  up                    up      
GigabitEthernet8           192.168.1.100   YES NVRAM  up                    up      
GigabitEthernet9           192.168.2.100   YES NVRAM  up                    up
NVI0                       unassigned      YES unset  administratively down down
Tunnel0                    172.16.0.1      YES NVRAM  up                    up
Tunnel1                    172.16.1.1      YES NVRAM  up                    down
Vlan1                      192.168.100.254 YES NVRAM  up                    up

Nous pouvons voir que les deux tunnels sont « up » au niveau du status mais que Tunnel 1 est « down » au niveau du protocole. C’est normal car la route par défaut emprunte une route via SFR. Le tunnel1 emprunte la route via Bouygues et donc ne peut pas utiliser la route par défaut. Celle-ci n’est pas active d’ou le protocol = down.

Que se passe-t-il si nous retirons le cable entre l’ONT et la box SFR (supression du lien entre la box et le fournisseur, SFR), la route SFR va tomber et celle de Bouygue va devenir up.


routeur1#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.254 to network 0.0.0.0

S*    0.0.0.0/0 [2/0] via 192.168.2.254

routeur1#show ip interface brief 
Interface                  IP-Address      OK? Method Status                Protocol
GigabitEthernet0           unassigned      YES unset  up                    up      
GigabitEthernet1           unassigned      YES unset  down                  down    
GigabitEthernet2           unassigned      YES unset  down                  down    
GigabitEthernet3           unassigned      YES unset  down                  down    
GigabitEthernet4           unassigned      YES unset  up                    up      
GigabitEthernet5           unassigned      YES unset  down                  down    
GigabitEthernet6           unassigned      YES unset  up                    up      
GigabitEthernet7           unassigned      YES unset  up                    up      
GigabitEthernet8           192.168.1.100   YES NVRAM  up                    up      
GigabitEthernet9           192.168.2.100   YES NVRAM  up                    up      
NVI0                       unassigned      YES unset  administratively down down    
Tunnel0                    172.16.0.1      YES NVRAM  up                    down      
Tunnel1                    172.16.1.1      YES NVRAM  up                    up    
Vlan1                      192.168.100.254 YES NVRAM  up                    up

La route et le tunnel actif ont changés. Si le status et le protocol du deuxième tunnel sont up, cela veux dire que le lien fonctionne. Pour le voir, il suffit de pinger l’autre bout du tunnel.


routeur1#ping 172.16.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max

Pour l’instant, tout ce qui passe par le tunnel n’est pas crypter. Nous allons maintenant mettre en place le cryptage.

Cryptage

Mise en place du cryptage dans le réseau 2 (Free)

Nous allons utiliser le cryptage IKE, aussi appelé ISAKMP qui est chargé de négocier les Associations de Sécurité (AS) entre deux appareils voulant communiquer.
ISAKMP sépare les négociations en deux phases: Phase 1 et Phase 2.

  • La Phase 1 crée le premier tunnel, qui protègera les futurs messages de négociation d’ISAKMP, Il s’agit de la politique IKE qui définit une méthode de chiffrement, la durée de vie, la méthode d’intégrité, etc.
  • La Phase 2 crée un tunnel qui protègera les données qui transitent entre les deux réseaux. Nous configurerons la politique de sécurité IPSec.

Phase 1: configuration de la politique IKE


(config)# crypto isakmp policy 1
(config-isakmp)# encr 3des
(config-isakmp)# authentication pre-share
(config-isakmp)# group 2
(config-isakmp)# exit

Création de clés pré-partagées

Nous définissons les clés pré-partagées : le mot de passe ainsi que les adresses IP du routeur distant avec lequel nous communiquons. Vous remarquerez ici que nous définissons 2 clés partagées car nous créons 2 tunels qui ont pour cible les adresse IP publiques du réseaux Bouygues-SFR.


(config)#  crypto isakmp key motdepasse address 128.0.0.1
(config)#  crypto isakmp key motdepasse address 109.0.0.1

Phase 2: configuration de la politique IPSEC

Nous définissons notre transform-set pour l’établissement d’une liaison IPSec SA. Elle aura pour nom « TSET ».


(config)# crypto ipsec transform-set TSET esp-3des esp-md5-hmac 
(cfg-crypto-trans)# mode tunnel

 

Voila, c’est tout pour aujourd’hui.

Référence:

Documentation Cisco sur IPSEC (en anglais)
Comparaison des différentes solution VPN pour Cisco (en anglais)
Vue d’ensemble d’ISAKMP (en anglais)
Scénarios VPN Site à Site (en anglais)
Configuring IPSec Network Security (en anglais)

Autres références intéressantes:

Easy VPN Server Avec DVTI (Dynamic Vpn Tunnel Interfaces) par Bastien Migette (en français)