Построение отказоустойчивого решения с динамической маршрутизацией схемы Site-to-Site
Настоящий документ содержит описание способа совместного использования Продуктов компании ООО
«С-Терра СиЭсПи» и Продуктов третьих производителей.
ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов.
Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.
Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах
только после тестовой и/или опытной эксплуатации.
Сценарий иллюстрирует построение защищенного соединения между двумя подсетями. 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.
Начальная настройка шлюза в 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 (УЦ) и локальный сертификат для шлюза 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 интерфейс будет использоваться для маршрутизации трафика из защищаемых сетей (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 выполните пункты ниже.
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 обеспечивает пакет 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 конфигурация будет аналогична 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.
Настройка кластера № 2, состоящего из шлюзов GW03 и GW04, производится аналогичного настройкам нод кластера № 1.
В настройках VRRP укажите VRID отличным от параметров GW01 и GW02.
IP-адреса и названия шлюзов настраиваются в соответствии с Рисунок 1.
В Приложении приведены тексты cisco-like конфигураций для GW03 и GW04 и ospfd.conf для GW03 и GW04.
На устройстве Router1 настраиваются только IP-адреса интерфейсов (см. Рисунок 1).
На устройстве IPHost1 необходимо задать IP-адрес – 192.168.0.100. В качестве шлюза по умолчанию необходимо указать виртуальный адрес кластера № 1 в защищаемом сегменте – 192.168.0.10.
На устройстве 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 секунд.
!
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
!
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
!
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
!
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
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
}
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
}
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
}
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
}
!
! 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
!
!
! 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
!
!
! 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
!
!
! 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
!