Со временем обрывки знаний и умений становится все труднее удержать в голове. Они расползаются по уголкам памяти заполняя все свободное место. Извлекать необходимое на свет становится все сложнее. Этот блог - рабочая записная книжка.

Tuesday, July 15, 2008

Запасной 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


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 интерфейса.

7 comments:

v0-v0 said...

Тут указано, что требуется 2 маршрутизатора, а как быть с ситуацией, если маршрутизатор один, но есть 2 канала, от 2-х разных провайдеров, и нужно обеспечить переподключение vpn при обрыве одного из 2-х?

Клиент имеет только один канал.

pablo said...

Зависит от того с какой стороны мы находимся. :)
Если речь идет о клиентской стороне, то можно попробовать посмотреть на ip sla, об этом последнее время только ленивый не писал (то есть я). :)
Если же задача в резервировании с серверной стороны, то здесь, боюсь, решений кроме BGP нет.

m0ps said...

ладно, тогда такой вопрос:
а если есть роутер Cisco 857 и резервный канал через gprs маршрутизатор (который сам устанавливает шифрованный gre туннель с основным офисом) как быть в этом случае?

v0-v0 said...

Спасибо, за ответ. Уточняю.
В центре 2 канала, от 2-х разных провайдеров. В филиале один канал.
В центре cisco2811 и настроена sla только, для работы локалки при отключении основного канала. Сейчас хочется поставить в Филиал тоже что-то похожее на cisco871. Настроить VPN по одному каналу у вас написанно как, а вот что делать, если основной канал откажет, а нужно что бы vpn был всегда?

pablo said...

2m0ps:
Не уверен, что правильно понял вопрос, но думаю стоит посмотреть на ip sla как у товарища в соседнем треде. :)

pablo said...

2v0-v0:
То есть задача в резервировании серверной стороны у которой два канала в интернет. В таком случае, думаю, Dead Peer Detection (DPD) это то что вам нужно.
Честно говоря руками не трогал, но по описанию очень похоже. :)

m0ps said...

2pablo
спасибо, почитал - действительно нужно ip sla копать