IPsec High Availability with DPD

Dans cet article sur la haute disponibilité du protocole IPsec, nous allons détailler une des trois méthodes de stateless Failover: DPD (Dead Peer Detection).

2 types de Failover, les stateless qui ne permettent pas de connaitre l’état du tunnel, et les statefull qui utilisent 2 équipements redondants afin de connaitre a chaque instant, lequel est actif.

Les 3 méthodes de Stateless Failover sont les suivantes:

  • DPD (Dead Peer Detection)
  • IGP avec GRE over IPSEC
  • HSRP (Hot Standby Routing Protocol)

DPD – Dead peer detection

Dead Peer Detection (DPD) est une méthode pour détecter les peers qui ne répondent plus.
DPD est mis en place grâce aux keepalives avec la commande:

crypto isakmp keepalive seconds [retries] [periodic | on-demand]

seconds: Nombre de secondes entre les messages DPD (entre 10 et 3600)
retries: (Optionnel) Nombre de secondes entre les essais, si les DPD indiquent que le lien est DOWN (2 à 60)
Periodic: (Optional) messages envoyés à intervalles réguliers.
on-demand:(Optional) par défaut. les Retries sont envoyés à la demande.

Au niveau de la crypto map, nous allons spécifier 2 peer, un peer par défaut, ainsi qu’un peer de backup.

crypto map central 10 ipsec-isakmp
set peer 192.168.0.2 default
set peer 192.168.0.3

Le reste de la configuration du tunnel IPsec est identique à une configuration de base. ISAKMP, IPSEC, et Transform-set.. etc.

Voici un Lab Dynagen de démonstration pour la mise en place d’IPsec et de stateless Failover.
Topologie du LAB Dynagen
Dans le Lab, le WAN est représenté par un switch.
ipsec-highabailability-DPD

Configuration des routeurs
Fichier Dynagen

##################################################
# Author: Benoit GONCALVES
# Course: Implementing Secure Converged Wide Area Networks (ISCW)
# Version: 1.1
# Date: 24.12.2009
# Modified: 24.12.2009
##################################################
autostart = True

[localhost:7200]
[[7200]]

[[ROUTER A]]
image = c7200-adventerprisek9-mz.124-15.T6.bin
cnfg = A.txt
npe = npe-400
ram = 160
nvram = 256
mmap = False
console = 2002
# modules/slots
# cabling
F0/0 = S1 1

[[ROUTER B]]
image = c7200-adventerprisek9-mz.124-15.T6.bin
cnfg = B.txt
npe = npe-400
ram = 160
nvram = 256
mmap = False
console = 2003
# modules/slots
# cabling
F0/0 = S1 2
F0/1 = C F0/1

[[ROUTER C]]
image = c7200-adventerprisek9-mz.124-15.T6.bin
cnfg = C.txt
npe = npe-400
ram = 160
nvram = 256
mmap = False
console = 2004
# modules/slots
# cabling
F0/0 = S1 3

[[ETHSW S1]]
1 = access 1
2 = access 1
3 = access 1

config Router A

enable secret cisco
!
no ip domain lookup
ip http server
!
hostname A

crypto isakmp policy 1
	hash sha
	encryption 3des
	group 5
	authentication pre-share
	lifetime 1600

crypto isakmp key cisco address 192.168.0.2
crypto isakmp key cisco address 192.168.0.3

crypto isakmp keepalive 10 3

crypto ipsec transform-set to-central esp-3des esp-sha-hmac
	mode tunnel

access-list 100 permit host 192.168.0.1 host 192.168.0.2
access-list 100 permit host 192.168.0.1 host 192.168.0.3

crypto map central 10 ipsec-isakmp
	match address 100
	set peer 192.168.0.2 default
	set peer 192.168.0.3
	set transform-set to-central

interface f0/1
	ip add 10.10.1.1 255.255.255.0
	no shut

interface f0/0
	ip add 192.168.0.1 255.255.255.0
	crypto map central
	no shut

router rip
version 2
network 192.168.0.0
network 172.20.0.0

config Router B

enable secret cisco
!
no ip domain lookup
ip http server
!

hostname B

crypto isakmp policy 1
	hash sha
	encryption 3des
	group 5
	authentication pre-share
	lifetime 1600

crypto isakmp key cisco address 192.168.0.1

crypto ipsec transform-set to-remote esp-3des esp-sha-hmac
	mode tunnel

access-list 100 permit host 192.168.0.2 host 192.168.0.1

crypto map remote 10 ipsec-isakmp
	match address 100
	set peer 192.168.0.1
	set transform-set to-remote

interface f0/0
	ip add 192.168.0.2 255.255.255.0
	crypto map remote
	no shut

interface f0/1
	ip add 172.20.0.1 255.255.255.0
	no shut

router rip
version 2
network 192.168.0.0
network 172.20.0.0

config Router C

enable secret cisco
!
no ip domain lookup
ip http server
!

hostname C

crypto isakmp policy 1
	hash sha
	encryption 3des
	group 5
	authentication pre-share
	lifetime 1600

crypto isakmp key cisco address 192.168.0.1

crypto ipsec transform-set to-remote esp-3des esp-sha-hmac
	mode tunnel

access-list 100 permit host 192.168.0.3 host 192.168.0.1

crypto map remote 10 ipsec-isakmp
	match address 100
	set peer 192.168.0.1
	set transform-set to-remote

interface f0/0
	ip add 192.168.0.3 255.255.255.0
	crypto map remote
	no shut	

interface f0/1
	ip add 172.20.0.2 255.255.255.0
	no shut

router rip
version 2
network 192.168.0.0
network 172.20.0.0

Tests
Nous allons pinger l’interface LAN du central office sur le router B (172.20.0.1), depuis le routeur A. Ensuite, nous allons “shutter” l’interface f0/0 du routeur B, ce qui va faire tomber le tunnel IPsec. DPD va détecter le lien “DOWN” et au bout de 3 fois 10 essais, il va faire monter un nouveau tunnnel IPsec vers le routeur C pour atteindre l’interface F0/1 du routeur B (172.16.0.1).

A#ping 172.20.0.1 rep 100

Type escape sequence to abort.
Sending 100, 100-byte ICMP Echos to 172.20.0.1, timeout is 2 seconds:
!!!!!!...........!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 89 percent (89/100), round-trip min/avg/max = 64/164/324 ms

On fait tomber l’interface WAN du routeur B:

B(config)#int f0/0
B(config-if)#shutdown
B(config-if)#
*Dec 24 00:40:41.211: %LINK-5-CHANGED: Interface FastEthernet0/0, changed state to administratively down
*Dec 24 00:40:41.215: %ENTITY_ALARM-6-INFO: ASSERT INFO Fa0/0 Physical Port Administrative State Down

La crypto est remontée sur le routeur C:

C#sh cry isa sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id slot status
192.168.0.3     192.168.0.1     QM_IDLE           1001    0 ACTIVE

Benoit

Network engineer at CNS Communications. CCIE #47705, focused on R&S, Data Center, SD-WAN & Automation.

More Posts - Website

Follow Me:
TwitterLinkedIn

2 Comments

  1. Alex 24 décembre 2009

    Nice one.

    A quand l’article sur NFS/SSO ? ;)

  2. Benoit 24 décembre 2009

    J’y ai pensé mais je n’avais pas réussi à faire marcher SSO avec Dynagen lors de mes quelque tests,
    mais étant donnée que tu en parle, je vais essayer de le faire marcher et l’article devrait arriver d’ici quelques jours!

Comments are Disabled