Vous êtes sur la page 1sur 4

Blog sur les technologies réseau et sécurité

Blog de Bastien Migette sur les technologies réseau et sécurité, particulièrement cisco.

IPSec Tunnel mode VS GRE over IPSEC (GREoIPSEC)


Petite mise au point sur la différence entre IPSEC tunnel mode, et Gre Over IPSEC, ainsi que comment configurer des tunnels
VPN site to site…

Introduction
La grande difference entre Gre over IPSEC et IPSEC Tunnel mode, est que GRE vas accepter d’autre type de traffic que IP et
va gérer le broadcast ainsi que le multicast. Lorsque l’on configure un tunnel GREoIPSEC, IPSEC sera en mode transport, car
les paquets IP vont être encapsulés en GRE, et IPSEC va transporter ces paquets GRE. IPSEC en mode tunnel fonctionnerait
aussi mais cela créérait une entête IP supplémentaire, ce qui, a part réduire la quantité de donnée dans le payload et augmenter
la charge des routeurs, ne présente aucun intérêt…

Nous considérons que le routage est déjà fait (je vais utiliser EIGRP)

Configuration Tunnel IPSEC


Configuration ISAKMP

Un tunnel IPSEC se monte en deux phase, appelées phases IKE. La phase 1 permet d’établir une session ISAKMP, qui va
utiliser diffie hellman pour échanger une clef afin de crypter les données transitant par ce tunnel ISAKMP.

La Phase 2 permets d’utiliser le tunnel ISAKMP afin d’échanger de manière sécurisée les paramètres pour le tunnel IPSEC.

Pour configurer ISAKMP, utiliser les commandes suivantes:

!activer ISAKMP
R1(config)#crypto isakmp enable
!Creer une politique ISAKMP: Plus petit est le nombre,
!plus prioritaire est la politique
!Il faut que les deux pair aient une politique avec les même paramètres
R1(config)#crypto isakmp policy 100
!DH Group 5
R1(config-isakmp)#group 5
!Chiffrement AES
R1(config-isakmp)#encryption aes
!Utiliser SHA pour l'auth
R1(config-isakmp)#hash sha
!Utilisation PSK
R1(config-isakmp)#authentication pre-share
R1(config-isakmp)#exit
!Renseigner le mot de passe pour la session ISAKMP pour le pair distant
R1(config)#crypto isakmp key 0 isakmpPassword address 80.0.0.2

Effectuer la même chose sur R2 (en remplaçant l’ip dans la commande crypto map isakmp key)

Configuration IPSEC

Trois étapes: Création d’un transform set, indiquant les protocoles de sécurité à utiliser: AH Pour l’authentification, ESP pour
le cryptage et/ou l’authentification. On peut utiliser AH, AH+ ESP ou ESP seulement.

Creation d’une access-list identifiant le traffic à chiffrer. Le traffic permit pas cette ACL sera chiffré dans le tunnel IPSEC, le
reste non…

Creation d’une crypto-map spécifiant le pair distant, le transform set, et l’access list.

Commandes Sur R1:


!Définition d'un transform set sans chiffrement
R1(config)#crypto ipsec transform-set AH_NO_ESP ah-sha-hmac
R1(cfg-crypto-trans)#exit
!Creation de l'ACL
R1(config)#ip access-list extended VPN
!uniquement le traffic entre mes 2 sites, à adapter selon ce qu'on veut chiffrer
R1(config-ext-nacl)#permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
R1(config-ext-nacl)#exit
!creation d'une crypto map pour ipsec + isakmp.
!Le numero 1 permets d'avoir plusieurs paramètes dans une même crypto map
!Cela permet d'avoir par exemple plusieurs tunnels depuis une interface car
!on ne peut avoir plus d'une crypto map par interface
R1(config)#crypto map VPNMAP 1 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
and a valid access list have been configured.
R1(config-crypto-map)#set peer 80.0.0.2
R1(config-crypto-map)#set transform-set AH_NO_ESP
R1(config-crypto-map)#match address VPN
R1(config-crypto-map)#exit
R1(config)#int S1/0
!application de la crypto map
R1(config-if)#crypto map VPNMAP
R1(config-if)#exit
*Mar 1 00:42:52.471: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON

Même chose sur R2 en changeant l’adresse IP du peer, et bien sur l’ACL (permutter source et destination)

Maintenant, si je fait un PING entre R1 et R2, en ayant bien les adresses sources des réseaux 192.168.1.0, le traffic vas être
sécurisé via IPSEC (utilisation de AH).
R1#ping
Protocol [ip]:
*Mar 1 00:38:54.215: %SYS-5-CONFIG_I: Configured from console by console
Target IP address: 192.168.2.1
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface: 192.168.1.1
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/24/36 ms
R1#

Capture AH+ESP

On remarque que les IP source et de destination sont celle du ping. Cela est du au fait que AH ne permet pas le tunneling, il
faut utiliser ESP:
R1(config)#crypto ipsec transform-set AH_ESP ah-sha-hmac esp-aes
R1(cfg-crypto-trans)#exit
R1(config)#crypto map VPNMAP 1 ipsec-isakmp
R1(config-crypto-map)#set transform-set AH_ESP

A faire aussi sur R2


Capture AH+ESP

On voit ici que ESP à encapsulé le paquet IP, et que les IP sources sont celles du tunnel.

Voila pour IPSEC Tunnel

GRE Over IPSEC


Penser à enlever la crypto map avant toute configuration
R1(config)#int s1/0
R1(config-if)#no crypto map VPNMAP

Création de l’interface tunnel:


R1(config)#interface tunnel 0
R1(config-if)#tunnel source S1/0
R1(config-if)#tunnel destination 80.0.0.2
R1(config-if)#ip address 192.168.0.1 255.255.255.252

Faire pareil sur R2 en changeant la destination et l’adresse ip (je vais utiliser 192.168.0.2 /30

Modifier EIGRP pour avoir les route passant par le tunnel:


!avant
R1#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 not set

80.0.0.0/8 is variably subnetted, 2 subnets, 2 masks


C 80.0.0.0/24 is directly connected, Serial1/0
D 80.0.0.0/8 is a summary, 01:11:47, Null0
192.168.0.0/30 is subnetted, 1 subnets
C 192.168.0.0 is directly connected, Tunnel0
C 192.168.1.0/24 is directly connected, Loopback1
D 192.168.2.0/24 [90/2297856] via 80.0.0.2, 01:08:04, Serial1/0

Modification (à faire également sur R2)


R1(config)#router eigrp 65000
R1(config-router)#no network 80.0.0.0 0.0.0.255
!*Mar 1 01:25:49.679: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 65000: Neighbor 80.0.0.2 (Serial1/0) is down: interface downw
R1(config-router)#network 192.168.0.0 0.0.0.3
R1(config-router)#exit

Après:
*Mar 1 01:27:08.151: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 65000: Neighbor 192.168.0.2 (Tunnel0) is up: new adjacency
R1#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 not set

80.0.0.0/24 is subnetted, 1 subnets


C 80.0.0.0 is directly connected, Serial1/0
192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.0.0/30 is directly connected, Tunnel0
D 192.168.0.0/24 is a summary, 00:01:56, Null0
C 192.168.1.0/24 is directly connected, Loopback1
D 192.168.2.0/24 [90/297372416] via 192.168.0.2, 00:00:45, Tunnel0
R1#

Capture d’un ping:

Capture d'un ping avec GRE

On a bien 2 entêtes IP. Créons un tunnel IPSec avec les mêmes commandes (l’access list fera un match sur le protocole gre,
étant donné que les paquets seront encapsulés par GRE avant d’ête envoyés dans IPSEC).
R1(config)#ip access-list extended VPNGRE
R1(config-ext-nacl)#permit GRE any any
R1(config-ext-nacl)#exit
R1(config)#crypto map VPNMAPGRE 1 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
and a valid access list have been configured.
R1(config-crypto-map)#set peer 80.0.0.2
!transform set créé précédement
R1(config-crypto-map)#set transform-set AH_ESP
R1(config-crypto-map)#match address VPNGRE
R1(config-crypto-map)#exit
R1(config)#int S1/0
R1(config-if)#crypto map VPNMAPGRE
R1(config-if)#exit
R1(config)#

Maintenant, je vais faire une capture du ping avec ip sec en mode tunnel, et en mode transport. Pour passer en mode transport,
taper ces commandes sur R1 et R2:

Enter configuration commands, one per line. End with CNTL/Z.


R1(config)#crypto ipsec transform-set AH_ESP ah-sha-hmac esp-aes
R1(cfg-crypto-trans)#mode transport
R1(cfg-crypto-trans)#^Z
R1#clear crypto sa

Mon ping fonctionne toujours

GRE ESP Mode tunnel

GRE ESP Mode transport

Evidemment, on ne peut vérifier s’il y a 1 ou 2 entêtes IP dans le payload, étant donné qu’il est chiffré par ESP.

Conclusion:
J’espère que la configuration de tunnels VPN site to site avec IPSEC est maintenant un jeu d’enfant. Une petite remarque
cepandant, si avec le tunnel ip sec j’avais mis un permit ip any any pour le match, il aurait fallu que je déclares des neighbor
unicast à EIGRP, IPSEC ne gérant pas le multicast.

Un petit lien aussi (en anglais) pour faire des tunnels VPN sans crypto map, si vous n’aimez pas ça: