Запасной VPN (ipsec failover high availability stateless)
0. Вводная
Думаю не нужно объяснять зачем это нужно и где применяется. Всё просто
- если для вас потеря vpn соединения критична и работа останавливается,
возможно стоит подумать о конфигурировании некоторой избыточности.
Основных подходов в данном случае два:
- отказоустойчивый узел из двух или более устройств при этом активным
является только одно устройство и данные о сессиях протокола более
высокого уровня не синхронизируются между устройствами (stateless);
- отказоустойчивый узел из двух или более устройств, активно только одно, данные о сессиях синхронизированы (stateful).
Как очевидно основное отличие между двумя подходами в том, что при
переключении с основного на резервное устройство и наборот текущие
сессии ipsec сбрасываются. Конечно ситуация отрабатывается протоколами
инкапсулироваными в ipsec пакеты, как tcp/udp, и скорее всего
произойдет только некоторое "замораживание" соединения. Из опыта могу
сказать, что задержка обычно немногим больше задержки возникающей при
создании нового туннеля. Для большинства приложений этого достаточно.
1. Схема
Шифрации подлежит трафик
10.10.200.0/24 <-> 10.10.1.0/24
10.10.100.0/24 <-> 10.10.1.0/24
2. Конфигурация
Удивительно, но процесс настройки оказался достаточно простым. Основой всего является протокол HSRP
(если словосочетание незнакомо, крайне рекомендую пройтись по ссылке) и
ipsec собственно. Я не буду вдаваться в нюансы настройки HSRP или
ipsec, для этого были написаны специальные заметки - HSRP, static ipsec . :)
По сути изменяется всего две команды.
В первую очередь необходимо добавить имя в конфигурацию hsrp
//конфигурация hsrp, добавлено имя
vpn0(config-if)#standby version 2
vpn0(config-if)#standby 100 ip 10.10.11.1
vpn0(config-if)#standby 100 priority 150
vpn0(config-if)#standby 100 preempt
vpn0(config-if)#standby 100 name vpn
Вторая
команда - при применении crypto map к интерфейсу указывается имя hsrp
группы которая будет обеспечивать отказоустойчивость.
//применение отказоустойчивого vpn
vpn0(config-if)#crypto map cr_outside redundancy vpn
В качестве дополнения приведу полную конфигурацию.
vpn0
Базовая конфигурация
crypto isakmp policy 200
encr aes
authentication pre-share
group 2
crypto isakmp key MyKey address 10.10.10.10
!
crypto ipsec transform-set ts-aes-sha esp-aes 256 esp-sha-hmac
!
crypto map cr_outside 200 ipsec-isakmp
set peer 10.10.10.10
set transform-set ts-aes-sha
match address 120
!
interface FastEthernet0/0
ip address 10.10.11.10 255.255.255.0
duplex auto
speed auto
standby version 2
standby 100 ip 10.10.11.1
standby 100 priority 150
standby 100 preempt
standby 100 name vpn
crypto map cr_outside redundancy vpn
!
access-list 120 permit ip 10.10.200.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.200.0 0.0.0.255
access-list 120 permit ip 10.10.100.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.100.0 0.0.0.255
encr aes
authentication pre-share
group 2
crypto isakmp key MyKey address 10.10.10.10
!
crypto ipsec transform-set ts-aes-sha esp-aes 256 esp-sha-hmac
!
crypto map cr_outside 200 ipsec-isakmp
set peer 10.10.10.10
set transform-set ts-aes-sha
match address 120
!
interface FastEthernet0/0
ip address 10.10.11.10 255.255.255.0
duplex auto
speed auto
standby version 2
standby 100 ip 10.10.11.1
standby 100 priority 150
standby 100 preempt
standby 100 name vpn
crypto map cr_outside redundancy vpn
!
access-list 120 permit ip 10.10.200.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.200.0 0.0.0.255
access-list 120 permit ip 10.10.100.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.100.0 0.0.0.255
vpn1
Совершенна идентична vpn0 за исключением адреса интерфейса и приоритета hsrp
crypto isakmp policy 200
encr aes
authentication pre-share
group 2
crypto isakmp key MyKey address 10.10.10.10
!
crypto ipsec transform-set ts-aes-sha esp-aes 256 esp-sha-hmac
!
crypto map cr_outside 200 ipsec-isakmp
set peer 10.10.10.10
set transform-set ts-aes-sha
match address 120
interface FastEthernet0/0
ip address 10.10.11.20 255.255.255.0
duplex auto
speed auto
standby version 2
standby 100 ip 10.10.11.1
standby 100 priority 101
standby 100 preempt
standby 100 name vpn
crypto map cr_outside redundancy vpn
access-list 120 permit ip 10.10.200.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.200.0 0.0.0.255
access-list 120 permit ip 10.10.100.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.100.0 0.0.0.255
client1
Простейшее из возможного
crypto isakmp policy 200
encr aes
authentication pre-share
group 2
crypto isakmp key MyKey address 10.10.11.1
!
crypto ipsec transform-set ts-aes-sha esp-aes 256 esp-sha-hmac
!
crypto map cr_outside 200 ipsec-isakmp
set peer 10.10.11.1
set transform-set ts-aes-sha
match address 120
interface FastEthernet0/0
ip address 10.10.10.10 255.255.255.0
duplex auto
speed auto
crypto map cr_outside
access-list 120 permit ip 10.10.200.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.200.0 0.0.0.255
access-list 120 permit ip 10.10.100.0 0.0.0.255 10.10.1.0 0.0.0.255
access-list 120 permit ip 10.10.1.0 0.0.0.255 10.10.100.0 0.0.0.255
3. Проверка
Проверялось
всё это хозяйство путем установки telnet сессии с маршрутизатора srv на
client1 и принудительной остановкой интерфейса FastEthernet0/0 на vpn0. Показательно, что сессия telnet при этом не разорвалась хотя "замерла" на примерно 10-15 секунд.
Также
необходимо обратить внимание на правильную маршрутизацию внутри vpn
рутеров, в моём случае это сделано с помощью простейшей конфигурации
ospf, подобной описанной в одной из прошлых заметок, однако можно использовать тот же hsrp с опцией трекинга outside интерфейса.