Построение отказоустойчивого решения с динамической маршрутизацией схемы Site-to-Site

Скачать в формате PDF

 

Настоящий документ содержит описание способа совместного использования Продуктов компании ООО

«С-Терра СиЭсПи» и Продуктов третьих производителей.

ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов.

Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.

Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах

только после тестовой и/или опытной эксплуатации.

 

Описание стенда

Сценарий иллюстрирует построение защищенного соединения между двумя подсетями. SN1: 192.168.0.0/24 – защищается парой шлюзов безопасности GW01 и GW02, объединенными в кластер № 1; SN2: 192.168.1.0/24 – защищается парой шлюзов безопасности GW03 и GW04, также объединенными в кластер № 2. Устройства IPHost1 и IPHost2 могут общаться между собой по защищенному каналу (VPN). Отказоустойчивость кластеров реализована с помощью протокола VRRP. Передача маршрутной информации от одного кластера к другому обеспечивается протоколом OSPF. Также будет использоваться протокол GRE для передачи multicast трафика OSPF.

В рамках данного сценария для аутентификации партнеры будут использовать сертификаты. В качестве криптопровайдера будет использована криптографическая библиотека, разработанная компанией «С-Терра СиЭсПи». Шлюзы безопасности – «С-Терра Шлюз 4.2».

Параметры защищенного соединения:

Параметры протокола IKE:

·         Аутентификация при помощи цифровых сертификатов, алгоритм подписи – ГОСТ Р 34.10-2012;

·         Алгоритм шифрования – ГОСТ 28147-89 (ключ 256 бит);

·         Алгоритм вычисления хеш-функции – ГОСТ Р 34.11-2012 ТК26 (ключ 256 бит);

·         Алгоритм выработки общего ключа (аналог алгоритма Диффи-Хеллмана) – VKO_GOSTR3410_2012_256 (ключ 256 бит).

Параметры протокола ESP:

·         Комбинированный алгоритм шифрования и имитозащиты (контроль целостности) – ESP_GOST-4M-IMIT (ключ 256 бит).

Схема стенда (Рисунок 1).

Рисунок 1

Логика работы отказоустойчивого решения

Шлюзы GW01 и GW02 будут объединены в кластер № 1, GW03 и GW04 в кластер № 2. При использовании протокола VRRP шлюзы каждого кластера имеют разделяемый виртуальный адрес (Virtual IP, см. Рисунок 1) в защищаемом сегменте сети (SN1, SN2) и публичном (PUB1, PUB2). Один из шлюзов является главным (MASTER), а второй – второстепенным (BACKUP). В один момент времени виртуальный адрес может быть только на шлюзе, который находится в состоянии MASTER. Трафик, идущий на виртуальный адрес, обрабатывает MASTER. Если по причинам, описанным ниже, главный шлюз становится недоступным, его состояние меняется с MASTER на FAULT, состояние второстепенного шлюза меняется с BACKUP на MASTER, и второстепенный шлюз продолжает заниматься обработкой трафика. При возвращении «в строй» главного шлюза, трафик снова будет обрабатываться на нем. Обнаружение недоступности шлюза, находящегося в состоянии MASTER, происходит благодаря обмену служебными пакетами протокола VRRP.

Стенд отрабатывает следующие типы отказов:

·         отключение питания;

·         выход из строя аппаратной платформы;

·         отказ сетевого интерфейса;

·         отказ порта на коммутационном оборудовании;

·         отказ сервиса отвечающего за шифрование трафика.

Логика работы динамической маршрутизации

Динамическая маршрутизация позволяет избавиться от ручного добавления маршрутов для защищаемых подсетей, а использование протокола GRE – от переконфигурирования настроек безопасности на шлюзах. Так как политика шифрования настроена таким образом, что под шифрование попадает только GRE трафик, то в случае добавления новой защищаемой подсети за шлюзом, необходимо всего лишь внести незначительные изменения в конфигурацию OSPF.


 

Настройка стенда

Важно! На портах коммутатора (не изображены на схеме), к которым подключаются сетевые интерфейсы нод кластера, на которых включен VRRP, должен быть включен режим portfast. В противном случае могут происходить потери gARP пакетов от ноды в состоянии MASTER.

Настройка шлюза безопасности GW01

Начальная настройка шлюза в S-Terra administrative console при первом включении состоит из следующих действий:

·         Пройдите процедуру аутентификации (пользователь по умолчанию – administrator, пароль по умолчанию – s-terra).

·         Пройдите процедуру инициализации (команда initialize).

·         Активируйте политику драйвера по умолчанию (команда run csconf_mgr activate).

·         Команда run csconf_mgr activate применяет текущую политику драйвера. При первичной настройке шлюза применится политика драйвера по умолчанию, при которой прохождение трафика не блокируется.

·         Для доступа через SSH установите пароль на пользователя root (команда run passwd).

Более подробно консоль разграничения доступа S-Terra administrative console описана в документации (http://doc.s-terra.ru/g42_init_cons).

Настройка интерфейсов

IP-адреса для интерфейсов рекомендуется настроить через cisco-like консоль.

1.    Для входа в консоль запустите cs_console:

root@sterragate:~# cs_console

sterragate>en

Password:

Пароль по умолчанию: csp.

2.    Перейдите в режим настройки:

sterragate#conf t

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

3.    В настройках интерфейсов задайте IP-адреса:

sterragate(config)#interface GigabitEthernet 0/0

sterragate(config-if)#ip address 10.0.1.2 255.255.255.0

sterragate(config-if)#no shutdown

sterragate(config-if)#exit

sterragate(config)#interface GigabitEthernet 0/1

sterragate(config-if)#ip address 192.168.0.1 255.255.255.0

sterragate(config-if)#no shutdown

sterragate(config-if)#exit

4.    Задайте адрес шлюза по умолчанию:

sterragate(config)#ip route 0.0.0.0 0.0.0.0 10.0.1.1

5.    Выйдите из cisco-like интерфейса:

sterragate(config)#end

sterragate#exit

Дальнейшую настройку можно проводить через SSH подключение.

Важно! Среда передачи в этом случае должна быть доверенной. Описание создания доверенной среды описано в соответствующей инструкции.

Регистрация CA сертификата (сертификата УЦ)

В данном сценарии для аутентификации будут использоваться сертификаты. Для этого необходимо зарегистрировать сертификат CA (УЦ) и локальный сертификат для шлюза GW01.

Для регистрации CA сертификата (сертификата УЦ) необходимо выполнить следующие действия:

1.    Подключитесь по SSH к шлюзу.

2.    Установите правильное системное время.

Например:

root@sterragate:~# date -s "01/31/2017 15:00"

Tue Jan 31 15:00:00 MSK 2017

Данная запись соответствует 31 января 2017 года 15:00.

В данном случае формат даты указывается в виде месяц/день/год (ММ/ДД/ГГГГ).

Для автоматической настройки правильного времени рекомендуется настроить NTP-клиент по соответствующей инструкции.

3.    Создайте папку /certs:

root@sterragate:~# mkdir /certs

4.    Перенесите доверенный сертификат УЦ на шлюз.

Способы передачи данных на шлюз описаны в документации (http://doc.s-terra.ru/g42_files)

5.    С помощью утилиты cert_mgr зарегистрируйте сертификат в базе продукта:

root@sterragate:~# cert_mgr import -f /certs/ca.cer -t

1 OK C=RU,O=S-Terra,CN=RootCA

Ключ -t в данной команде указывает на то, что импортируемый сертификат – доверенный сертификат УЦ.

Регистрация локального сертификата

Для регистрации локального сертификата в базе продукта выполните следующие действия:

1.    Сформируйте запрос на сертификат при помощи утилиты cert_mgr:

root@sterragate:~# cert_mgr create -subj "C=RU,O=S-Terra CSP,OU=Research,CN=GW01" -GOST_R341012_256 -fb64 /home/gw_req

·         Ключ -subj <DN> задает поля сертификата.

·         Ключ -GOST_R341012_256 предполагает использование ГОСТ Р 34.10-2012. На УЦ для его поддержки должно быть установлено СКЗИ «КриптоПро CSP» версии 4.0 или новее. При необходимости, есть возможность использовать старый алгоритм (ГОСТ Р 34.10-94), который задается ключом -GOST_R3410EL.

·         Ключ -fb64 <путь до файла> позволяет сохранить запрос в файл по указанному пути.

2.    Передайте полученный запрос сертификата на УЦ. Процедура выдачи сертификата на УЦ по запросу описана в документации (http://doc.s-terra.ru/g42_get_cert).

3.    Зарегистрируйте локальный сертификат в базе продукта, применив утилиту cert_mgr:

root@sterragate:~# cert_mgr import -f /certs/GW01.cer

1    OK C=RU,O=S-Terra CSP,OU=Research,CN=GW01

4.    Убедитесь, что сертификаты импортированы успешно:

root@sterragate:~# cert_mgr show

Found 2 certificates. No CRLs found.

1 Status: trusted C=RU,O=S-Terra,CN=RootCA

2 Status: local   C=RU,O=S-Terra CSP,OU=Research,CN=GW01

Создание политики безопасности

После регистрации сертификатов необходимо создать политику безопасности для GW01. Создавать политику рекомендуется в интерфейсе командной строки. Для входа в консоль запустите cs_console:

1.    Для входа в консоль запустите cs_console:

root@GW01:~# cs_console

sterragate>enable

Password:

Пароль по умолчанию: csp.

Важно: пароль по умолчанию необходимо сменить.

2.    Перейдите в режим настройки:

sterragate#configure terminal

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

3.    Смените пароль по умолчанию:

sterragate(config)#username cscons password <пароль>

4.    Смените название шлюза:

sterragate(config)#hostname GW01

5.    Задайте тип идентификации:

GW01(config)#crypto isakmp identity dn

В данном сценарии для идентификации будет использоваться поле DN сертификата.

6.    Задайте параметры DPD (dead peer detection):

GW01(config)#crypto isakmp keepalive 10 2

GW01(config)#crypto isakmp keepalive retry-count 5

Если в течение 10 секунд отсутствует входящий трафик в IPsec туннеле, то с интервалом в 2 секунды посылается 5 keepalive-пакетов в IKE туннеле, чтобы удостовериться в работоспособности туннеля. Если партнер не отвечает на keepalive-пакеты, то существующий IKE туннель переходит в состояние disabled, а связанные с ним IPsec туннели удаляются. В случае наличия исходящего трафика происходит попытка создать новый IKE туннель.

7.    Задайте параметры для протокола IKE:

GW01(config)#crypto isakmp policy 1

GW01(config-isakmp)#authentication gost-sig

GW01(config-isakmp)#encr gost

GW01(config-isakmp)#hash gost341112-256-tc26

GW01(config-isakmp)#group vko2

GW01(config-isakmp)#exit

8.    Задайте параметры для IPsec:

GW01(config)#crypto ipsec transform-set TSET esp-gost28147-4m-imit

GW01(cfg-crypto-trans)#exit

9.    Опишите трафик, который планируется защищать. Для этого создайте расширенный список доступа:

GW01(config)#ip access-list extended LIST

GW01(config-ext-nacl)# permit gre host 10.0.1.10 host 20.0.1.10

GW01(config-ext-nacl)#exit

10.  Создайте крипто-карту:

GW01(config)#crypto map CMAP 1 ipsec-isakmp

GW01(config-crypto-map)#match address LIST

GW01(config-crypto-map)#set transform-set TSET

GW01(config-crypto-map)#set peer 20.0.1.10

GW01(config-crypto-map)#exit

11.  Привяжите крипто-карту к интерфейсу, на котором находится IP-адрес из публичной сети:

GW01(config)#interface GigabitEthernet 0/0

GW01(config-if)#crypto map CMAP

GW01(config-if)#exit

12.  Настройте получение списка отозванных сертификатов (CRL) по HTTP:

GW1(config)#crypto pki trustpoint s-terra_technological_trustpoint

GW1(ca-trustpoint)#crl download group GROUP http://10.0.221.179/certsrv/certcrl.crl

GW1(ca-trustpoint)#exit

Предполагается, что CRL выкладывается на общедоступное место (доступ к которому обеспечен без использования IPsec) для всех шлюзов. При указании имени домена, вместо IP-адреса, необходимо настроить адрес DNS-сервера в системном файле /etc/resolv.conf.

Также необходимо учитывать, что у CRL есть срок действия и нужно обеспечивать своевременное их обновление в данном общедоступном месте.

По умолчанию CRL будет запрашиваться раз в сутки (раз в 1440 минут), для изменения интервала запросов можно воспользоваться командой crl download time <интервал в минутах>.

При необходимости отключения CRL (не рекомендуется отключать CRL) воспользуйтесь командой revocation-check none.

13.  Настройка устройства GW1 в cisco-like консоли завершена. При выходе из конфигурационного режима происходит загрузка конфигурации:

GW1(config)#end

GW1#exit

Настройка GRE

GRE интерфейс будет использоваться для маршрутизации трафика из защищаемых сетей (SN1, SN2) и для передачи multicast трафика протокола OSPF. Для настройки GRE-интерфейса выполните пункты ниже.

1.    Укажите point-to-point IP – адреса для туннеля (виртуальные адреса кластера №1 и № 2):

root@GW01:~# ip tunnel add gre1 mode gre local 10.0.1.10 remote 20.0.1.10 ttl 255

            Примечание: gre1 – это название GRE интерфейса

1.    Укажите IP – адрес и маску подсети GRE интерфейса:

root@GW01:~# ip addr add 172.16.100.1/30 dev gre1

2.    Задайте значение MTU:

root@GW01:~# ip link set gre1 mtu 1400

3.    Переведите интерфейс в рабочее состояние:

root@GW01:~# ip link set gre1 up

4.    Чтобы после перезагрузки шлюза настройки GRE интерфейса сохранялись нужно в директории /etc/network/if-up.d/ создать скрипт-файл с именем gre1:

root@GW01:~# vim.tiny /etc/network/if-up.d/gre1

Со следующим содержимым:

#!/bin/bash

ip tunnel add gre1 mode gre local 10.0.1.10 remote 20.0.1.10 ttl 255

ip addr add 172.16.100.1/30 dev gre1

ip link set gre1 up

ip link set gre1 mtu 1400

Также необходимо дать право на исполнение

root@GW01:~# chmod +x /etc/network/if-up.d/gre1

Настройка VRRP

Для настройки VRRP выполните пункты ниже.

1.    Настройки в Cisco-like консоли:

GW1(config)#interface GigabitEthernet 0/1

GW1(config-if)#vrrp 51 ip 192.168.0.10 255.255.255.0

GW1(config-if)#vrrp 51 priority 100

GW1(config-if)#vrrp 51 timers advertise 3

GW1(config-if)#vrrp 51 timers garp 5

GW1(config-if)#exit

GW1(config)#interface GigabitEthernet 0/0

GW1(config-if)#vrrp 52 ip 10.0.1.10 255.255.255.0

GW1(config-if)#vrrp 52 priority 100

GW1(config-if)#vrrp 52 timers advertise 3

GW1(config-if)#vrrp 52 timers garp 5

GW1(config-if)#exit

GW1(config)#vrrp ip route 20.0.1.0 255.255.255.0 10.0.1.1 src 10.0.1.10

GW1(config)#vrrp notify master

GW1(config)#vrrp notify backup

GW1(config)#vrrp notify fault

Поддержку протокола VRRP обеспечивает пакет keepalived.

Команды в режиме конфигурирования интерфейса:

·         vrrp <id> <команда>id определяет VRRP VRID (идентификатор виртуального маршрутизатора); данное поле присутствует в advertisement-пакетах; значения VRID в одном широковещательном домене у разных кластеров должны различаться;

·         vrrp <id> ip <IP-адрес> – задает виртуальный IP-адрес на интерфейсе;

·         vrrp <id> priority <приоритет> – задает приоритет шлюза; шлюз с более высоким приоритетом переходит в состояние MASTER;

·         vrrp <id> timers advertise <N секунд> – задает интервал отправки advertisement-пакетов. значение по умолчанию – 1 секунда; рекомендуется использовать значение 3 с.;

·         vrrp <id> authentication <пароль> – пароль для аутентификации advertisement-пакетов. Пароль должен быть не более 8 символов. Не используйте в пароле знак пробела ( ), кавычек (""), или знак восклицательного знака (!) первым символом. Смените пароль по умолчанию;

·         vrrp <id> preempt delay minimum <N секунд> – задает задержку перед повторной отправкой gratuitous ARP после перехода в состояние MASTER; значение по умолчанию – 5 секунд;

·         vrrp <id> timers garp <N секунд> – задает интервал регулярной отсылки gratuitous ARP в состоянии MASTER. По умолчанию выключено; рекомендуется использовать значение 5 с;

Команды в режиме глобального конфигурирования:

·         vrrp notify <master|backup|fault> – включает выполнение скриптов при смене состояния (по умолчанию папка со скриптами – /etc/keepalived/scripts).

·         vrrp ip route <IP-адрес> <маска> <IP-адрес next-hop> src <виртуальный IP-адрес> – задает маршрут для подмены физического IP-адреса на виртуальный/кластерный в локальных пакетах шлюза (при открытии сокета), например, чтобы в IKE/ESP пакетах в качестве IP-адреса источника был кластерный IP-адрес (для подмены IP-адреса источника в транзитных пакетах на кластерный нужно использовать source NAT); данный маршрут добавляется в систему при переходе шлюза в состояние MASTER; при переходе в состояние BACKUP или FAULT данный маршрут удаляется.

Важно! При пересечении маршрутов, задаваемых командами ip route и vrrp ip route, маршруты, задаваемые командой vrrp ip route, должны быть более узкими, чем маршруты, задаваемые с помощью команды ip route. Совместное задание одинаковых маршрутов (например, ip route 0.0.0.0 0.0.0.0 10.0.1.1 совместно с vrrp ip route 0.0.0.0 0.0.0.0 10.0.1.1 src 10.0.1.10) может привести к неработоспособности схемы.

При выходе из конфигурационного режима настройки VRRP преобразуются в файл конфигурации keepalived (по умолчанию в файл /etc/keepalived/keepalived.conf).

При загрузке конфигурации в keepalived.conf автоматически добавляются следующие структуры:

vrrp_script chk_dead {

       script "/usr/bin/pgrep -x vpnsvc"

       interval 1

}

и:

track_script {

       chk_dead

 }

Данные структуры отвечают за проверку работоспособности сервиса vpnsvc. Если сервис vpnsvc по каким-то причинам выгрузится, состояние шлюза изменится с MASTER|BACKUP на FAULT. После восстановления работы сервиса vpnsvc, состояние шлюза изменится с FAULT на MASTER|BACKUP.

6.    Настройка устройства GW1 в cisco-like консоли завершена. При выходе из конфигурационного режима происходит загрузка конфигурации:

GW1(config)#end

GW1#exit

7.    В данном сценарии выполнение скрипт-файлов при смене состояния нод кластера необходимо для корректной работы протокола OSPF.

7.1.     Измените файл /etc/keepalived/scripts/notify_master:

root@GW1:~# vim.tiny /etc/keepalived/scripts/notify_master

#!/bin/bash

ifconfig gre1 up

sleep 2

/etc/init.d/quagga start

7.2.     Измените файл /etc/keepalived/scripts/notify_backup:

root@GW1:~# vim.timy /etc/keepalived/scripts/notify_backup

#!/bin/bash

/etc/init.d/quagga stop

ifconfig gre1 down

7.3.     Измените файл /etc/keepalived/scripts/notify_fault:

root@GW1:~# vim.tiny /etc/keepalived/scripts/notify_fault

#!/bin/bash

/etc/init.d/quagga stop

ifconfig gre1 down

8.    Виртуальные адреса на соответствующих интерфейсах шлюза добавятся автоматически, когда шлюз будет находиться в режиме MASTER:

 ip address 192.168.0.10 255.255.255.0 secondary

 ip address 10.0.1.10 255.255.255.0 secondary

Настройка OSPF

Поддержку протокола OSPF обеспечивает пакет Quagga (версия 1.0.20160315). Конфигурирование будет осуществляется через CLI пакета Quagga. Настройки, внесенные через CLI, будут отражены в файле: /etc/quagga/ospfd.conf, который будет создан после выполнения скрипт-файла «quagga_post_install_script».

1.    Перед началом конфигурирования протокола OSPF необходимо выполнить скрипт-файл, данный скрипт-файл универсален и его необходимо выполнить на каждой ноде кластера № 1 и № 2. Создайте скрипт-файл:

root@GW01:~# vim.tiny /root/quagga_post_install_script

2.    Скопируйте следующее содержимое в созданный файл:

#!/bin/bash

 

#configure daemons

echo zebra=yes > /etc/quagga/daemons

echo bgpd=no >> /etc/quagga/daemons

echo ospfd=yes >> /etc/quagga/daemons

echo ospf6d=no >> /etc/quagga/daemons

echo ripd=no >> /etc/quagga/daemons

echo ripngd=no >> /etc/quagga/daemons

echo isisd=no >> /etc/quagga/daemons

 

#create files and dir

touch /etc/quagga/zebra.conf

touch /etc/quagga/ospfd.conf

mkdir /var/log/quagga/

touch /var/log/quagga/zebra.log

touch /var/log/quagga/ospfd.log

 

#change owns

chown -R quagga:quaggavty /var/log/quagga/

chown -R quagga:quagga /etc/quagga/

 

#configure zebra.conf

echo "!" > /etc/quagga/zebra.conf

echo "hostname `hostname`" >> /etc/quagga/zebra.conf

echo "password russia" >> /etc/quagga/zebra.conf

echo "log file /var/log/quagga/zebra.log debugging" >> /etc/quagga/zebra.conf

echo "!" >> /etc/quagga/zebra.conf

echo "line vty" >> /etc/quagga/zebra.conf

echo "!" >> /etc/quagga/zebra.conf

 

#configure ospfd.conf

echo "!" > /etc/quagga/ospfd.conf

echo "hostname `hostname`" >> /etc/quagga/ospfd.conf

echo "password russia" >> /etc/quagga/ospfd.conf

echo "log file /var/log/quagga/ospfd.log debugging" >> /etc/quagga/ospfd.conf

echo "!" >> /etc/quagga/ospfd.conf

 

#restart quagga

/etc/init.d/quagga restart

3.    Пропишите права на исполнение:

root@GW01:~# chmod +x /root/quagga_post_install_script

4.    Запустите скрипт:

root@GW01:~# ./quagga_post_install_script

5.    Зайдите в CLI Quagg’и:

root@GW01:~# telnet 127.0.0.1 ospfd

Введите пароль – russia  (ввод символов не отображается).

6.    Перейдите в режим конфигурирования:

GW01> enable

GW01# configure terminal

GW01(config)#

7.    Перейдите в режим конфигурирования OSPF:

GW01(config)# router ospf

GW01(config-router)#

8.    Задайте идентификатор OSPF – роутера:

GW01(config-router)# ospf router-id 10.0.1.2

Идентификатором роутера специально выбирается IP-адрес отличающийся от виртуального IP – адреса для того, чтобы при выявлении ошибок можно было однозначно определить «соседа» по протоколу OSPF.

9.    Выключите OSFP на всех интерфейсах кроме GRE интерфейса:

GW01(config-router)# passive-interface eth0

GW01(config-router)# passive-interface eth1

Это необходимо для того, чтобы Hello – пакеты не отсылались с этих интерфейсов.

10.  Включите OSPF на GRE интерфейсе:

GW01(config-router)# network 172.16.100.0/30 area 0.0.0.0

11.  Включите анонсирование маршрута защищаемой сети:

GW01(config-router)# network 192.168.0.0/24 area 0.0.0.0

12.  Сохраните сделанные настройки:

GW01(config-router)# do write memory

Configuration saved to /etc/quagga/ospfd.conf

13.  Чтобы после перезагрузки демон Quagga автоматически запускался, выполните команду:

root@GW01:~# update-rc.d quagga enable

В Приложении приведены тексты ospfd.conf для шлюзов GW01 и GW02, GW03 и GW04.

Настройка устройства GW02

На шлюзе GW02 конфигурация будет аналогична GW01 за исключением нескольких параметров.

1.    Изменится название шлюза:

sterragate(config)#hostname GW02

2.    Изменятся IP – адреса интерфейсов:

GW02(config)#interface GigabitEthernet 0/0

GW02(config-if)#ip address 10.0.1.3 255.255.255.0

GW02(config-if)#no shutdown

GW02(config-if)#exit

GW02(config)#interface GigabitEthernet 0/1

GW02(config-if)#ip address 192.168.0.2 255.255.255.0

GW02(config-if)#no shutdown

GW02(config-if)#exit

При конфигурировании VRRP параметр priority должен быть изменен с 100 до 50.

Параметр priority сравнивается при выборе MASTER-а. При отказе шлюза GW01 MASTER-ом становится GW02. Когда отказ устранен, MASTER-ом становится снова GW01, так как у него параметр priority выше. При одинаковых значениях priority обратного переключения не произойдет и GW02 останется MASTER.

3.    В конфигурировании OSPF необходимо изменить идентификатор роутера с 10.0.1.2 на 10.0.1.3:

GW01(config-router)# ospf router-id 10.0.1.3

В Приложении представлены текст cisco-like конфигурации и ospfd.conf для устройства GW02.

Настройка устройств GW03, GW04

Настройка кластера № 2, состоящего из шлюзов GW03 и GW04, производится аналогичного настройкам нод кластера № 1.

В настройках VRRP укажите VRID отличным от параметров GW01 и GW02.

IP-адреса и названия шлюзов настраиваются в соответствии с Рисунок 1.

В Приложении приведены тексты cisco-like конфигураций для GW03 и GW04 и ospfd.conf для GW03 и GW04.

Настройка устройства Router1

На устройстве Router1 настраиваются только IP-адреса интерфейсов (см. Рисунок 1).

Настройка устройства IPHost1

На устройстве IPHost1 необходимо задать IP-адрес – 192.168.0.100. В качестве шлюза по умолчанию необходимо указать виртуальный адрес кластера № 1 в защищаемом сегменте – 192.168.0.10.

Настройка устройства IPHost2

На устройстве IPHost2 необходимо задать IP-адрес – 192.168.1.100. В качестве шлюза по умолчанию необходимо указать виртуальный адрес кластера № 2 в защищаемом сегменте – 192.168.1.10.


 

Проверка работоспособности стенда

1.    После настройки всех устройств перезагрузите шлюз GW01 и убедитесь, что демоны keepalived и quagga запущены, а GRE интерфейс находится в состоянии UP. Данную процедуру необходимо проделать на всех нодах кластера №1 и № 2 с учетом примечания, представленного ниже:

1.1.     Чтобы убедиться в успешном запуске демона quagga выполните:

root@GW01:~# ps -Af | grep ospfd | grep -v grep

quagga   31246     1  0 16:12 ?        00:00:00 /usr/lib/quagga/ospfd --daemon -A 127.0.0.1

Примечание: Сервис quagga будет запущен только на той ноде кластера, которая находится в состоянии MASTER. В соответствии с настройками VRRP, шлюз GW01 в штатной ситуации должен находиться в состоянии MASTER. Чтобы дифференцировать состояния ноды кластера достаточно убедиться в том, что виртуальный адрес в данный момент находится у той ноды кластера, на которой производится проверка.

1.2.     Чтобы убедиться в успешном запуске демона keepalived выполните:

root@GW01:~# ps -Af | grep keepalived | grep -v grep

root     17798     1  0 15:16 ?        00:00:00 /usr/sbin/keepalived -P -d -D -S 7

root     17801 17798  0 15:16 ?        00:00:01 /usr/sbin/keepalived -P -d -D -S 7

Можно видеть, что запущено два сервиса keepalived – это нормальное поведение.

1.3.     Чтобы проверить состояние GRE интерфейса выполните:

root@GW01:~# ip addr show | grep gre1

6: gre1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN

    inet 172.16.100.1/30 scope global gre1

Примечание: GRE интерфейс будет находиться в состоянии UP только на той ноде кластера, которая является MASTER’ом.

2.    Убедитесь, что на всех нодах кластера № 1 и № 2 установлено одинаковое время:

root@GW01:~# date

Fri Jul 26 16:48:47 MSK 2013

3.    Убедитесь, что сертификаты находятся в активном состоянии:

root@GW01:~# cert_mgr check

1 State: Active   1.2.840.113549.1.9.1=vnovikov@s-terra.com,C=RU,L=Moscow,O=S-Terra CSP,OU=Research,CN=CA-W2008SP1-X64-CA

2 State: Active   C=RU,OU=Research,CN=GW01

4.    Убедитесь, что маршрут, полученный по OSPF, имеется в главной таблице маршрутов:

root@GW01:~# ip route show | grep zebra

192.168.1.0/24 via 172.16.100.2 dev gre1  proto zebra  metric 20

5.    С устройства IPHost1 отправьте ICMP пакет на IPHost2. Для этого выполните команду:

Примечание: перед запуском команды ping убедитесь, что на устройстве IPHost1 шлюзом по умолчанию установлен IP-адрес: 192.168.0.10, а у IPHost2: 192.168.1.10.

root@IPHost1:~# ping 192.168.1.100

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.

64 bytes from 192.168.1.100: icmp_req=1 ttl=63 time=5.94 ms

64 bytes from 192.168.1.100: icmp_req=2 ttl=63 time=1.50 ms

64 bytes from 192.168.1.100: icmp_req=3 ttl=62 time=4.51 ms

6.    Убедитесь, что установлено защищенное соединение:

root@GW01:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd

1 5 (10.0.1.10,500)-(20.0.1.10,500) active 2236 2148

2 6 (10.0.1.10,500)-(20.0.1.10,500) active 1412 1500

 

IPsec connections:

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd

1 2 (10.0.1.10,*)-(20.0.1.10,*) 47 ESP tunn 824 728

2 3 (10.0.1.10,*)-(20.0.1.10,*) 47 ESP tunn 249864 242216

7.    Чтобы проверить работоспособность кластера при отказе ноды, находящейся в состоянии MASTER запустите следующую команду на устройстве IPHost1 и симулируйте обрыв связи либо отказ аппаратной платформы:

root@IPHost1:~# ping 192.168.1.100

Примечание: в зависимости от типа отказа, направления трафика и количества туннелей переключение может длиться от 20 секунд (без настройки OSPF таймеров) до 30 секунд.


 

Приложение

Текст cisco-like конфигурации для шлюза GW01

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit copy

crypto isakmp identity dn

crypto isakmp keepalive 10

crypto isakmp keepalive retry-count 5

username cscons privilege 15 password 0 csp

aaa new-model

!

!

hostname GW01

enable password csp

!

!

!

logging trap debugging

!

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

crypto ipsec transform-set TSET esp-gost28147-4m-imit

!

ip access-list extended LIST

 permit gre host 10.0.1.10 host 20.0.1.10

!

!

crypto map CMAP 1 ipsec-isakmp

 match address LIST

 set transform-set TSET

 set peer 20.0.1.10

!

interface GigabitEthernet0/0

 ip address 10.0.1.2 255.255.255.0

 ip address 10.0.1.10 255.255.255.0 secondary

 crypto map CMAP

 vrrp 52 ip 10.0.1.10 255.255.255.0

 vrrp 52 timers advertise 3

 vrrp 52 timers garp 5

!

interface GigabitEthernet0/1

 ip address 192.168.0.1 255.255.255.0

 ip address 192.168.0.10 255.255.255.0 secondary

 vrrp 51 ip 192.168.0.10 255.255.255.0

 vrrp 51 timers advertise 3

 vrrp 51 timers garp 5

!

!

ip route 0.0.0.0 0.0.0.0 10.0.1.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

vrrp ip route 20.0.1.0 255.255.255.0 10.0.1.1 src 10.0.1.10

vrrp notify master

vrrp notify backup

vrrp notify fault

end

Текст cisco-like конфигурации для шлюза GW02

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit copy

crypto isakmp identity dn

crypto isakmp keepalive 10

crypto isakmp keepalive retry-count 5

username cscons privilege 15 password 0 csp

aaa new-model

!

!

hostname GW02

enable password csp

!

!

!

logging trap debugging

!

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

crypto ipsec transform-set TSET esp-gost28147-4m-imit

!

ip access-list extended LIST

 permit gre host 10.0.1.10 host 20.0.1.10

!

!

crypto map CMAP 1 ipsec-isakmp

 match address LIST

 set transform-set TSET

 set peer 20.0.1.10

!

interface GigabitEthernet0/0

 ip address 10.0.1.3 255.255.255.0

 crypto map CMAP

 vrrp 52 ip 10.0.1.10 255.255.255.0

 vrrp 52 timers advertise 3

 vrrp 52 timers garp 5

 vrrp 52 priority 50

!

interface GigabitEthernet0/1

 ip address 192.168.0.2 255.255.255.0

 vrrp 51 ip 192.168.0.10 255.255.255.0

 vrrp 51 timers advertise 3

 vrrp 51 timers garp 5

 vrrp 51 priority 50

!

!

ip route 0.0.0.0 0.0.0.0 10.0.1.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

vrrp ip route 20.0.1.0 255.255.255.0 10.0.1.1 src 10.0.1.10

vrrp notify master

vrrp notify backup

vrrp notify fault

end

Текст cisco-like конфигурации для шлюза GW03

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit copy

crypto isakmp identity dn

crypto isakmp keepalive 10

crypto isakmp keepalive retry-count 5

username cscons privilege 15 password 0 csp

aaa new-model

!

!

hostname GW03

enable password csp

!

!

!

logging trap debugging

!

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

crypto ipsec transform-set TSET esp-gost28147-4m-imit

!

ip access-list extended LIST

 permit gre host 20.0.1.10 host 10.0.1.10

!

!

crypto map CMAP 1 ipsec-isakmp

 match address LIST

 set transform-set TSET

 set peer 10.0.1.10

!

interface GigabitEthernet0/0

 ip address 20.0.1.2 255.255.255.0

 ip address 20.0.1.10 255.255.255.0 secondary

 crypto map CMAP

 vrrp 102 ip 20.0.1.10 255.255.255.0

 vrrp 102 timers advertise 3

 vrrp 102 timers garp 5

!

interface GigabitEthernet0/1

 ip address 192.168.1.1 255.255.255.0

 ip address 192.168.1.10 255.255.255.0 secondary

 vrrp 101 ip 192.168.1.10 255.255.255.0

 vrrp 101 timers advertise 3

 vrrp 101 timers garp 5

!

!

ip route 0.0.0.0 0.0.0.0 20.0.1.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

vrrp ip route 10.0.1.0 255.255.255.0 20.0.1.1 src 20.0.1.10

vrrp notify master

vrrp notify backup

vrrp notify fault

end

Текст cisco-like конфигурации для шлюза GW04

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit copy

crypto isakmp identity dn

crypto isakmp keepalive 10

crypto isakmp keepalive retry-count 5

username cscons privilege 15 password 0 csp

aaa new-model

!

!

hostname GW04

enable password csp

!

!

!

logging trap debugging

!

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

crypto ipsec transform-set TSET esp-gost28147-4m-imit

!

ip access-list extended LIST

 permit gre host 20.0.1.10 host 10.0.1.10

!

!

crypto map CMAP 1 ipsec-isakmp

 match address LIST

 set transform-set TSET

 set peer 10.0.1.10

!

interface GigabitEthernet0/0

 ip address 20.0.1.3 255.255.255.0

 crypto map CMAP

 vrrp 102 ip 20.0.1.10 255.255.255.0

 vrrp 102 timers advertise 3

 vrrp 102 timers garp 5

 vrrp 102 priority 50

!

interface GigabitEthernet0/1

 ip address 192.168.1.2 255.255.255.0

 vrrp 101 ip 192.168.1.10 255.255.255.0

 vrrp 101 timers advertise 3

 vrrp 101 timers garp 5

 vrrp 101 priority 50

!

!

ip route 0.0.0.0 0.0.0.0 20.0.1.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

vrrp ip route 10.0.1.0 255.255.255.0 20.0.1.1 src 20.0.1.10

vrrp notify master

vrrp notify backup

vrrp notify fault

end

Текст keepalived.conf для шлюза GW01

vrrp_script chk_dead {

  script "/usr/bin/pgrep -x vpnsvc"

  interval 1

}

vrrp_sync_group 0 {

  notify_master "/etc/keepalived/scripts/notify_master"

  notify_backup "/etc/keepalived/scripts/notify_backup"

  notify_fault "/etc/keepalived/scripts/notify_fault"

  group {

    eth0_51

    eth1_52

  }

}

vrrp_instance eth0_51 {

  interface eth1

  virtual_routes {

    src 10.0.1.10 20.0.1.0/24 via 10.0.1.1

  }

  virtual_ipaddress {

    10.0.1.10/24

  }

  priority 100

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 52

}

vrrp_instance eth1_52 {

  interface eth0

  track_script {

    chk_dead

  }

  virtual_ipaddress {

    192.168.0.10/24

  }

  priority 100

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 51

}

Текст keepalived.conf для шлюза GW02

vrrp_script chk_dead {

  script "/usr/bin/pgrep -x vpnsvc"

  interval 1

}

vrrp_sync_group 0 {

  notify_master "/etc/keepalived/scripts/notify_master"

  notify_backup "/etc/keepalived/scripts/notify_backup"

  notify_fault "/etc/keepalived/scripts/notify_fault"

  group {

    eth0_51

    eth1_52

  }

}

vrrp_instance eth0_51 {

  interface eth1

  virtual_routes {

    src 10.0.1.10 20.0.1.0/24 via 10.0.1.1

  }

  virtual_ipaddress {

    10.0.1.10/24

  }

  priority 50

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 52

}

vrrp_instance eth1_52 {

  interface eth0

  track_script {

    chk_dead

  }

  virtual_ipaddress {

    192.168.0.10/24

  }

  priority 50

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 51

}

Текст keepalived.conf для шлюза GW03

vrrp_script chk_dead {

  script "/usr/bin/pgrep -x vpnsvc"

  interval 1

}

vrrp_sync_group 0 {

  notify_master "/etc/keepalived/scripts/notify_master"

  notify_backup "/etc/keepalived/scripts/notify_backup"

  notify_fault "/etc/keepalived/scripts/notify_fault"

  group {

    eth0_102

    eth1_101

  }

}

vrrp_instance eth0_102 {

  interface eth0

  virtual_routes {

    src 20.0.1.10 10.0.1.0/24 via 20.0.1.1

  }

  track_script {

    chk_dead

  }

  virtual_ipaddress {

    20.0.1.10/24

  }

  priority 100

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 102

}

vrrp_instance eth1_101 {

  interface eth1

  virtual_ipaddress {

    192.168.1.10/24

  }

  priority 100

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 101

}

Текст keepalived.conf для шлюза GW04

vrrp_script chk_dead {

  script "/usr/bin/pgrep -x vpnsvc"

  interval 1

}

vrrp_sync_group 0 {

  notify_master "/etc/keepalived/scripts/notify_master"

  notify_backup "/etc/keepalived/scripts/notify_backup"

  notify_fault "/etc/keepalived/scripts/notify_fault"

  group {

    eth0_102

    eth1_101

  }

}

vrrp_instance eth0_102 {

  interface eth0

  virtual_routes {

    src 20.0.1.10 10.0.1.0/24 via 20.0.1.1

  }

  track_script {

    chk_dead

  }

  virtual_ipaddress {

    20.0.1.10/24

  }

  priority 50

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 102

}

vrrp_instance eth1_101 {

  interface eth1

  virtual_ipaddress {

    192.168.1.10/24

  }

  priority 50

  advert_int 3

  garp_master_refresh 5

  virtual_router_id 101

}

Текст ospfd.conf для шлюза GW01

!

! Zebra configuration saved from vty

!   2019/03/08 02:07:56

!

hostname GW01

password russia

log file /var/log/quagga/ospfd.log

!

!

!

interface eth0

!

interface eth1

!

interface gre0

!

interface gre1

!

interface lo

!

router ospf

 ospf router-id 10.0.1.2

 passive-interface eth0

 passive-interface eth1

 network 172.16.100.0/30 area 0.0.0.0

 network 192.168.0.0/24 area 0.0.0.0

!

line vty

!

Текст ospfd.conf для шлюза GW02

!

! Zebra configuration saved from vty

!   2019/03/22 09:55:44

!

hostname GW02

password russia

log file /var/log/quagga/ospfd.log

!

!

!

interface eth0

!

interface eth1

!

interface gre0

!

interface gre1

!

interface lo

!

router ospf

 ospf router-id 10.0.1.3

 passive-interface eth0

 passive-interface eth1

 network 172.16.100.0/30 area 0.0.0.0

 network 192.168.0.0/24 area 0.0.0.0

!

line vty

!

Текст ospfd.conf для шлюза GW03

!

! Zebra configuration saved from vty

!   2019/03/22 15:43:17

!

hostname GW03

password russia

!

!

!

interface eth0

!

interface eth1

!

interface gre0

!

interface gre1

!

interface lo

!

router ospf

 ospf router-id 20.0.1.2

 passive-interface eth0

 passive-interface eth1

 network 172.16.100.0/30 area 0.0.0.0

 network 192.168.1.0/24 area 0.0.0.0

!

line vty

!

Текст ospfd.conf для шлюза GW04

!

! Zebra configuration saved from vty

!   2019/03/22 15:41:13

!

hostname GW04

password russia

!

!

!

interface eth0

!

interface eth1

!

interface gre0

!

interface gre1

!

interface lo

!

router ospf

 ospf router-id 20.0.1.3

 passive-interface eth0

 passive-interface eth1

 network 172.16.100.0/30 area 0.0.0.0

 network 192.168.1.0/24 area 0.0.0.0

!

line vty

!