VPN Site à Site Cisco – Cisco


Avec la généralisation du dégroupage et de l’Adsl 2+, il est possibles d’accéder à très bas coût à des connexions internet proposant des débits montants relativement honnêtes (1mb/s). Grâce à ces débits il devient tout a fait envisageable à de petites PME/PMI possédant plusieurs sites, d’inter connecter les réseaux via un VPN. Cette solution est d’ailleurs de plus en plus plébiscité par les entreprises, principalement grâce à son coût très faibles, et les débits « élevés », surtout vis à vis des solutions vieillissantes tels que RNIS(Numéris).

Présentation du réseau utilisé

Pour la suite de l’article, nous utiliserons le le réseau WAN ci-dessous, constitué de 2 sites distants, possédant chacun :

  • un routeur Cisco, avec un IOS supportant les fonctions de cryptage (avec de préférence les module d’accélération de cryptage matériel pour les « anciennes » séries)
  • une connexion Internet (avec ip fixe)

2 Sites avec routeur
Site 1 : 172.16.1.0/24

  • Interface/Ip locale du routeur : FastEthernet 0 /172.16.1.254
  • Interface/Ip internet du routeur : Ethernet 0 / 82.1.1.1

Site 2 : 172.16.2.0/24

  • Interface/Ip locale du routeur : Ethernet 0 / 172.16.2.254
  • Interface/Ip internet du routeur : Ethernet 1 / 82.2.2.2

Schéma Idéalisé

Le but du VPN est de faire en sorte que les 2 sites communiquent exactement comme s’ils étaient directement reliés entre eux, et que les 2 réseaux
soient routés (pas de NAT).
VPN site-site idéal
La liaison direct entre les 2 routeurs (172.16.254.0/30)
symbolise le lien que l’on souhaite créer avec le VPN.

1.3 Schéma réel – Principe de mise en place

Dans la réalité il est évidement hors de question de connecter directement les 2 routeurs, puisque le but premier du VPN est justement de se passer d’une Ligne Spécialisée. Ce lien sera donc créé grâce à un tunnel crypté, qui permettra au 2 sites de communiquer entre eux de manière sécurisée. Pour cela, on créera des interfaces virtuelles, permettant de symboliser les 2 extrémités de ce tunnel.
VPN site à site Tunnel

La mise en place du VPN vas se fera donc en 3 phases :

  • Mise en place d’un Tunnel (GRE) entre les 2 sites (définition des interfaces virtuelles)
  • Cryptage de ce tunnel
  • Mise en place du routage entre les 2 Réseaux locaux.

2 Configuration du premier routeur

Soit la configuration standard suivante, permettant l’accès à internet (web) pour le Site 1 :

ip subnet-zero
!
interface FastEthernet0
 ip address 172.16.1.254 255.255.255.0
 ip nat inside
!
interface Ethernet0
 ip address 82.1.1.1 255.255.255.0
 ip access-group netin in
 ip access-group netout out
 ip nat outside
!
ip classless
ip route 0.0.0.0 0.0.0.0 Ethernet0 82.1.1.254
!
ip nat inside source list natlist interface Ethernet0 overload
!
ip access-list extended netin
 permit tcp any host 82.1.1.1 established
 permit udp any eq domain host 82.1.1.1
 permit tcp any eq www host 82.1.1.1 
 permit tcp any eq 443 host 82.1.1.1 
!
ip access-list extended netout
 permit udp host 82.1.1.1 any eq domain
 permit tcp host 82.1.1.1 any eq www
 permit tcp host 82.1.1.1 any eq 443
!
ip access-list extended natlist
 permit ip 172.16.1.0 0.0.0.255 any

 

2.1 Mise en place du Tunnel

Pour mettre en place le tunnel, créez l’interface virtuelle , puis
configurez la en spécifiant :

  • son adresse ip (ici 10.16.254.1)
  • à quelle interface physique elle est rattachée
  • vers quelle ip (internet) pointe l’autre bout du tunnel

Note : toutes commandes suivantes se font en mode de configuration global.

site1(config)#interface tunnel 2
site1(config-if)# ip address 10.16.254.1 255.255.255.252
site1(config-if)# tunnel source Ethernet0
site1(config-if)# tunnel destination 82.2.2.2

 

2.2 Cryptage du tunnel

Nous allons tout d’abord spécifier la manière d’authentification.  Dans notre cas, nous utiliserons une clef pré partagé:
note(1): nous numéroterons cette méthode « 2 » , puisque qu’il s’agira de la méthode utilisée pour authentifier le site 2.
note(2): l’option « lifetime » indique la durée de vie de l’authentification (en secondes).

site1(config)# crypto isakmp policy 2
site1(config-isakmp)# authentication pre-share
site1(config-isakmp)# lifetime 3600

Définition de la clef pré-partagée (en spécifiant l’ip de l’hôte avec qui celle sera utilisée, c’est à dire l’ip internet du second routeur)

site1(config)# crypto isakmp key ###MaClef### address 82.2.2.2

Sélection de l’algorithme de cryptage (DES, 56bits). Nous appellerons cette méthode de cryptage « transfdes ».
note : selon la puissance et les possibilités du routeur il est préférable de prendre des algorithmes de cryptage plus conséquents, tels de
3DES (esp-3des, 168bits) ou AES (esp-aes).

site1(config)# crypto ipsec transform-set transfdes esp-des

Nous allons maintenant créer une Access List qui vas sélectionner le trafic à crypter. Le tunnel IP encapsulant déjà tout le trafic dans des trames GRE, il suffit juste de sélectionner le trafic GRE entre les 2 routeurs. Nous appellerons cette Access List « cryptolist »:

site1(config)# ip access-list extended cryptolist
site1(config-ext-nacl)# permit gre host 82.1.1.1 host 82.2.2.2

Nous allons maintenant regrouper toutes ces informations dans une « carte de cryptage », que nous appellerons « cryptvpn ».
note : les lignes « set security-association lifetime » définissent la durée de vie d’une session crypté.

site1(config)# crypto map cryptvpn 2 ipsec-isakmp
site1(config-crypto-map)# set peer 82.2.2.2
site1(config-crypto-map)# set security-association lifetime kilobytes 102400
site1(config-crypto-map)# set security-association lifetime seconds 600
site1(config-crypto-map)# set transform-set transfdes
site1(config-crypto-map)# match address cryptolist

Il ne reste plus qu’a appliquer cette « carte » sur l’interface internet du routeur :

site1(config)# interface Ethernet0
site1(config-if)# crypto map cryptvpn

 

Routage entre les 2 sites

ATTENTION !!!
NAT et routage peuvent ne pas faire bon ménage lorsqu’ils sont tout deux appliqué sur le même routeur, si l’on y prends pas garde. Il est donc impératif de REJETER le trafic destiné au VPN dans les règles du NAT. Nous devrons donc insérer une règle rejetant ce trafic AVANT celle déjà existence, nous l’insérerons donc en 5° position (les autres règles commençant en standard à 10)

site1(config)# ip access-list extended natlist
site1(config-ext-nacl)# 5 deny ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255

Au final, l’Access List ressemblera à :

site1#sh access-lists natlist
Extended IP access list natlist
    5 deny ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255 (5790 matches)
    10 permit ip 172.16.1.0 0.0.0.255 any (97034 matches)

Afin que le routage puisse être effectué correctement, il est essentiel de rajouter une route statique vers le réseau distant.
On notera au passage que l’on indique bien l’ip virtuelle du tunnel pour le second routeur, et non l’ip internet.

site1(config)# ip route 172.16.2.0 255.255.255.0 Tunnel2 10.16.254.2

 

2.4 Sécurité du routeur

Si comme dans cet exemple, vous filtrez le trafic sur votre interface internet (ce qui est vivement recommandé), il est essentiel de laisser passer les paquets d’authentification et le tunnel lui même. On notera au passage qu’à ce stade, on ne permet pas du tout le protocole Gre, puisqu’à ce stade (lors de la vérification de l’ACL par le routeur), il est déjà encapsulé dans les trames cryptées (ESP).

site1(config)# ip access-list extended netin
site1(config-ext-nacl)# permit udp host 82.2.2.2 eq isakmp host 82.1.1.1 eq isakmp
site1(config-ext-nacl)# permit esp host 82.2.2.2 host 82.1.1.1

site1(config)# ip access-list extended netout
site1(config-ext-nacl)# permit udp host 82.1.1.1 eq isakmp host 82.2.2.2 eq isakmp
site1(config-ext-nacl)# permit esp host 82.1.1.1 host 82.2.2.2

3 Configuration du deuxième routeur

La configuration étant strictement la même sur le deuxième routeur (sauf bien sur les adresses sources et de destination),

voici donc la configuration complète pour le deuxième routeur :

ip subnet-zero
!
crypto isakmp policy 1
 authentication pre-share
 lifetime 3600
crypto isakmp key ###MaClef### address 82.1.1.1
!
crypto ipsec transform-set transfdes esp-des
!
crypto map cryptvpn 1 ipsec-isakmp
 set peer 82.1.1.1
 set security-association lifetime kilobytes 102400
 set security-association lifetime seconds 600
 set transform-set transfdes
 match address cryptolist
!
interface Tunnel1
 ip address 10.16.254.2 255.255.255.252
 tunnel source Ethernet1
 tunnel destination 82.1.1.1
!
interface Ethernet0
 ip address 172.16.2.254 255.255.255.0
 ip nat inside
!
interface Ethernet1
 ip address 82.2.2.2 255.255.255.0
 ip access-group netin in
 ip access-group netout out
 ip nat outside
 crypto map cryptvpn
!
ip default-gateway 82.2.2.254
ip classless
ip route 0.0.0.0 0.0.0.0 Ethernet1 82.2.2.254
ip route 172.16.1.0 255.255.255.0 Tunnel1 10.16.254.1
!
ip nat inside source list listnat interface Ethernet1 overload
!
ip access-list extended cryptolist
 permit gre host 82.2.2.2 host 82.1.1.1
!
ip access-list extended netin
 permit tcp any host 82.2.2.2 established
 permit udp any eq domain host 82.2.2.2
 permit tcp any eq www host 82.2.2.2
 permit tcp any eq 443 host 82.2.2.2
 permit udp host 82.1.1.1 eq isakmp host 82.2.2.2 eq isakmp
 permit esp host 82.1.1.1 host 82.2.2.2
!
ip access-list extended netout
 permit udp host 82.2.2.2 any eq domain
 permit tcp host 82.2.2.2 any eq www
 permit tcp host 82.2.2.2 any eq 443
 permit udp host 82.2.2.2 eq isakmp host 82.1.1.1 eq isakmp
 permit esp host 82.2.2.2 host 82.1.1.1
!
ip access-list extended listnat
 deny   ip 172.16.2.0 0.0.0.255 172.16.1.0 0.0.0.255
 permit ip 172.16.2.0 0.0.0.255 any

4 Vérifier le bon fonctionnement du VPN

Afin de vérifier le bon fonctionnement du VPN, plusieurs commandes sont à votre disposition :

En mode privilégié :

show crypto engine connections active : vous permet de voir les connexions cryptées actives :

site1#sh crypto engine connections active

  ID Interface            IP-Address      State  Algorithm           Encrypt  Decrypt
2002 Ethernet0            82.1.1.1        set    DES                     527        0
2005 Ethernet0            82.1.1.1        set    DES                       0      490

show crypto ipsec transform-set : vous permet de voir les différents types d’encodage actifs.

site1#sh crypto ipsec transform-set
Transform set transfdes: { esp-des  }
   will negotiate = { Tunnel,  },

show crypto ipsec transform-set : fourni une version plus détaillé que les 2 commandes citées plus haut.

site1#sh crypto ipsec sa
interface: Ethernet0
 (...)
     inbound esp sas:
      spi: 0x4A65829E(1248166558)
        transform: esp-des ,
        in use settings ={Tunnel, }
        conn id: 2005, flow_id: C1700_EM:5, crypto map: cryptvpn
        sa timing: remaining key lifetime (k/sec): (99130/563)
        IV size: 8 bytes
        replay detection support: N
        Status: ACTIVE

     outbound esp sas:
      spi: 0x3481731A(880898842)
        transform: esp-des ,
        in use settings ={Tunnel, }
        conn id: 2002, flow_id: C1700_EM:2, crypto map: cryptvpn
        sa timing: remaining key lifetime (k/sec): (99129/556)
        IV size: 8 bytes
        replay detection support: N
        Status: ACTIVE

show ip route : vous permet de vérifier les routes.

site1#sh ip route
Codes: 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

Gateway of last resort is 82.1.1.254 to network 0.0.0.0

     172.16.0.0/24 is subnetted, 3 subnets
S       172.16.2.0 [1/0] via 10.16.254.2, Tunnel2
C       172.16.1.0 is directly connected, FastEthernet0
     82.0.0.0/24 is subnetted, 1 subnets
C       82.1.1.0 is directly connected, Ethernet0
     10.0.0.0/30 is subnetted, 1 subnets
C       10.16.2.0 is directly connected, Tunnel2
S*   0.0.0.0/0 [1/0] via 82.1.1.254, Ethernet0

show ip access-lists : vous permet de vérifier le fonctionnement des différents Access Lists.

site1#sh ip access-lists
Extended IP access list cryptolist
    10 permit gre host 82.1.1.1 host 82.2.2.2
Extended IP access list netin
    10 permit tcp any host 82.1.1.1 established
    20 permit udp any eq domain host 82.1.1.1 (xxx matches)
    30 permit tcp any eq www host 82.1.1.1 (xxx matches)
    40 permit tcp any eq 443 host 82.1.1.1 (xxx matches)
    50 permit udp host 82.2.2.2 eq isakmp host 82.1.1.1 eq isakmp (18 matches)
    60 permit esp host 82.2.2.2 host 82.1.1.1 (573 matches)
Extended IP access list netout
    10 permit udp host 82.1.1.1 any eq domain (xxx matches)
    20 permit tcp host 82.1.1.1 any eq www (xxx matches)
    30 permit tcp host 82.1.1.1 any eq 443 (xxx matches)
    40 permit udp host 82.1.1.1 eq isakmp host 82.2.2.2 eq isakmp (16 matches)
    50 permit esp host 82.1.1.1 host 82.2.2.2 (461 matches)
Extended IP access list natlist
    5 deny   ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255 (461 matches)
    10 permit ip 172.16.1.0 0.0.0.255 any (xxx matches)

 

Le mot de la fin

Grâce au connexion internet d’aujourd’hui, la solution VPN est plus que viable, et permet à des entreprise de taille relativement petites d’accéder à des fonctionnalités avancées.
Néanmoins, la mise ne place du VPN demande de la rigueur, car il s’agit en fait de la combinaison de 3 technologies (cryptage, routage, firewalling), et si l’on y prête pas attention, on peut rapidement laisser de grosse failles de sécurités.

  1. Pas encore de commentaire.
(ne sera pas publié)