Настройка DMVPN (phase 2) dual cloud с протоколом динамической маршрутизации OSPF

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

Дополнительные файлы:

dmvpn_1.01 ospf.tar

download ospf

 

Назначение инструкции

В документе представлено описание настройки DMVPN (phase2) на «С-Терра Шлюз». Инструкция предназначена для сетевых инженеров, знакомых с данной технологией по оборудованию Cisco, а также хорошо разбирающихся в базовых настройках «С-Терра Шлюз».

Инструкция применима только к шлюзам, имеющим класс сертификации КС1 (класс можно посмотреть в файле /etc/image_version, параметр CLASS) и архитектуру x64. Если требуется поддержка более высоких классов сертификации – обратитесь с запросом.

Краткое описание технологии DMVPN

Технология DMVPN (англ. Dynamic Multipoint Virtual Private Network – динамическая многоточечная виртуальная частная сеть) позволяет динамически строить защищенные соединения без необходимости описывать каждое соединение в политике безопасности, что существенно упрощает масштабирование крупных сетей с полносвязной топологией. Автоматическое построение полносвязной защищенной топологии достигается за счет применения динамических протоколов маршрутизации и таких протоколов как NHRP (англ. Next Hop Resolution Protocol – протокол разрешения следующего узла) и multipoint GRE (англ. Generic Routing Encapsulation).

Требования к квалификации инженера

Инженер, внедряющий и эксплуатирующий технологию DMVPN на базе продукта «С-Терра Шлюз» в производственной среде, должен свободно ориентироваться в настройке базовых сценариев (например, site-to-site IPsec) продукта «С-Терра Шлюз», а также должен знать и понимать следующие технологии и протоколы: PKI, IPsec, NAT, Firewall, NHRP, GRE, OSPF, BGP, VRRP.

Требования к начальному состоянию «С-Терра Шлюз»

Перед настройкой должно быть выполнено следующее:

1.    Шлюзы должны быть инициализированы.

2.    На шлюзах должны быть установлены корневой сертификат и сертификат устройства.

Исключительно для тестовых целей можно использовать тестовый УЦ от «КриптоПро», веб-интерфейс: https://www.cryptopro.ru/certsrv/certrqxt.asp.

Общая схема стенда

Рисунок 1. Общая схема стенда

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

Данная инструкция описывает настройку технологии DMVPN (phase2) на шлюзах безопасности «С-Терра Шлюз 4.2» Будет настроено две mGRE подсети (dual cloud) и использован протокол динамической маршрутизации OSPF. По окончании настройки реализуется возможность построения динамических защищенных соединений между всеми подсетями филиалов, а также подсетями филиалов и центрального офиса (см. рисунок 1).

Стенд состоит из 16 устройств:

·         «С-Терра Шлюз 4.2»: Hub1, Hub2, Spoke1-n1, Spoke1-n2, Spoke2.

·         Роутеры на базе ОС Debian 9: Int_router1_Hub, Ext_router1_Hub1, Ext_router2_Hub2, Core_router, Ext_router1_Spoke1, Ext_router2_Spoke1.

·         Управляемые коммутаторы: Int_switch1_Hub, Int_switch1_Spoke1.

·         Персональные компьютеры: host_behind_hub, host_behind_spoke1, host_behind_spoke2.

Роутеры на базе ОС Debian 9 выбраны в качестве примера. В общем случае могут быть использованы любые маршрутизаторы, поддерживающие функции NAT и динамической маршрутизации (NAT в ОС Debian 9 будет реализован при помощи iptables, а динамическая маршрутизация при помощи пакета FRR).

Логика работы

Защищенные соединения

Между шлюзами в филиалах и центральным офисом устанавливаются статические IPsec туннели.  Инициатором построения туннелей является служебный трафик протоколов NHRP/OSPF.

Между филиальными шлюзами устанавливаются динамические IPsec туннели. Инициатором построения туннелей является реальный трафик защищаемых подсетей филиалов.

Допускается расположение шлюзов безопасности за устройствами, выполняющими функции трансляции сетевых адресов. Трансляция в этом случае должна быть статическая (порты 500/4500 протокола UDP должны быть проброшены на «С-Терра Шлюз»).

Для корректной работы DMVPN с NAT необходимо, чтобы режим IPsec туннеля был транспортный.

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

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

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

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

·         Алгоритм выработки общего ключа (аналог алгоритма Диффи-Хеллмана) – VKO2 ГОСТ R 34.10-2012 (ключ 256 бит).

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

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

·         Режим туннеля – транспортный.

Динамическая маршрутизация

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

Шлюзы безопасности, установленные в филиалах, отсылают маршрутную информацию о защищаемых подсетях только шлюзам в центральный офис, соответственно, получение маршрутной информации происходит тоже только из центрального офиса. Маршруты до защищаемых подсетей устанавливаются через mGRE-интерфейсы.

Все филиальные шлюзы находятся в OSPF области 0. Шлюзы в центральном офисе одновременно находятся в OSPF области 0 и 1. Разделение на несколько OSPF областей сделано с целью фильтрации анонсов служебной посети 192.168.255.0/24 к филиальным шлюзам и фильтрации анонсов mGRE-подсетей к роутеру Int_router1_Hub (см. рисунок 1).

Отказоустойчивость

Отказоустойчивость центрального офиса. Отказоустойчивость центрального офиса, а именно шлюзов безопасности Hub1 и Hub2, обеспечивается протоколами NHRP и OSPF. Филиальные шлюзы одновременно регистрируются по протоколу NHRP в Hub1 и Hub2, а также получают маршрутную информацию обо всех защищаемых подсетях от Hub1 и Hub2 через соответствующий mGRE-интерфейс. Роутер Int_router1_Hub получает маршруты до филиальных подсетей от Hub1 и Hub2. Резервирование подключения к Интернет обеспечивается следующим принципом – каждый центральный шлюз подключается к соответствующему Интернет провайдеру.

В силу некоторых особенностей открытой реализации протокола NHRP в пакете OpenNHRP необходимо придерживаться следующего принципа на филиальных шлюзах: одна mGRE-подсеть на один центральный шлюз. То есть в данной инструкции необходимо две mGRE-подсети на филиальных шлюзах, одна для Hub1, а вторая для Hub2.

Отказоустойчивость филиала. Отказоустойчивость филиала реализована протоколом VRRP, работающим со стороны защищаемой подсети. Сервис Keepalived, реализующий протокол VRRP, при помощи скриптов дополнительно контролирует состояние канала Интернет провайдера посредством проверки доступности заданных узлов по протоколу ICMP. Если все заданные узлы недоступны определенное время (по умолчанию 10 секунд), то нода кластера переходит в состояние FAULT, что приводит к переключению кластера на резервную ноду (в случае, если она была в состоянии BACKUP), которая должна быть подключена к другому Интернет провайдеру. Резервирование подключения к Интернет обеспечивается следующим принципом – каждая нода кластера филиала подключается к соответствующему Интернет провайдеру.

На портах коммутатора Int_switch1_Spoke1, подключенных к шлюзам, обязательно должен быть включен режим portfast.

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

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

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

На данном устройстве должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки для ОС Debian (содержимое файла /etc/network/interfaces).

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

На данном устройстве должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки для ОС Debian (содержимое файла /etc/network/interfaces).

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

На данном устройстве должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки для ОС Debian (содержимое файла /etc/network/interfaces).

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

На данном устройстве сетевые интерфейсы, коммутирующие шлюзы Hub1, Hub2 и роутер Int_router1_Hub, должны быть в одном VLAN и в режиме portfast.

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

На данном устройстве сетевые интерфейсы, коммутирующие шлюзы Spoke1_n1, Spoke1_n2 и персональный компьютер host_behind_spoke1, должны быть в одном VLAN и в режиме portfast.

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

На данном устройстве должны быть настроены IP-адреса в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).

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

На данном устройстве должно быть настроено:

1.    IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).

2.    Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).

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

На данном устройстве должно быть настроено:

1.    IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).

2.    Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).

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

На данном устройстве должно быть настроено:

1.    IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).

2.    Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).

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

На данном устройстве должно быть настроено:

1.    IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).

2.    Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).

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

На данном устройстве должно быть настроено:

1.    IP-адреса в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).

2.    Динамическая маршрутизация. В приложении представлены настройки FRR.

Подготовка устройств «С-Терра Шлюз»

На всех шлюзах (Hub1, Hub2, Spoke1-n1, Spoke1-n2, Spoke2) нужно выполнить первоначальную подготовку. Подготовка включает в себя обновление предыдущих версий пакетов и установку новых, а также другие вспомогательные операции. Для подготовки понадобится USB-flash накопитель.

Для дальнейшей работы вам потребуются следующие файлы (доступны для скачивания вместе с данным документом):

·         скрипт dmvpn_prep.bash;

·         архив dmvpn_<version>.tar.

Чтобы осуществить подготовку шлюзов выполните следующие шаги:

1.    Подключитесь к шлюзу консольным кабелем и войдите в CLI разграничения доступа (или Initial CLI). Для этого, после появления сообщения:

S-Terra administrative console

введите логин и пароль для CLI разграничения доступа:

Пользователь и пароль по умолчанию: administrator, s-terra. Обязательно смените пароль для пользователя administrator при помощи команды change user password.

login as: administrator

administrator's password:

administrator@sterragate]

Отключите автоматическое закрытие сессии CLI разграничения доступа по неактивности:

administrator@sterragate] session idle timeout disable

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

2.    Войдите в linux bash, чтобы попасть в linux bash выполните следующую команду в CLI разграничения доступа:

administrator@sterragate] system

Entering system shell...

root@sterragate:~#

3.    Скопируйте скрипт dmvpn_prep.bash и архив dmvpn_<version>.tar на USB-flash накопитель и подключите его в свободный USB порт на «С-Терра Шлюз» (USB-flash накопитель автоматически примонтируется в директорию /media/<ID>).

1.    Скопируйте скрипт dmvpn_prep.bash и архив dmvpn_<version>.tar из /media/<ID> в директорию /root, например:

root@sterragate:~# cp /media/9C13-E314/dmvpn* /root

2.    Дайте права на запуск скрипту dmvpn_prep.bash:

root@sterragate:~# chmod u+x dmvpn_prep.bash

3.    Запустите скрипт dmvpn_prep.bash  и дождитесь его завершения:

root@sterragate:~# ./dmvpn_prep.bash

##################################################

Preparation of S-Terra Gate 4.2 for DMVPN scenario

##################################################

...

#######################################################

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Preparation completed successfully, please, reboot OS

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#######################################################

4.    Перезагрузите шлюз:

root@sterragate:~# reboot

5.    Повторите предыдущие пункты на всех оставшихся шлюзах.

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

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

Краткий план настройки:

1.    Базовые сетевые настройки.

2.    Настройка IPsec и Firewall.

3.    Настройка mGRE-интерфейса.

4.    Настройка NHRP.

5.    Настройка OSPF.

Базовые сетевые настройки

1.    Войдите в CLI разграничения доступа (или Initial CLI). Для этого, после появления сообщения:

S-Terra administrative console

введите логин и пароль для CLI разграничения доступа:

Пользователь и пароль по умолчанию: administrator, s-terra. Обязательно смените пароль для пользователя administrator при помощи команды change user password.

login as: administrator

administrator's password:

administrator@sterragate]

2.    Базовые сетевые настройки осуществляются из cisco-like консоли шлюза, чтобы попасть в нее выполните следующую команду в CLI разграничения доступа:

Пользователь и пароль по умолчанию: cscons, csp. Обязательно смените пароль для пользователя cscons и enable пароль. Под пользователем cscons можно осуществлять удаленное управление шлюзом по SSH.

administrator@sterragate] configure

sterragate login: cscons

Password:

S-Terra Gate 4.2.18201 (amd64)

sterragate#

3.    Настройте имя устройства, IP-адреса и маршрут по умолчанию в соответствии с общей схемой стенда (см. рисунок 1):

sterragate#configure terminal

sterragate(config)#hostname hub1

hub1(config)#interface GigabitEthernet0/0

hub1(config-if)# ip address 100.100.100.2 255.255.255.0

hub1(config-if)# no shutdown

hub1(config-if)#interface GigabitEthernet0/1

hub1(config-if)# ip address 192.168.255.10 255.255.255.0

hub1(config-if)# no shutdown

hub1(config-if)#ip route 0.0.0.0 0.0.0.0 100.100.100.1

hub1(config)#end

4.    Проверьте доступность маршрута по умолчанию:

hub1#ping 100.100.100.1

PING 100.100.100.1 (100.100.100.1) 100(128) bytes of data.

108 bytes from 100.100.100.1: icmp_req=1 ttl=64 time=0.404 ms

108 bytes from 100.100.100.1: icmp_req=2 ttl=64 time=0.216 ms

108 bytes from 100.100.100.1: icmp_req=3 ttl=64 time=0.232 ms

108 bytes from 100.100.100.1: icmp_req=4 ttl=64 time=0.212 ms

108 bytes from 100.100.100.1: icmp_req=5 ttl=64 time=0.230 ms

 

--- 100.100.100.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4002ms

rtt min/avg/max/mdev = 0.212/0.258/0.404/0.075 ms

Настройка IPsec и Firewall

Настройки IPsec и Firewall осуществляются из cisco-like консоли шлюза.

1.    Параметры IKE:

hub1#conf t

hub1(config)#crypto isakmp identity dn

hub1(config)#crypto isakmp session-time-max 10

hub1(config)#crypto isakmp keepalive 1 3

hub1(config)#crypto isakmp keepalive retry-count 3

hub1(config)#

hub1(config)#crypto isakmp policy 1

hub1(config-isakmp)# encr gost

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

hub1(config-isakmp)# authentication gost-sig

hub1(config-isakmp)# group vko2

hub1(config-isakmp)#

hub1(config-isakmp)#exit

2.    Параметры IPsec

2.1.     Список доступа для трафика:

При работе «С-Терра Шлюз» версии 4.2 через NAT в транспортном IPsec режиме нельзя указывать в фильтрах для трафика, требующего шифрование, протоколы отличные от IP. То есть нельзя написать: permit gre host 100.100.100.2 any.

hub1(config)#ip access-list extended IPSEC_DMVPN

hub1(config-ext-nacl)# deny   icmp host 100.100.100.2 any

hub1(config-ext-nacl)# deny   udp host 100.100.100.2 any

hub1(config-ext-nacl)# deny   tcp host 100.100.100.2 any

hub1(config-ext-nacl)# deny   ip host 100.100.100.2 host 224.0.0.5

hub1(config-ext-nacl)# deny   ip host 100.100.100.2 host 224.0.0.6

hub1(config-ext-nacl)# deny   ip host 100.100.100.2 host 224.0.0.18

hub1(config-ext-nacl)# permit ip host 100.100.100.2 any

hub1(config-ext-nacl)#exit

hub1(config)#

После исключения из шифрования (строки с deny) протоколов ICMP/UDP/TCP под фильтр permit  ip  host 100.100.100.2 any попадет как раз GRE трафик.

2.2.     Включите автоматическую фрагментацию больших пакетов:

hub1(config)#crypto ipsec df-bit clear

2.3.     Задайте алгоритм шифрования и режим работы IPsec:

hub1(config)#crypto ipsec transform-set GOST esp-gost28147-4m-imit

hub1(cfg-crypto-trans)# mode transport

hub1(cfg-crypto-trans)#exit

hub1(config)#

2.4.     Создайте динамическую крипто-карту и привяжите ее к статической:

hub1(config)#crypto dynamic-map DMAP 1

hub1(config-crypto-map)# match address IPSEC_DMVPN

hub1(config-crypto-map)# set transform-set GOST

hub1(config-crypto-map)# set dead-connection history off

hub1(config-crypto-map)#crypto map VPN 1 ipsec-isakmp dynamic DMAP

hub1(config)#

3.    Параметры Firewall:

3.1.     Список доступа для трафика:

Список доступа должен блокировать открытый трафик из защищаемый подсети шлюза в подсети RFC1918/RFC6598 (считаем, что трафик непубличных подсетей должен обязательно шифроваться), а также незашифрованный GRE.

hub1(config)#ip access-list extended FIREWALL_OUT

hub1(config-ext-nacl)# deny ip 192.168.100.0 0.0.0.255 100.64.0.0 0.63.255.255

hub1(config-ext-nacl)# deny ip 192.168.100.0 0.0.0.255 172.16.0.0 0.15.255.255

hub1(config-ext-nacl)# deny ip 192.168.100.0 0.0.0.255 192.168.0.0 0.0.255.255

hub1(config-ext-nacl)# deny ip 192.168.100.0 0.0.0.255 10.0.0.0 0.255.255.255

hub1(config-ext-nacl)# deny gre any any

hub1(config-ext-nacl)# permit ip any any

hub1(config-ext-nacl)#exit

hub1(config)#

4.    Прикрепите крипто-карту и список доступа на внешний интерфейс:

hub1(config)#interface GigabitEthernet0/0

hub1(config-if)# ip access-group FIREWALL_OUT out

hub1(config-if)# crypto map VPN

hub1(config-if)#exit

5.    Отключите проверку списка отозванных сертификатов (CRL):

Если требуется проверка CRL (рекомендуется) – смотрите настройку в базовых сценариях.

hub1(config)#crypto pki trustpoint s-terra_technological_trustpoint

hub1(ca-trustpoint)# revocation-check none

hub1(ca-trustpoint)#exit

hub1(config)#

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

Настройки применяются по выходе из консоли при помощи команды end.

hub1(config)#end

7.    Проверьте доступность маршрута по умолчанию:

hub1#ping 100.100.100.1

PING 100.100.100.1 (100.100.100.1) 100(128) bytes of data.

108 bytes from 100.100.100.1: icmp_req=1 ttl=64 time=0.465 ms

108 bytes from 100.100.100.1: icmp_req=2 ttl=64 time=0.231 ms

108 bytes from 100.100.100.1: icmp_req=3 ttl=64 time=0.213 ms

108 bytes from 100.100.100.1: icmp_req=4 ttl=64 time=0.239 ms

108 bytes from 100.100.100.1: icmp_req=5 ttl=64 time=0.255 ms

 

--- 100.100.100.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4002ms

rtt min/avg/max/mdev = 0.213/0.280/0.465/0.094 ms

Параметры IPsec и Firewall приведены в приложении.

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

На центральных шлюзах должно быть по одному mGRE-интерфейсу, а на филиальных – по два (по одному на каждый центральный шлюз).

1.    Настройки mGRE интерфейсов осуществляются из linux bash, чтобы попасть в linux bash выполните следующую команду в CLI разграничения доступа:

administrator@hub1] system

Entering system shell...

root@hub1:~#

2.    Создайте файл /etc/network/interfaces.d/mgre0 и добавьте в него следующе содержимое:

Имя mGRE-интерфейса должно соответствовать шаблону: mgreN, где N – целое число.

auto mgre0

iface mgre0 inet static

address 10.10.10.100

netmask 255.255.255.0

pre-up ip tunnel add mgre0 mode gre key 1 ttl 64 tos inherit

pre-up ip link set mgre0 mtu 1400

pre-up ip link set mgre0 multicast on

3.    Поднимите mGRE-интерфейс:

root@hub1:~# ifup mgre0

4.    Убедитесь, что mGRE-интерфейс создан с нужными параметрами:

root@hub1:~# ip tunnel show mgre0

mgre0: gre/ip  remote any  local any  ttl 64  tos inherit key 1

root@hub1:~# ip address show dev mgre0

5: mgre0: <MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN

    link/gre 0.0.0.0 brd 0.0.0.0

    inet 10.10.10.100/24 brd 10.10.10.255 scope global mgre0

Настройки mGRE-интерфейса приведены в приложении.

Настройка NHRP

Настройка NHRP осуществляются из linux bash.

1.    Приведите файл /etc/opennhrp/opennhrp.conf к виду:

interface mgre0

 multicast dynamic

 holding-time 7200

 cisco-authentication secret

 non-caching

2.    Добавьте сервис OpenNHRP в автозагрузку и запустите его:

root@hub1:~# update-rc.d opennhrp enable

update-rc.d: using dependency based boot sequencing

root@hub1:~# service opennhrp start

opennhrp[3263]: OpenNHRP upstream/0.14.1-10-ge6ad153 starting

opennhrp[3263]: Interface lo: configured UP, mtu=16436

opennhrp[3263]: Interface eth0: configured UP, mtu=1500

opennhrp[3263]: Interface eth1: configured UP, mtu=1500

opennhrp[3263]: Interface gre0: config change, mtu=1476

opennhrp[3263]: Interface mgre0: configured UP, mtu=1400

opennhrp[3263]: Interface mgre0: GRE configuration changed. Purged 0 peers.

opennhrp[3263]: Filter code installed (20 opcodes)

Настройки NHRP приведены в приложении.

Настройка OSPF

Динамическая маршрутизация настраивается через консоль сервиса FRR (аналог Quagga).

1.     Войдите в консоль сервиса FRR, для этого нужно из linux bash набрать следующую команду:

root@hub1:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

 

hub1#

2.    Настройте OSPF (см. описание https://frrouting.org/user-guide/ospfd.html):

Соответствие между именами интерфейсов в нотации linux и cisco-like можно посмотреть в файле /etc/ifaliases.cf.

hub1# conf t

hub1(config)# interface eth1

hub1(config-if)#  ip ospf authentication message-digest

hub1(config-if)#  ip ospf cost 1

hub1(config-if)#  ip ospf message-digest-key 1 md5 russia

hub1(config-if)#  ip ospf priority 20

hub1(config-if)# interface mgre0

hub1(config-if)#  ip ospf authentication message-digest

hub1(config-if)#  ip ospf cost 1

hub1(config-if)#  ip ospf message-digest-key 1 md5 russia

hub1(config-if)#  ip ospf priority 20

hub1(config-if)#

hub1(config-if)# router ospf

hub1(config-router)#  ospf router-id 192.168.255.10

hub1(config-router)#  network 10.10.10.0/24 area 0.0.0.0

hub1(config-router)#  network 192.168.255.0/24 area 0.0.0.1

hub1(config-router)#  area 0.0.0.0 authentication message-digest

hub1(config-router)#  area 0.0.0.0 export-list DENY_MGRE_LAN

hub1(config-router)#  area 0.0.0.1 authentication message-digest

hub1(config-router)#  area 0.0.0.1 export-list PERMIT_HUB_LAN

hub1(config-router)#

hub1(config-router)# access-list DENY_MGRE_LAN deny 10.10.10.0/24

hub1(config)# access-list DENY_MGRE_LAN deny 10.10.20.0/24

hub1(config)# access-list DENY_MGRE_LAN permit any

hub1(config)# access-list PERMIT_HUB_LAN permit 192.168.100.0/24

hub1(config)# access-list PERMIT_HUB_LAN deny any

hub1(config)# exit

hub1# write

Note: this version of vtysh never writes vtysh.conf

Building Configuration...

Integrated configuration saved to /etc/frr/frr.conf

[OK]

Настройки OSPF приведены в приложении.

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

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

Настройка устройства Hub2 осуществляется аналогично устройству Hub1 с учетом соответствующих IP-адресов (см. рисунок 1).

Значение mGRE key на Hub1 и Hub2 должно быть различным.

В приложении представлены соответствующие конфигурационные файлы.

Настройка устройства Spoke1-n1

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

Краткий план настройки:

1.    Базовые сетевые настройки.

2.    Настройка IPsec и Firewall.

3.    Настройка mGRE-интерфейсов.

4.    Настройка NHRP.

5.    Настройка OSPF.

6.    Настройка VRRP.

Базовые сетевые настройки

1.    Войдите в CLI разграничения доступа (или Initial CLI). Для этого, после появления сообщения:

S-Terra administrative console

введите логин и пароль для CLI разграничения доступа:

Пользователь и пароль по умолчанию: administrator, s-terra. Обязательно смените пароль для пользователя administrator при помощи команды change user password.

login as: administrator

administrator's password:

administrator@sterragate]

2.    Базовые сетевые настройки осуществляются из cisco-like консоли шлюза, чтобы попасть в нее выполните следующую команду в CLI разграничения доступа:

Пользователь и пароль по умолчанию: cscons, csp. Обязательно смените пароль для пользователя cscons и enable пароль. Под пользователем cscons можно осуществлять удаленное управление шлюзом по SSH.

administrator@sterragate] configure

sterragate login: cscons

Password:

S-Terra Gate 4.2.18201 (amd64)

sterragate#

3.    Настройте имя устройства, IP-адреса и маршрут по умолчанию в соответствии с общей схемой стенда (см. рисунок 1):

sterragate#configure terminal

sterragate(config)#hostname spoke1-n1

spoke1-n1(config)#interface GigabitEthernet0/0

spoke1-n1(config-if)# ip address 100.100.1.2 255.255.255.0

spoke1-n1(config-if)# no shutdown

spoke1-n1(config-if)#interface GigabitEthernet0/1

spoke1-n1(config-if)# ip address 192.168.1.10 255.255.255.0

spoke1-n1(config-if)# no shutdown

spoke1-n1(config-if)#ip route 0.0.0.0 0.0.0.0 100.100.1.1

spoke1-n1(config)#end

4.    Проверьте доступность маршрута по умолчанию:

spoke1-n1#ping 100.100.1.1

PING 100.100.1.1 (100.100.1.1) 100(128) bytes of data.

108 bytes from 100.100.1.1: icmp_req=1 ttl=64 time=0.331 ms

108 bytes from 100.100.1.1: icmp_req=2 ttl=64 time=0.219 ms

108 bytes from 100.100.1.1: icmp_req=3 ttl=64 time=0.171 ms

108 bytes from 100.100.1.1: icmp_req=4 ttl=64 time=0.187 ms

108 bytes from 100.100.1.1: icmp_req=5 ttl=64 time=0.163 ms

 

--- 100.100.1.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4001ms

rtt min/avg/max/mdev = 0.163/0.214/0.331/0.062 ms

Настройка IPsec и Firewall

Настройки IPsec и Firewall осуществляются из cisco-like консоли шлюза.

1.    Параметры IKE:

spoke1-n1#conf t

spoke1-n1(config)#crypto isakmp identity dn

spoke1-n1(config)#crypto isakmp session-time-max 10

spoke1-n1(config)#crypto isakmp keepalive 1 3

spoke1-n1(config)#crypto isakmp keepalive retry-count 3

spoke1-n1(config)#

spoke1-n1(config)#crypto isakmp policy 1

spoke1-n1(config-isakmp)# encr gost

spoke1-n1(config-isakmp)# hash gost341112-256-tc26

spoke1-n1(config-isakmp)# authentication gost-sig

spoke1-n1(config-isakmp)# group vko2

spoke1-n1(config-isakmp)#

spoke1-n1(config-isakmp)#exit

2.    Параметры IPsec

2.1.     Список доступа для трафика:

При работе «С-Терра Шлюз» версии 4.2 через NAT в транспортном IPsec режиме нельзя указывать в фильтрах для трафика, требующего шифрование, протоколы отличные от IP. То есть нельзя написать: permit gre host 100.100.1.2 any.

spoke1-n1(config)#ip access-list extended IPSEC_DMVPN

spoke1-n1(config-ext-nacl)# deny   icmp host 100.100.1.2 any

spoke1-n1(config-ext-nacl)# deny   udp host 100.100.1.2 any

spoke1-n1(config-ext-nacl)# deny   tcp host 100.100.1.2 any

spoke1-n1(config-ext-nacl)# deny   ip host 100.100.1.2 host 224.0.0.5

spoke1-n1(config-ext-nacl)# deny   ip host 100.100.1.2 host 224.0.0.6

spoke1-n1(config-ext-nacl)# deny   ip host 100.100.1.2 host 224.0.0.18

spoke1-n1(config-ext-nacl)# permit ip host 100.100.1.2 any

spoke1-n1(config-ext-nacl)#exit

spoke1-n1(config)#

После исключения из шифрования (строки с deny) протоколов ICMP/UDP/TCP под фильтр permit ip host 100.100.1.2 any попадет как раз GRE трафик.

2.2.     Включите автоматическую фрагментацию больших пакетов:

spoke1-n1(config)#crypto ipsec df-bit clear

2.3.     Задайте алгоритм шифрования и режим работы IPsec:

spoke1-n1(config)#crypto ipsec transform-set GOST esp-gost28147-4m-imit

spoke1-n1(cfg-crypto-trans)# mode transport

spoke1-n1(cfg-crypto-trans)#exit

spoke1-n1(config)#

2.4.     Создайте динамическую крипто-карту и привяжите ее к статической:

spoke1-n1(config)#crypto dynamic-map DMAP 1

spoke1-n1(config-crypto-map)# match address IPSEC_DMVPN

spoke1-n1(config-crypto-map)# set transform-set GOST

spoke1-n1(config-crypto-map)# set dead-connection history off

spoke1-n1(config-crypto-map)#crypto map VPN 1 ipsec-isakmp dynamic DMAP

spoke1-n1(config)#

3.    Параметры Firewall:

3.1.     Список доступа для трафика:

Список доступа должен блокировать открытый трафик из защищаемый подсети шлюза в подсети RFC1918/RFC6598 (считаем, что трафик непубличных подсетей должен обязательно шифроваться), а также незашифрованный GRE.

spoke1-n1(config)#ip access-list extended FIREWALL_OUT

spoke1-n1(config-ext-nacl)# deny ip 192.168.1.0 0.0.0.255 100.64.0.0 0.63.255.255

spoke1-n1(config-ext-nacl)# deny ip 192.168.1.0 0.0.0.255 172.16.0.0 0.15.255.255

spoke1-n1(config-ext-nacl)# deny ip 192.168.1.0 0.0.0.255 192.168.0.0 0.0.255.255

spoke1-n1(config-ext-nacl)# deny ip 192.168.1.0 0.0.0.255 10.0.0.0 0.255.255.255

spoke1-n1(config-ext-nacl)# deny gre any any

spoke1-n1(config-ext-nacl)# permit ip any any

spoke1-n1(config-ext-nacl)#exit

spoke1-n1(config)#

4.    Прикрепите крипто-карту и список доступа на внешний интерфейс:

spoke1-n1(config)#interface GigabitEthernet0/0

spoke1-n1(config-if)# ip access-group FIREWALL_OUT out

spoke1-n1(config-if)# crypto map VPN

spoke1-n1(config-if)#exit

5.    Отключите проверку списка отозванных сертификатов (CRL):

Если требуется проверка CRL (рекомендуется) – смотрите настройку в базовых сценариях.

spoke1-n1(config)#crypto pki trustpoint s-terra_technological_trustpoint

spoke1-n1(ca-trustpoint)#revocation-check none

spoke1-n1(ca-trustpoint)#exit

spoke1-n1(config)#

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

Настройки применяются по выходе из консоли при помощи команды end.

spoke1-n1(config)#end

7.    Проверьте доступность маршрута по умолчанию:

spoke1-n1#ping 100.100.1.1

PING 100.100.1.1 (100.100.1.1) 100(128) bytes of data.

108 bytes from 100.100.1.1: icmp_req=1 ttl=64 time=0.409 ms

108 bytes from 100.100.1.1: icmp_req=2 ttl=64 time=0.247 ms

108 bytes from 100.100.1.1: icmp_req=3 ttl=64 time=0.183 ms

108 bytes from 100.100.1.1: icmp_req=4 ttl=64 time=0.183 ms

108 bytes from 100.100.1.1: icmp_req=5 ttl=64 time=0.212 ms

 

--- 100.100.1.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4004ms

rtt min/avg/max/mdev = 0.183/0.246/0.409/0.086 ms

Параметры IPsec и Firewall приведены в приложении.

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

1.    Настройки mGRE интерфейсов осуществляются из linux bash, чтобы попасть в linux bash выполните следующую команду в CLI разграничения доступа:

administrator@spoke1-n1] system

Entering system shell...

root@spoke1-n1:~#

2.    Создайте файл /etc/network/interfaces.d/mgre0 и добавьте в него следующе содержимое:

Имя mGRE-интерфейса должно соответствовать шаблону: mgreN, где N – целое число.

auto mgre0

iface mgre0 inet static

address 10.10.10.1

netmask 255.255.255.0

pre-up ip tunnel add mgre0 mode gre key 1 ttl 64 tos inherit

pre-up ip link set mgre0 mtu 1400

pre-up ip link set mgre0 multicast on

3.    Создайте файл /etc/network/interfaces.d/mgre1 и добавьте в него следующе содержимое:

Имя mGRE-интерфейса должно соответствовать шаблону: mgreN, где N – целое число.

auto mgre1

iface mgre1 inet static

address 10.10.20.1

netmask 255.255.255.0

pre-up ip tunnel add mgre1 mode gre key 2 ttl 64 tos inherit

pre-up ip link set mgre1 mtu 1400

pre-up ip link set mgre1 multicast on

4.    Поднимите mGRE-интерфейсы:

root@spoke1-n1:~# ifup mgre0

root@spoke1-n1:~# ifup mgre1

5.    Убедитесь, что mGRE-интерфейсы созданы с нужными параметрами:

root@spoke1-n1:~# ip tunnel show mgre0

mgre0: gre/ip  remote any  local any  ttl 64  tos inherit key 1

root@spoke1-n1:~# ip tunnel show mgre1

mgre1: gre/ip  remote any  local any  ttl 64  tos inherit key 2

root@spoke1-n1:~# ip address show dev mgre0

5: mgre0: <MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN

    link/gre 0.0.0.0 brd 0.0.0.0

    inet 10.10.10.1/24 brd 10.10.10.255 scope global mgre0

root@spoke1-n1:~# ip address show dev mgre1

6: mgre1: <MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN

    link/gre 0.0.0.0 brd 0.0.0.0

    inet 10.10.20.1/24 brd 10.10.20.255 scope global mgre1

Настройки mGRE-интерфейсов приведены в приложении.

Настройка NHRP

Настройка NHRP осуществляются из linux bash.

1.    Приведите файл /etc/opennhrp/opennhrp.conf к виду:

На всех филиальных шлюзах настройки (/etc/opennhrp/opennhrp.conf)  NHRP должны быть одинаковыми.

interface mgre0

 map 10.10.10.100/24 172.16.100.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

interface mgre1

 map 10.10.20.200/24 172.17.200.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

2.    Добавьте сервис OpenNHRP в автозагрузку и запустите его:

root@spoke1-n1:~# update-rc.d opennhrp enable

update-rc.d: using dependency based boot sequencing

root@spoke1-n1:~# service opennhrp start

opennhrp[3381]: OpenNHRP upstream/0.14.1-10-ge6ad153 starting

opennhrp[3381]: Interface lo: configured UP, mtu=16436

opennhrp[3381]: Interface eth0: configured UP, mtu=1500

opennhrp[3381]: Interface eth1: configured UP, mtu=1500

opennhrp[3381]: Interface gre0: config change, mtu=1476

opennhrp[3381]: Interface mgre0: configured UP, mtu=1400

opennhrp[3381]: Interface mgre0: GRE configuration changed. Purged 1 peers.

opennhrp[3381]: Interface mgre1: configured UP, mtu=1400

opennhrp[3381]: Interface mgre1: GRE configuration changed. Purged 1 peers.

opennhrp[3381]: Filter code installed (23 opcodes)

3.    Через некоторое время проверьте, что между Spoke1-n1 и центральными шлюзами Hub1, Hub2 поднялись IPsec туннели (если туннели не поднялись – проверьте настройки сети/IPsec/Firewall/NHRP, лог-файл /var/log/cspvpngate.log):

root@spoke1-n1:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 1 (100.100.1.2,4500)-(172.17.200.2,4500) active 1936 1828

2 2 (100.100.1.2,4500)-(172.16.100.2,4500) active 1936 1828

 

IPsec connections:

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

1 1 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 2440 2496

2 2 (100.100.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 1240 896

Настройки NHRP приведены в приложении.

Настройка OSPF

Динамическая маршрутизация настраивается через консоль сервиса FRR (аналог Quagga).

1.     Войдите в консоль сервиса FRR, для этого нужно из linux bash набрать следующую команду:

root@spoke1-n1:~# vtysh

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

 

spoke1-n1#

2.    Настройте OSPF (см. описание https://frrouting.org/user-guide/ospfd.html):

Соответствие между именами интерфейсов в нотации linux и cisco-like можно посмотреть в файле /etc/ifaliases.cf.

spoke1-n1# conf t

spoke1-n1(config)# interface mgre0

spoke1-n1(config-if)#  ip ospf authentication message-digest

spoke1-n1(config-if)#  ip ospf message-digest-key 1 md5 russia

spoke1-n1(config-if)#  ip ospf cost 1

spoke1-n1(config-if)#  ip ospf priority 0

spoke1-n1(config-if)# interface mgre1

spoke1-n1(config-if)#  ip ospf authentication message-digest

spoke1-n1(config-if)#  ip ospf message-digest-key 1 md5 russia

spoke1-n1(config-if)#  ip ospf priority 0

spoke1-n1(config-if)#

spoke1-n1(config-if)# router ospf

spoke1-n1(config-router)#  ospf router-id 192.168.1.10

spoke1-n1(config-router)#  passive-interface eth1

spoke1-n1(config-router)#  network 10.10.10.0/24 area 0.0.0.0

spoke1-n1(config-router)#  network 10.10.20.0/24 area 0.0.0.0

spoke1-n1(config-router)#  network 192.168.1.0/24 area 0.0.0.0

spoke1-n1(config-router)#  area 0.0.0.0 authentication message-digest

spoke1-n1(config-line)# end

spoke1-n1# write

Note: this version of vtysh never writes vtysh.conf

Building Configuration...

Integrated configuration saved to /etc/frr/frr.conf

[OK]

Настройки OSPF приведены в приложении.

Настройка VRRP

Настройка VRRP осуществляются из linux bash.

1.    Приведите файл /etc/keepalived/scripts/notify_backup к виду:

#!/bin/bash

# Script to run during BACKUP transit

vtysh -c "conf t" -c "router ospf" -c "passive-interface mgre0" -c "passive-interface mgre1"

exit 0

Если нода переходит в состояние BACKUP, то выключаем OSPF на mGRE-интерфейсах.

2.    Приведите файл /etc/keepalived/scripts/notify_fault к виду:

#!/bin/bash

# Script to run during FAULT transit

vtysh -c "conf t" -c "router ospf" -c "passive-interface mgre0" -c "passive-interface mgre1"

exit 0

Если нода переходит в состояние FAULT, то выключаем OSPF на mGRE-интерфейсах.

3.    Приведите файл /etc/keepalived/scripts/notify_master к виду:

#!/bin/bash

# Script to run during MASTER transit

vtysh -c "conf t" -c "router ospf" -c "no passive-interface mgre0" -c "no passive-interface mgre1"

exit 0

Если нода переходит в состояние MASTER, то включаем OSPF на mGRE-интерфейсах.

4.    Приведите файл /etc/keepalived/keepalived.conf к виду:

vrrp_script check_run_service_vpnsvc {

  script "/etc/keepalived/scripts/check_run_service 'vpnsvc'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_opennhrp {

  script "/etc/keepalived/scripts/check_run_service 'opennhrp'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_ospfd {

  script "/etc/keepalived/scripts/check_run_service 'ospfd'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_zebra {

  script "/etc/keepalived/scripts/check_run_service 'zebra'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_isp_link {

  script "/etc/keepalived/scripts/check_ping 'eth0' '172.16.1.1 172.17.1.1' "

  fall 15

  rise 10

  timeout 5

  interval 1

}

 

vrrp_instance eth1_1 {

  interface eth1

  track_interface {

        eth0

  }

  track_script {

    check_run_service_vpnsvc

    check_run_service_opennhrp

    check_run_service_ospfd

    check_run_service_zebra

    check_isp_link

  }

  virtual_ipaddress {

    192.168.1.1/24

  }

  nopreempt

  garp_master_refresh 5

  priority 100

  advert_int 1

  virtual_router_id 1

  notify_master /etc/keepalived/scripts/notify_master

  notify_backup /etc/keepalived/scripts/notify_backup

  notify_fault /etc/keepalived/scripts/notify_fault

}

Сервис Keepalived проверяет:

·         запущены ли сервисы vpnsvc, opennhrp, ospfd, zebra и, если какой-либо из них остановлен, то нода переводится в состояние FAULT;

·         доступность канала Интернет через интерфейс eth0, доступность канала определяется по доступности хостов по протоколу ICMP, если все хосты недоступны, то нода переводится в состояние FAULT;

·         состояние сетевого интерфейса eth0, если интерфейс теряет несущую (отключили сетевой кабель) или переходит в состояние down, то нода переводится в состояние FAULT.

5.    Добавьте сервис Keepalived в автозагрузку и запустите его:

root@spoke1-n1:~# update-rc.d keepalived enable

update-rc.d: using dependency based boot sequencing

root@spoke1-n1:~# service keepalived start

Starting keepalived: keepalived.

6.    Убедитесь, что нода перешла в состояние MASTER (см. рисунок 2):

root@spoke1-n1:~# tail -n 300 /var/log/cspvpngate.log | grep Keepalived

Рисунок 2. Успешный переход кластера в состояние MASTER

7.    Убедитесь, что на внутреннем интерфейсе eth1 появился кластерный VIP-адрес:

root@spoke1-n1:~# ip address show dev eth1

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:70:a0:eb brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1

    inet 192.168.1.1/24 scope global secondary eth1

Настройки VRRP приведены в приложении.

Настройка устройства Spoke1-n2

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

Настройка устройства Spoke1-n2 осуществляется аналогично устройству Spoke1-n1 с учетом соответствующих IP-адресов (см. рисунок 1).

Значение router-id в OSPF у резервной ноды должно отличаться от значения основной ноды (Spoke1-n1).

Значение priority в VRRP у резервной ноды должно быть меньше чем у основной.

В приложении представлены соответствующие конфигурационные файлы.

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

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

Настройка устройства Spoke2 осуществляется аналогично устройству Spoke1-n1 (за исключением отсутствия необходимости настраивать VRRP) с учетом соответствующих IP-адресов (см. рисунок 1).

В приложении представлены соответствующие конфигурационные файлы.


 

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

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

1.    Все узлы в центральном офисе и филиалах функционируют и исправны.

2.    Проблема на основном шлюзе в центральном офисе: отказ центрального шлюза, отказ внешнего сетевого интерфейса.

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

Все узлы в центральном офисе и филиалах функционируют и исправны

1.    Убедитесь, что на центральных шлюзах установлены IPsec-туннели со всеми филиальными шлюзами, для этого в linux bash выполните следующую команду:

root@hub1:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 25 (100.100.100.2,4500)-(172.16.2.2,4500) active 5616 5652

2 30 (100.100.100.2,4500)-(172.16.1.2,4500) active 3016 3060

3 31 (100.100.100.2,4500)-(172.17.1.2,4500) active 3416 3460

 

IPsec connections:

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

1 398 (100.100.100.2,*)-(172.16.2.2,*) * ESP nat-t-trans 565376 516080

2 399 (100.100.100.2,*)-(172.16.1.2,*) * ESP nat-t-trans 202792 178944

3 400 (100.100.100.2,*)-(172.17.1.2,*) * ESP nat-t-trans 105440 62160

root@hub2:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 1 (100.100.200.2,4500)-(172.16.2.2,4500) active 43016 43052

2 3 (100.100.200.2,4500)-(172.16.1.2,4500) active 2916 2960

3 4 (100.100.200.2,4500)-(172.17.1.2,4500) active 2916 2960

 

IPsec connections:

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

1 13 (100.100.200.2,*)-(172.16.2.2,*) * ESP nat-t-trans 92256 82448

2 14 (100.100.200.2,*)-(172.16.1.2,*) * ESP nat-t-trans 97960 77200

3 15 (100.100.200.2,*)-(172.17.1.2,*) * ESP nat-t-trans 97216 57240

Видно, что на каждом центральном шлюзе установлено по три IPsec-туннеля – два с нодами кластера в первом филиале (IP-адреса 172.16.1.2, 172.17.1.2) и третий со шлюзом во втором филиале (IP-адрес: 172.16.2.2).  Строка «ESP nat-t-trans» свидетельствует о том, что IPsec-туннель работает в транспортном режиме через NAT.

2.    Убедитесь, что на центральных шлюзах протокол NHRP верно отображает информацию о филиальных шлюзах, для этого в linux bash выполните следующую команду:

root@hub1:~# opennhrpctl show

Status: ok

 

Interface: mgre0

Type: local

Protocol-Address: 10.10.10.255/32

Alias-Address: 10.10.10.100

Flags: up

 

Interface: mgre0

Type: local

Protocol-Address: 10.10.10.100/32

Flags: up

 

Interface: mgre0

Type: dynamic

Protocol-Address: 10.10.10.1/32

NBMA-Address: 172.16.1.2

NBMA-NAT-OA-Address: 100.100.1.2

Flags: up

Expires-In: 0:09

 

Interface: mgre0

Type: dynamic

Protocol-Address: 10.10.10.3/32

NBMA-Address: 172.16.2.2

Flags: up

Expires-In: 0:08

 

Interface: mgre0

Type: dynamic

Protocol-Address: 10.10.10.2/32

NBMA-Address: 172.17.1.2

NBMA-NAT-OA-Address: 100.101.1.2

Flags: up

Expires-In: 0:07

root@hub2:~# opennhrpctl show

Status: ok

 

Interface: mgre0

Type: local

Protocol-Address: 10.10.20.255/32

Alias-Address: 10.10.20.200

Flags: up

 

Interface: mgre0

Type: local

Protocol-Address: 10.10.20.200/32

Flags: up

 

Interface: mgre0

Type: dynamic

Protocol-Address: 10.10.20.1/32

NBMA-Address: 172.16.1.2

NBMA-NAT-OA-Address: 100.100.1.2

Flags: up

Expires-In: 0:09

 

Interface: mgre0

Type: dynamic

Protocol-Address: 10.10.20.3/32

NBMA-Address: 172.16.2.2

Flags: up

Expires-In: 0:08

 

Interface: mgre0

Type: dynamic

Protocol-Address: 10.10.20.2/32

NBMA-Address: 172.17.1.2

NBMA-NAT-OA-Address: 100.101.1.2

Flags: up

Expires-In: 0:07

Видно, что на каждом центральном шлюзе протокол NHRP корректно отображает информацию о филиальных шлюзах (записи с пометкой «Type: dynamic»), а именно mGRE-адрес (Protocol-Address) соответствует NBMA IP-адресу (NBMA-Address). Также верно отображается информация об исходном IP-адресе до выполнения процедуры трансляции (NBMA-NAT-OA-Address) для тех шлюзов, которые находятся за устройствами, выполняющими функции NAT.

3.    Убедитесь, что на центральных шлюзах подсистема ip neighbor ядра ОС Linux корректно отображает информацию о маппинге mGRE-адреса в NBMA-адрес филиальных шлюзов, для этого в linux bash выполните следующую команду:

root@hub1:~# ip neighbor show

10.10.10.1 dev mgre0 lladdr 172.16.1.2 REACHABLE

192.168.255.1 dev eth1 lladdr 00:0c:29:c8:07:da REACHABLE

10.10.10.2 dev mgre0 lladdr 172.17.1.2 REACHABLE

100.100.100.1 dev eth0 lladdr 00:0c:29:03:3e:0c REACHABLE

10.10.10.3 dev mgre0 lladdr 172.16.2.2 REACHABLE

root@hub2:~# ip neighbor show

10.10.20.2 dev mgre0 lladdr 172.17.1.2 REACHABLE

100.100.200.1 dev eth0 lladdr 00:0c:29:71:db:c1 DELAY

10.10.20.1 dev mgre0 lladdr 172.16.1.2 REACHABLE

10.10.20.3 dev mgre0 lladdr 172.16.2.2 REACHABLE

Видно, что на каждом центральном шлюзе маппинг mGRE-адреса в NBMA-адрес филиальных шлюзов выполнен верно. Маппинги имеют статус REACHABLE.

4.    Убедитесь, что на центральных шлюзах корректно работает протокол OSPF, для этого зайдите в linux bash выполните следующие команды:

root@hub1:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

hub1# show ip ospf neighbor

 

Neighbor ID     Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL

192.168.1.10      0 Full/DROther      30.629s 10.10.10.1      mgre0:10.10.10.100       0     0     0

192.168.2.1       0 Full/DROther      35.875s 10.10.10.3      mgre0:10.10.10.100       0     0     0

192.168.255.1     1 Full/DR           35.923s 192.168.255.1   eth1:192.168.255.10      0     0     0

192.168.255.20   10 Full/DROther      31.197s 192.168.255.20  eth1:192.168.255.10      0     0     0

hub1# show ip route ospf

Codes: K - kernel route, C - connected, S - static, R - RIP,

       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,

       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,

       > - selected route, * - FIB route

 

O   10.10.10.0/24 [110/1] is directly connected, mgre0, 6d00h16m

O>* 10.10.20.0/24 [110/11] via 10.10.10.1, mgre0, 04:55:30

  *                        via 10.10.10.3, mgre0, 04:55:30

O>* 192.168.1.0/24 [110/101] via 10.10.10.1, mgre0, 04:59:57

O>* 192.168.2.0/24 [110/101] via 10.10.10.3, mgre0, 05:11:51

O>* 192.168.100.0/24 [110/101] via 192.168.255.1, eth1, 6d00h16m

O   192.168.255.0/24 [110/1] is directly connected, eth1, 6d00h16m

root@hub2:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

hub2# show ip ospf neighbor

 

Neighbor ID     Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL

192.168.1.10      0 Full/DROther      32.643s 10.10.20.1      mgre0:10.10.20.200       0     0     0

192.168.2.1       0 Full/DROther      37.890s 10.10.20.3      mgre0:10.10.20.200       0     0     0

192.168.255.1     1 Full/DR           37.940s 192.168.255.1   eth1:192.168.255.20      0     0     0

192.168.255.10   20 Full/Backup       32.642s 192.168.255.10  eth1:192.168.255.20      0     0     0

hub2# show ip route ospf

Codes: K - kernel route, C - connected, S - static, R - RIP,

       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,

       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,

       > - selected route, * - FIB route

 

O>* 10.10.10.0/24 [110/11] via 10.10.20.1, mgre0, 04:57:03

  *                        via 10.10.20.3, mgre0, 04:57:03

O   10.10.20.0/24 [110/10] is directly connected, mgre0, 04:59:33

O>* 192.168.1.0/24 [110/110] via 10.10.20.1, mgre0, 04:57:03

O>* 192.168.2.0/24 [110/110] via 10.10.20.3, mgre0, 04:58:03

O>* 192.168.100.0/24 [110/200] via 192.168.255.1, eth1, 04:58:54

O   192.168.255.0/24 [110/100] is directly connected, eth1, 04:58:54

Видно, что на каждом центральном шлюзе по протоколу OSPF установлено соседство с другим центральным шлюзом, а также с основной нодой кластера в филиале №1 (Neighbor ID 192.168.1.10), со шлюзом в филиале №2 (Neighbor ID 192.168.2.1) и роутером Int_router1_Hub (Neighbor ID 192.168.255.1). Соседство с резервной нодой кластера в филиале №1 отсутствует, как и требуется (mGRE-интерфейсы на резервной ноде переводятся в состояние passive). Филиальные шлюзы не являются ни DR, ни BDR.

Маршруты до филиальных подсетей (192.168.1.0/24 и 192.168.2.0/24) в таблице маршрутизации присутствуют.

5.    Убедитесь, что основная нода кластера в филиале №1 находится в состоянии MASTER, для этого в linux bash выполните следующие команды:

root@spoke1-n1:~# ip address show dev eth1

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:70:a0:eb brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1

    inet 192.168.1.1/24 scope global secondary eth1

root@spoke1-n1:~# tcpdump -i eth1 -n -c 4 vrrp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes

13:55:37.067997 IP 192.168.1.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 1s, length 20

13:55:38.069075 IP 192.168.1.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 1s, length 20

13:55:39.070165 IP 192.168.1.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 1s, length 20

13:55:40.071247 IP 192.168.1.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 1s, length 20

4 packets captured

4 packets received by filter

0 packets dropped by kernel

Видно, что на внутреннем интерфейсе eth1 имеется VIP-адрес 192.168.1.1, а также с данного интерфейса (с IP-адреса 192.168.1.10) отсылаются VRRP пакеты.

6.    Убедитесь, что защищенное соединение между основной нодой кластера в филиале №1 и шлюзом в филиале №2 успешно строится, для этого запустите ping с устройства host-b-spoke1 на устройство host-b-spoke2 и проверьте наличие IPsec-туннеля на основной ноде кластера в филиале №1:

root@host-b-spoke1:~# ping 192.168.2.100 -c 4

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

64 bytes from 192.168.2.100: icmp_seq=1 ttl=62 time=377 ms

64 bytes from 192.168.2.100: icmp_seq=2 ttl=62 time=0.853 ms

64 bytes from 192.168.2.100: icmp_seq=3 ttl=62 time=0.838 ms

64 bytes from 192.168.2.100: icmp_seq=4 ttl=62 time=0.828 ms

 

--- 192.168.2.100 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 0.828/95.013/377.536/163.114 ms

root@spoke1-n1:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 71 (100.100.1.2,4500)-(172.16.100.2,4500) active 1936 1828

2 72 (100.100.1.2,4500)-(172.17.200.2,4500) active 1936 1828

3 73 (100.100.1.2,4500)-(172.16.2.2,4500) active 1936 1836

 

IPsec connections:

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

1 400 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 24768 31424

2 401 (100.100.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 49840 56480

3 402 (100.100.1.2,*)-(172.16.2.2,*) * ESP nat-t-trans 384 384

Видно, что пакеты успешно дошли от host-b-spoke1 до host-b-spoke2, а также построился IPsec-туннель между основной нодой кластера в филиале №1 и шлюзом в филиале №2.

Проблема на основном шлюзе в центральном офисе

Смоделируем отказ внешнего сетевого интерфейса eth0 на основном центральном шлюзе Hub1 и проверим работоспособность стенда.

1.    Переведите внешний сетевой интерфейс eth0 на основном центральном шлюзе Hub1 в состояние DOWN, для этого в linux bash выполните следующую команду:

root@hub1:~# ifconfig eth0 down

2.    Подождите некоторое время и убедитесь в том, что на основной ноде кластера в филиале №1 и на шлюзе в филиале №2 IPsec-туннель с Hub1 отсутствует и маршруты в защищаемые подсети доступны через mGRE-интерфейс mgre1, для этого в linux bash выполните следующие команды:

root@spoke1-n1:~# sa_mgr show

ISAKMP sessions: 1 initiated, 0 responded

 

ISAKMP connections:

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

1 75 (100.100.1.2,4500)-(172.17.200.2,4500) active 10644 10860

2 116 (100.100.1.2,500)-(172.16.100.2,500) incompleted 388 0

 

IPsec connections:

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

1 490 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 118360 150400

root@spoke1-n1:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke1-n1# show ip route ospf

Codes: K - kernel route, C - connected, S - static, R - RIP,

       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,

       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,

       > - selected route, * - FIB route

 

O   10.10.10.0/24 [110/1] is directly connected, mgre0, 00:03:16

O   10.10.20.0/24 [110/10] is directly connected, mgre1, 2d01h02m

O   192.168.1.0/24 [110/100] is directly connected, eth1, 01w0d20h

O>* 192.168.2.0/24 [110/110] via 10.10.20.3, mgre1, 00:03:16

O>* 192.168.100.0/24 [110/210] via 10.10.20.200, mgre1, 00:03:16

root@spoke2:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 83 (172.16.2.2,4500)-(172.17.200.2,4500) active 188036 188260

 

IPsec connections:

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

1 394 (172.16.2.2,*)-(172.17.200.2,*) * ESP nat-t-trans 116576 130640

root@spoke2:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke2# show ip route ospf

Codes: K - kernel route, C - connected, S - static, R - RIP,

       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,

       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,

       > - selected route, * - FIB route

 

O   10.10.10.0/24 [110/1] is directly connected, mgre0, 00:10:34

O   10.10.20.0/24 [110/10] is directly connected, mgre1, 2d01h11m

O>* 192.168.1.0/24 [110/110] via 10.10.20.1, mgre1, 00:10:34

O   192.168.2.0/24 [110/100] is directly connected, eth1, 02:04:31

O>* 192.168.100.0/24 [110/210] via 10.10.20.200, mgre1, 00:10:34

3.    Убедитесь, что трафик между защищаемым подсетями филиала №1 и центрального офиса шифруется, для этого запустите ping с устройства host-b-spoke1 на устройство host-b-hub и удостоверьтесь в прохождении пакетов:

root@host-b-spoke1:~# ping 192.168.100.100 -c 4

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

64 bytes from 192.168.100.100: icmp_seq=1 ttl=61 time=1.43 ms

64 bytes from 192.168.100.100: icmp_seq=2 ttl=61 time=1.08 ms

64 bytes from 192.168.100.100: icmp_seq=3 ttl=61 time=1.21 ms

64 bytes from 192.168.100.100: icmp_seq=4 ttl=61 time=1.18 ms

 

--- 192.168.100.100 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 1.080/1.229/1.439/0.137 ms

4.    Убедитесь, что защищенное соединение между основной нодой кластера в филиале №1 и шлюзом в филиале №2 успешно строится, для этого запустите ping с устройства host-b-spoke1 на устройство host-b-spoke2 и проверьте наличие IPsec-туннеля на основной ноде кластера в филиале №1:

root@host-b-spoke1:~# ping 192.168.2.100 -c 4

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

64 bytes from 192.168.2.100: icmp_seq=1 ttl=61 time=1.99 ms

64 bytes from 192.168.2.100: icmp_seq=2 ttl=62 time=744 ms

64 bytes from 192.168.2.100: icmp_seq=3 ttl=62 time=0.696 ms

64 bytes from 192.168.2.100: icmp_seq=4 ttl=62 time=0.838 ms

 

--- 192.168.2.100 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3002ms

rtt min/avg/max/mdev = 0.696/186.928/744.184/321.732 ms

root@spoke1-n1:~# sa_mgr show

ISAKMP sessions: 1 initiated, 0 responded

 

ISAKMP connections:

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

1 75 (100.100.1.2,4500)-(172.17.200.2,4500) active 10644 10860

2 140 (100.100.1.2,4500)-(172.16.2.2,4500) active 1936 1836

3 141 (100.100.1.2,500)-(172.16.100.2,500) incompleted 388 0

 

IPsec connections:

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

1 490 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 136840 173464

2 492 (100.100.1.2,*)-(172.16.2.2,*) * ESP nat-t-trans 288 288

5.    Переведите внешний сетевой интерфейс eth0 на основном центральном шлюзе Hub1 в состояние UP, для этого в linux bash выполните следующую команду:

root@hub1:~# ifconfig eth0 up

6.    Подождите некоторое время и убедитесь в том, что на основной ноде кластера в филиале №1 и на шлюзе в филиале №2 IPsec-туннель с Hub1 создан и маршруты в защищаемые подсети вновь доступны через mGRE-интерфейс mgre0, для этого в linux bash выполните следующие команды:

root@spoke1-n1:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 75 (100.100.1.2,4500)-(172.17.200.2,4500) active 10900 11132

2 140 (100.100.1.2,4500)-(172.16.2.2,4500) active 1936 1836

3 149 (100.100.1.2,4500)-(172.16.100.2,4500) active 2436 2328

 

IPsec connections:

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

1 492 (100.100.1.2,*)-(172.16.2.2,*) * ESP nat-t-trans 288 288

2 493 (100.100.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 5296 5048

3 494 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 5352 5960

root@spoke1-n1:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke1-n1# show ip route ospf

Codes: K - kernel route, C - connected, S - static, R - RIP,

       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,

       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,

       > - selected route, * - FIB route

 

O   10.10.10.0/24 [110/1] is directly connected, mgre0, 00:24:20

O   10.10.20.0/24 [110/10] is directly connected, mgre1, 2d01h24m

O   192.168.1.0/24 [110/100] is directly connected, eth1, 01w0d20h

O>* 192.168.2.0/24 [110/101] via 10.10.10.3, mgre0, 00:00:40

O>* 192.168.100.0/24 [110/102] via 10.10.10.100, mgre0, 00:01:40

root@spoke2:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 83 (172.16.2.2,4500)-(172.17.200.2,4500) active 190292 190532

2 147 (172.16.2.2,4500)-(172.16.1.2,4500) active 1836 1936

3 156 (172.16.2.2,4500)-(172.16.100.2,4500) active 3628 3528

 

IPsec connections:

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

1 395 (172.16.2.2,*)-(172.16.1.2,*) * ESP nat-t-trans 288 288

2 396 (172.16.2.2,*)-(172.16.100.2,*) * ESP nat-t-trans 5832 4576

3 397 (172.16.2.2,*)-(172.17.200.2,*) * ESP nat-t-trans 10512 12664

root@spoke2:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke2# show ip route ospf

Codes: K - kernel route, C - connected, S - static, R - RIP,

       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,

       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,

       > - selected route, * - FIB route

 

O   10.10.10.0/24 [110/1] is directly connected, mgre0, 00:01:27

O   10.10.20.0/24 [110/10] is directly connected, mgre1, 2d01h25m

O>* 192.168.1.0/24 [110/101] via 10.10.10.1, mgre0, 00:01:27

O   192.168.2.0/24 [110/100] is directly connected, eth1, 02:19:04

O>* 192.168.100.0/24 [110/102] via 10.10.10.100, mgre0, 00:01:27

Видно, что в случае отказа внешнего сетевого интерфейса eth0 основного шлюза Hub1 в центральном офисе динамическое построение защищенных соединений продолжает функционировать, защищаемая подсеть центрального офиса доступна с филиальных шлюзов.

При восстановлении внешнего сетевого интерфейса eth0 все также корректно отрабатывает. Проверку с полным отключением Hub1 повторите по аналогии.

Проблема на основной ноде кластера в филиале

Смоделируем полный отказ основной ноды кластера в филиале №1, а также отказ Интернет провайдера и проверим работоспособность стенда.

1.    Полный отказ основной ноды кластера в филиале №1.

1.1.     Выключите основную ноду, для этого в linux bash выполните следующую команду:

root@spoke1-n1:~# poweroff

1.2.     Убедитесь, что резервная нода перешла в состояние MASTER, для этого в linux bash выполните следующие команды:

root@spoke1-n2:~# ip address show dev eth1

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:9a:f0:bc brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.20/24 brd 192.168.1.255 scope global eth1

    inet 192.168.1.1/24 scope global secondary eth1

root@spoke1-n2:~# tail -n 300 /var/log/cspvpngate.log | grep Keepalived

May 16 11:21:57 spoke1-n2 Keepalived_vrrp[2793]: VRRP_Instance(eth1_1) Transition to MASTER STATE

May 16 11:21:58 spoke1-n2 Keepalived_vrrp[2793]: VRRP_Instance(eth1_1) Entering MASTER STATE

May 16 11:21:58 spoke1-n2 Keepalived_vrrp[2793]: Opening script file /etc/keepalived/scripts/notify_master

Видно, что кластерный VIP-адрес (192.168.1.1) присутствует на внутреннем интерфейсе eth1 и в лог-файле есть строки (Transition to MASTER STATE/ Entering MASTER STATE), свидетельствующие о переходе ноды в состояние MASTER.

1.3.     Убедитесь, что на резервной ноде по протоколу OSPF установлено соседство с центральными шлюзами и получены маршруты в защищаемые подсети, для этого в linux bash выполните следующие команды:

root@spoke1-n2:~# vtysh

 

Hello, this is FRRouting (version 4.1-dev).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke1-n2# show ip ospf neighbor

 

Neighbor ID     Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL

192.168.255.10   20 Full/DR           30.440s 10.10.10.100    mgre0:10.10.10.2         0     0     0

192.168.255.20   10 Full/DR           31.758s 10.10.20.200    mgre1:10.10.20.2         0     0     0

 

spoke1-n2# show ip route ospf

Codes: K - kernel route, C - connected, S - static, R - RIP,

       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,

       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,

       > - selected route, * - FIB route

 

O   10.10.10.0/24 [110/1] is directly connected, mgre0, 00:02:42

O   10.10.20.0/24 [110/10] is directly connected, mgre1, 00:02:41

O   192.168.1.0/24 [110/100] is directly connected, eth1, 2d02h58m

O>* 192.168.2.0/24 [110/101] via 10.10.10.3, mgre0, 00:02:42

O>* 192.168.100.0/24 [110/102] via 10.10.10.100, mgre0, 00:02:42

1.4.     Убедитесь, что защищенное соединение между резервной нодой кластера в филиале №1 и шлюзом в филиале №2 успешно строится, для этого запустите ping с устройства host-b-spoke1 на устройство host-b-spoke2 и проверьте наличие IPsec-туннеля на резервной ноде кластера в филиале №1:

root@host-b-spoke1:~# ping 192.168.2.100 -c 4

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

64 bytes from 192.168.2.100: icmp_seq=1 ttl=61 time=2.20 ms

64 bytes from 192.168.2.100: icmp_seq=2 ttl=62 time=249 ms

64 bytes from 192.168.2.100: icmp_seq=3 ttl=62 time=0.899 ms

64 bytes from 192.168.2.100: icmp_seq=4 ttl=62 time=0.885 ms

 

--- 192.168.2.100 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 0.885/63.427/249.719/107.557 ms

root@spoke1-n2:~# sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

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

1 44 (100.101.1.2,4500)-(172.17.200.2,4500) active 2136 2028

2 45 (100.101.1.2,4500)-(172.16.100.2,4500) active 1936 1828

3 47 (100.101.1.2,4500)-(172.16.2.2,4500) active 1936 1836

 

IPsec connections:

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

1 117 (100.101.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 31816 39984

2 118 (100.101.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 33640 41512

3 119 (100.101.1.2,*)-(172.16.2.2,*) * ESP nat-t-trans 288 288

1.5.     Запустите основную ноду кластера дождитесь ее полной загрузки и убедитесь, что она перешла в состояние BACKUP (основная нода не перехватит роль MASTER, так как в настройках VRRP стоит опция nopreempt), для этого в linux bash выполните следующие команды:

root@spoke1-n1:~# ip address show dev eth1

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:70:a0:eb brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1

root@spoke1-n1:~# tail -n 300 /var/log/cspvpngate.log | grep Keepalived

...

May 16 11:39:05 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Instance(eth1_1) Entering BACKUP STATE

May 16 11:39:05 spoke1-n1 Keepalived_vrrp[2838]: Opening script file /etc/keepalived/scripts/notify_backup

May 16 11:39:05 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Script(check_run_service_vpnsvc) succeeded

May 16 11:39:05 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Script(check_run_service_zebra) succeeded

May 16 11:39:05 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Script(check_run_service_ospfd) succeeded

May 16 11:39:05 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Script(check_run_service_opennhrp) succeeded

May 16 11:39:05 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Script(check_isp_link) succeeded

Видно, что основная нода находится в состоянии BACKUP.

2.    Отказ Интернет провайдера.

2.1.     Чтобы смоделировать отказ Интернет провайдера заблокируем ICMP пакеты от резервной ноды кластера (предполагается, что резервная нода находится в состоянии MASTER, а основная в BACKUP) на роутере Core_router, для этого в linux bash выполните следующую команду:

root@core-router:~# iptables -A INPUT -s 172.17.1.2 -p icmp -j DROP

2.2.     Убедитесь, что резервная нода кластера перешла в состояние FAULT, для этого в linux bash выполните следующую команду:

root@spoke1-n2:~# tail -n 300 /var/log/cspvpngate.log | grep Keepalived

...

May 16 11:50:27 spoke1-n2 Keepalived_vrrp[2793]: pid 5797 exited with status 256

May 16 11:50:28 spoke1-n2 Keepalived_vrrp[2793]: pid 5817 exited with status 256

May 16 11:50:29 spoke1-n2 Keepalived_vrrp[2793]: pid 5838 exited with status 256

May 16 11:50:30 spoke1-n2 Keepalived_vrrp[2793]: pid 5859 exited with status 256

May 16 11:50:31 spoke1-n2 Keepalived_vrrp[2793]: pid 5880 exited with status 256

May 16 11:50:32 spoke1-n2 Keepalived_vrrp[2793]: pid 5901 exited with status 256

May 16 11:50:33 spoke1-n2 Keepalived_vrrp[2793]: pid 5922 exited with status 256

May 16 11:50:34 spoke1-n2 Keepalived_vrrp[2793]: pid 5943 exited with status 256

May 16 11:50:35 spoke1-n2 Keepalived_vrrp[2793]: pid 5964 exited with status 256

May 16 11:50:36 spoke1-n2 Keepalived_vrrp[2793]: pid 5985 exited with status 256

May 16 11:50:37 spoke1-n2 Keepalived_vrrp[2793]: pid 6006 exited with status 256

May 16 11:50:38 spoke1-n2 Keepalived_vrrp[2793]: pid 6027 exited with status 256

May 16 11:50:39 spoke1-n2 Keepalived_vrrp[2793]: pid 6048 exited with status 256

May 16 11:50:40 spoke1-n2 Keepalived_vrrp[2793]: pid 6069 exited with status 256

May 16 11:50:41 spoke1-n2 Keepalived_vrrp[2793]: pid 6090 exited with status 256

May 16 11:50:41 spoke1-n2 Keepalived_vrrp[2793]: VRRP_Script(check_isp_link) failed

May 16 11:50:42 spoke1-n2 Keepalived_vrrp[2793]: VRRP_Instance(eth1_1) Entering FAULT STATE

May 16 11:50:42 spoke1-n2 Keepalived_vrrp[2793]: Opening script file /etc/keepalived/scripts/notify_fault

May 16 11:50:42 spoke1-n2 Keepalived_vrrp[2793]: VRRP_Instance(eth1_1) Now in FAULT state

2.3.     Убедитесь, что основная нода кластера перешла в состояние MASTER, для этого в linux bash выполните следующую команду:

root@spoke1-n1:~# tail -n 300 /var/log/cspvpngate.log | grep Keepalived

...

May 16 11:50:43 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Instance(eth1_1) Transition to MASTER STATE

May 16 11:50:44 spoke1-n1 Keepalived_vrrp[2838]: VRRP_Instance(eth1_1) Entering MASTER STATE

May 16 11:50:44 spoke1-n1 Keepalived_vrrp[2838]: Opening script file /etc/keepalived/scripts/notify_master

2.4.     Удалите на роутере Core_router правила, блокирующие ICMP добавленные ранее, для этого в linux bash выполните следующую команду:

root@core-router:~# iptables -D INPUT -s 172.17.1.2 -p icmp -j DROP

2.5.     Убедитесь, что резервная нода кластера перешла в состояние BACKUP, для этого в linux bash выполните следующую команду:

root@spoke1-n2:~# tail -n 300 /var/log/cspvpngate.log | grep Keepalived

...

May 16 11:56:20 spoke1-n2 Keepalived_vrrp[2793]: pid 13632 exited with status 256

May 16 11:56:21 spoke1-n2 Keepalived_vrrp[2793]: pid 13653 exited with status 256

May 16 11:56:22 spoke1-n2 Keepalived_vrrp[2793]: pid 13674 exited with status 256

May 16 11:56:23 spoke1-n2 Keepalived_vrrp[2793]: pid 13695 exited with status 256

May 16 11:56:24 spoke1-n2 Keepalived_vrrp[2793]: pid 13716 exited with status 256

May 16 11:56:25 spoke1-n2 Keepalived_vrrp[2793]: pid 13737 exited with status 256

May 16 11:56:35 spoke1-n2 Keepalived_vrrp[2793]: VRRP_Script(check_isp_link) succeeded

May 16 11:56:36 spoke1-n2 Keepalived_vrrp[2793]: VRRP_Instance(eth1_1) Entering BACKUP STATE

May 16 11:56:36 spoke1-n2 Keepalived_vrrp[2793]: Opening script file /etc/keepalived/scripts/notify_backup

Видно, что в случае полного отказа основной ноды кластера роль MASTER на себя берет резервная нода и успешно обрабатывает трафик. При отказе Интернет провайдера нода кластера переходит в состояние FAULT, а в случае восстановления в BACKUP.


 

Приложение

Устройство Core_router

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

# To Ext_router1_Hub1

auto ens32

iface ens32 inet static

address 172.16.100.1

netmask 255.255.255.0

 

# To Ext_router2_Hub2

auto ens34

iface ens34 inet static

address 172.17.200.1

netmask 255.255.255.0

 

# To Spoke2

auto ens35

iface ens35 inet static

address 172.16.2.1

netmask 255.255.255.0

 

# To Ext_router2_Spoke1

auto ens36

iface ens36 inet static

address 172.17.1.1

netmask 255.255.255.0

 

# To Ext_router1_Spoke1

auto ens37

iface ens37 inet static

address 172.16.1.1

netmask 255.255.255.0

Устройство Ext_router1_Hub1

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

# To Core_router

auto ens32

iface ens32 inet static

address 172.16.100.2

netmask 255.255.255.0

gateway 172.16.100.1

pre-up /etc/iptables.rules

 

# To Hub1

auto ens34

iface ens34 inet static

address 100.100.100.1

netmask 255.255.255.0

post-up ip route add 192.168.100.0/24 via 100.100.100.2

Настройки iptables

Содержимое файла /etc/iptables.rules:

EXTIF="ens32"

INTIF="ens34"

LAN_RANGE="100.100.100.0/24"

INET_IP1="172.16.100.2"

IPSECGW="100.100.100.2"

 

# Flush previous rules, delete chains and reset counters

iptables -F -t filter

iptables -F -t nat

iptables -F -t mangle

iptables -F

 

# Default policies

iptables -P INPUT   DROP

iptables -P OUTPUT  DROP

iptables -P FORWARD DROP

 

# Enable loopback traffic

iptables -A INPUT  -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

 

# Enable statefull rules (after that, only need to allow NEW conections)

iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate DNAT -j ACCEPT

 

# Drop invalid state packets

iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP

iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP

iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

 

 

### INPUT ###

# SSH

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A INPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### OUTPUT ###

# SSH

iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### FORWARD ###

iptables -A FORWARD -i $INTIF -o $EXTIF -m conntrack --ctstate NEW -j ACCEPT

 

### SNAT ###

iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to-source $INET_IP1

 

### DNAT ###

# IKE/500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 500 -j DNAT --to-destination $IPSECGW:500

# NAT-T/4500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 4500 -j DNAT --to-destination $IPSECGW:4500

 

### LOGGING ###

iptables -A INPUT    -j LOG --log-level debug --log-prefix '[FW INPUT]:    '

iptables -A OUTPUT   -j LOG --log-level debug --log-prefix '[FW OUTPUT]:   '

iptables -A FORWARD  -j LOG --log-level debug --log-prefix '[FW FORWARD]:  '

Устройство Ext_router2_Hub2

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

# To Core_router

auto ens32

iface ens32 inet static

address 172.17.200.2

netmask 255.255.255.0

gateway 172.17.200.1

pre-up /etc/iptables.rules

 

# To Hub2

auto ens34

iface ens34 inet static

address 100.100.200.1

netmask 255.255.255.0

post-up ip route add 192.168.100.0/24 via 100.100.200.2

Настройки iptables

Содержимое файла /etc/iptables.rules:

EXTIF="ens32"

INTIF="ens34"

LAN_RANGE="100.100.200.0/24"

INET_IP1="172.17.200.2"

IPSECGW="100.100.200.2"

 

# Flush previous rules, delete chains and reset counters

iptables -F -t filter

iptables -F -t nat

iptables -F -t mangle

iptables -F

 

# Default policies

iptables -P INPUT   DROP

iptables -P OUTPUT  DROP

iptables -P FORWARD DROP

 

# Enable loopback traffic

iptables -A INPUT  -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

 

# Enable statefull rules (after that, only need to allow NEW conections)

iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate DNAT -j ACCEPT

 

# Drop invalid state packets

iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP

iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP

iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

 

 

### INPUT ###

# SSH

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A INPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### OUTPUT ###

# SSH

iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### FORWARD ###

iptables -A FORWARD -i $INTIF -o $EXTIF -m conntrack --ctstate NEW -j ACCEPT

 

### SNAT ###

iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to-source $INET_IP1

 

### DNAT ###

# IKE/500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 500 -j DNAT --to-destination $IPSECGW:500

# NAT-T/4500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 4500 -j DNAT --to-destination $IPSECGW:4500

 

### LOGGING ###

iptables -A INPUT    -j LOG --log-level debug --log-prefix '[FW INPUT]:    '

iptables -A OUTPUT   -j LOG --log-level debug --log-prefix '[FW OUTPUT]:   '

iptables -A FORWARD  -j LOG --log-level debug --log-prefix '[FW FORWARD]:  '

Устройство Ext_router1_Spoke1

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

# To Core_router

auto ens32

iface ens32 inet static

address 172.16.1.2

netmask 255.255.255.0

gateway 172.16.1.1

pre-up /etc/iptables.rules

 

# To Spoke1_n1

auto ens34

iface ens34 inet static

address 100.100.1.1

netmask 255.255.255.0

post-up ip route add 192.168.1.0/24 via 100.100.1.2

Настройки iptables

Содержимое файла /etc/iptables.rules:

EXTIF="ens32"

INTIF="ens34"

LAN_RANGE="100.100.1.0/24"

INET_IP1="172.16.1.2"

IPSECGW="100.100.1.2"

 

# Flush previous rules, delete chains and reset counters

iptables -F -t filter

iptables -F -t nat

iptables -F -t mangle

iptables -F

 

# Default policies

iptables -P INPUT   DROP

iptables -P OUTPUT  DROP

iptables -P FORWARD DROP

 

# Enable loopback traffic

iptables -A INPUT  -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

 

# Enable statefull rules (after that, only need to allow NEW conections)

iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate DNAT -j ACCEPT

 

# Drop invalid state packets

iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP

iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP

iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

 

 

### INPUT ###

# SSH

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A INPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### OUTPUT ###

# SSH

iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### FORWARD ###

iptables -A FORWARD -i $INTIF -o $EXTIF -m conntrack --ctstate NEW -j ACCEPT

 

### SNAT ###

iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to-source $INET_IP1

 

### DNAT ###

# IKE/500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 500 -j DNAT --to-destination $IPSECGW:500

# NAT-T/4500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 4500 -j DNAT --to-destination $IPSECGW:4500

 

 

### LOGGING ###

iptables -A INPUT    -j LOG --log-level debug --log-prefix '[FW INPUT]:    '

iptables -A OUTPUT   -j LOG --log-level debug --log-prefix '[FW OUTPUT]:   '

iptables -A FORWARD  -j LOG --log-level debug --log-prefix '[FW FORWARD]:  '

Устройство Ext_router2_Spoke1

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

# To Core_couter

auto ens32

iface ens32 inet static

address 172.17.1.2

netmask 255.255.255.0

gateway 172.17.1.1

pre-up /etc/iptables.rules

 

# To Spoke1_n2

auto ens34

iface ens34 inet static

address 100.101.1.1

netmask 255.255.255.0

post-up ip route add 192.168.1.0/24 via 100.101.1.2

Настройки iptables

Содержимое файла /etc/iptables.rules:

EXTIF="ens32"

INTIF="ens34"

LAN_RANGE="100.101.1.0/24"

INET_IP1="172.17.1.2"

IPSECGW="100.101.1.2"

 

# Flush previous rules, delete chains and reset counters

iptables -F -t filter

iptables -F -t nat

iptables -F -t mangle

iptables -F

 

# Default policies

iptables -P INPUT   DROP

iptables -P OUTPUT  DROP

iptables -P FORWARD DROP

 

# Enable loopback traffic

iptables -A INPUT  -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

 

# Enable statefull rules (after that, only need to allow NEW conections)

iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate DNAT -j ACCEPT

 

# Drop invalid state packets

iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP

iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP

iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

 

 

### INPUT ###

# SSH

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A INPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### OUTPUT ###

# SSH

iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

# ICMP

iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW -j ACCEPT

 

### FORWARD ###

iptables -A FORWARD -i $INTIF -o $EXTIF -m conntrack --ctstate NEW -j ACCEPT

 

### SNAT ###

iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to-source $INET_IP1

 

### DNAT ###

# IKE/500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 500 -j DNAT --to-destination $IPSECGW:500

# NAT-T/4500

iptables -t nat -A PREROUTING --dst $INET_IP1 -p udp --dport 4500 -j DNAT --to-destination $IPSECGW:4500

 

 

### LOGGING ###

iptables -A INPUT    -j LOG --log-level debug --log-prefix '[FW INPUT]:    '

iptables -A OUTPUT   -j LOG --log-level debug --log-prefix '[FW OUTPUT]:   '

iptables -A FORWARD  -j LOG --log-level debug --log-prefix '[FW FORWARD]:  '

Устройство host_behind_hub

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

auto ens32

iface ens32 inet static

address 192.168.100.100

netmask 255.255.255.0

gateway 192.168.100.1

Устройство host_behind_spoke1

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

auto ens32

iface ens32 inet static

address 192.168.1.100

netmask 255.255.255.0

gateway 192.168.1.1

Устройство host_behind_spoke2

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

auto ens32

iface ens32 inet static

address 192.168.2.100

netmask 255.255.255.0

gateway 192.168.2.1

Устройство Int_router1_Hub

Сетевые настройки

Содержимое файла /etc/network/interfaces:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

 

source /etc/network/interfaces.d/*

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

# To Hubs

auto ens32

iface ens32 inet static

address 192.168.255.1

netmask 255.255.255.0

 

# To LAN

auto ens34

iface ens34 inet static

address 192.168.100.1

netmask 255.255.255.0

Настройки динамической маршрутизации

Настройки сервиса FRR (vtysh):

frr version 4.0

frr defaults traditional

hostname int-router1-hub

no ipv6 forwarding

username cumulus nopassword

!

service integrated-vtysh-config

!

interface ens32

 ip ospf authentication message-digest

 ip ospf message-digest-key 1 md5 russia

!

router ospf

 ospf router-id 192.168.255.1

 passive-interface ens34

 network 192.168.100.0/24 area 0.0.0.1

 network 192.168.255.0/24 area 0.0.0.1

 area 0.0.0.1 authentication message-digest

!

line vty

!

end

Устройство Hub1

Параметры IPsec и Firewall

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit clear

crypto isakmp identity dn

crypto isakmp session-time-max 10

crypto isakmp keepalive 1 3

crypto isakmp keepalive retry-count 3

username cscons privilege 15 password 0 csp

aaa new-model

!

hostname hub1

enable password csp

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

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

 mode transport

!

ip access-list extended FIREWALL_OUT

 deny   ip 192.168.100.0 0.0.0.255 100.64.0.0 0.63.255.255

 deny   ip 192.168.100.0 0.0.0.255 172.16.0.0 0.15.255.255

 deny   ip 192.168.100.0 0.0.0.255 192.168.0.0 0.0.255.255

 deny   ip 192.168.100.0 0.0.0.255 10.0.0.0 0.255.255.255

 deny   gre any any

 permit ip any any

!

ip access-list extended IPSEC_DMVPN

 deny   icmp host 100.100.100.2 any

 deny   udp host 100.100.100.2 any

 deny   tcp host 100.100.100.2 any

 deny   ip host 100.100.100.2 host 224.0.0.5

 deny   ip host 100.100.100.2 host 224.0.0.6

 deny   ip host 100.100.100.2 host 224.0.0.18

 permit ip host 100.100.100.2 any

!

crypto dynamic-map DMAP 1

 match address IPSEC_DMVPN

 set transform-set GOST

 set dead-connection history off

!

crypto map VPN 1 ipsec-isakmp dynamic DMAP

!

interface GigabitEthernet0/0

 ip address 100.100.100.2 255.255.255.0

 ip access-group FIREWALL_OUT out

 crypto map VPN

!

interface GigabitEthernet0/1

 ip address 192.168.255.10 255.255.255.0

!

!

ip route 0.0.0.0 0.0.0.0 100.100.100.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

3082024C308201FBA00302010202102B6E3351FD6EB2AD48200203CB5BA14130

...

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

end

Настройки mGRE

Содержимое файла /etc/network/interfaces.d/mgre0:

auto mgre0

iface mgre0 inet static

address 10.10.10.100

netmask 255.255.255.0

pre-up ip tunnel add mgre0 mode gre key 1 ttl 64 tos inherit

pre-up ip link set mgre0 mtu 1400

pre-up ip link set mgre0 multicast on

Настройки NHRP

Содержимое файла /etc/opennhrp/opennhrp.conf:

interface mgre0

 multicast dynamic

 holding-time 7200

 cisco-authentication secret

 non-caching

Настройки OSPF

frr version 4.1-dev

frr defaults traditional

hostname hub1

username sterra nopassword

!

service integrated-vtysh-config

!

log syslog informational

!

interface eth1

 ip ospf authentication message-digest

 ip ospf cost 1

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 20

!

interface mgre0

 ip ospf authentication message-digest

 ip ospf cost 1

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 20

!

router ospf

 ospf router-id 192.168.255.10

 network 10.10.10.0/24 area 0.0.0.0

 network 192.168.255.0/24 area 0.0.0.1

 area 0.0.0.0 authentication message-digest

 area 0.0.0.0 export-list DENY_MGRE_LAN

 area 0.0.0.1 authentication message-digest

 area 0.0.0.1 export-list PERMIT_HUB_LAN

!

access-list DENY_MGRE_LAN deny 10.10.10.0/24

access-list DENY_MGRE_LAN deny 10.10.20.0/24

access-list DENY_MGRE_LAN permit any

access-list PERMIT_HUB_LAN permit 192.168.100.0/24

access-list PERMIT_HUB_LAN deny any

!

line vty

!

end

Устройство Hub2

Параметры IPsec и Firewall

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit clear

crypto isakmp identity dn

crypto isakmp session-time-max 10

crypto isakmp keepalive 1 3

crypto isakmp keepalive retry-count 3

username cscons privilege 15 password 0 csp

aaa new-model

!

hostname hub2

enable password csp

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

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

 mode transport

!

ip access-list extended IPSEC_DMVPN

 deny   icmp host 100.100.200.2 any

 deny   udp host 100.100.200.2 any

 deny   tcp host 100.100.200.2 any

 deny   ip host 100.100.200.2 host 224.0.0.5

 deny   ip host 100.100.200.2 host 224.0.0.6

 deny   ip host 100.100.200.2 host 224.0.0.18

 permit ip host 100.100.200.2 any

!

ip access-list extended FIREWALL_OUT

 deny   ip 192.168.100.0 0.0.0.255 100.64.0.0 0.63.255.255

 deny   ip 192.168.100.0 0.0.0.255 172.16.0.0 0.15.255.255

 deny   ip 192.168.100.0 0.0.0.255 192.168.0.0 0.0.255.255

 deny   ip 192.168.100.0 0.0.0.255 10.0.0.0 0.255.255.255

 deny   gre any any

 permit ip any any

!

crypto dynamic-map DMAP 1

 match address IPSEC_DMVPN

 set transform-set GOST

 set dead-connection history off

!

crypto map VPN 1 ipsec-isakmp dynamic DMAP

!

interface GigabitEthernet0/0

 ip address 100.100.200.2 255.255.255.0

 ip access-group FIREWALL_OUT out

 crypto map VPN

!

interface GigabitEthernet0/1

 ip address 192.168.255.20 255.255.255.0

!

ip route 0.0.0.0 0.0.0.0 100.100.200.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

3082024C308201FBA00302010202102B6E3351FD6EB2AD48200203CB5BA14130

...

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

end

Настройки mGRE

Содержимое файла /etc/network/interfaces.d/mgre0:

auto mgre0

iface mgre0 inet static

address 10.10.20.200

netmask 255.255.255.0

pre-up ip tunnel add mgre0 mode gre key 2 ttl 64 tos inherit

pre-up ip link set mgre0 mtu 1400

pre-up ip link set mgre0 multicast on

Настройки NHRP

Содержимое файла /etc/opennhrp/opennhrp.conf:

interface mgre0

 multicast dynamic

 holding-time 7200

 cisco-authentication secret

 non-caching

Настройки OSPF

frr version 4.1-dev

frr defaults traditional

hostname hub2

username sterra nopassword

!

service integrated-vtysh-config

!

log syslog informational

!

interface eth1

 ip ospf authentication message-digest

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 10

!

interface mgre0

 ip ospf authentication message-digest

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 10

!

router ospf

 ospf router-id 192.168.255.20

 network 10.10.20.0/24 area 0.0.0.0

 network 192.168.255.0/24 area 0.0.0.1

 area 0.0.0.0 authentication message-digest

 area 0.0.0.0 export-list DENY_MGRE_LAN

 area 0.0.0.1 authentication message-digest

 area 0.0.0.1 export-list PERMIT_HUB_LAN

!

access-list DENY_MGRE_LAN deny 10.10.10.0/24

access-list DENY_MGRE_LAN deny 10.10.20.0/24

access-list DENY_MGRE_LAN permit any

access-list PERMIT_HUB_LAN permit 192.168.100.0/24

access-list PERMIT_HUB_LAN deny any

!

line vty

!

end

Устройство Spoke1-n1

Параметры IPsec и Firewall

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit clear

crypto isakmp identity dn

crypto isakmp session-time-max 10

crypto isakmp keepalive 1 3

crypto isakmp keepalive retry-count 3

username cscons privilege 15 password 0 csp

aaa new-model

!

hostname spoke1-n1

enable password csp

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

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

 mode transport

!

ip access-list extended IPSEC_DMVPN

 deny   icmp host 100.100.1.2 any

 deny   udp host 100.100.1.2 any

 deny   tcp host 100.100.1.2 any

 deny   ip host 100.100.1.2 host 224.0.0.5

 deny   ip host 100.100.1.2 host 224.0.0.6

 deny   ip host 100.100.1.2 host 224.0.0.18

 permit ip host 100.100.1.2 any

!

ip access-list extended FIREWALL_OUT

 deny   ip 192.168.1.0 0.0.0.255 100.64.0.0 0.63.255.255

 deny   ip 192.168.1.0 0.0.0.255 172.16.0.0 0.15.255.255

 deny   ip 192.168.1.0 0.0.0.255 192.168.0.0 0.0.255.255

 deny   ip 192.168.1.0 0.0.0.255 10.0.0.0 0.255.255.255

 deny   gre any any

 permit ip any any

!

!

crypto dynamic-map DMAP 1

 match address IPSEC_DMVPN

 set transform-set GOST

 set dead-connection history off

!

crypto map VPN 1 ipsec-isakmp dynamic DMAP

!

interface GigabitEthernet0/0

 ip address 100.100.1.2 255.255.255.0

 ip access-group FIREWALL_OUT out

 crypto map VPN

!

interface GigabitEthernet0/1

 ip address 192.168.1.10 255.255.255.0

!

!

ip route 0.0.0.0 0.0.0.0 100.100.1.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

3082024C308201FBA00302010202102B6E3351FD6EB2AD48200203CB5BA14130

...

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

end

Настройки mGRE

Содержимое файла /etc/network/interfaces.d/mgre0:

auto mgre0

iface mgre0 inet static

address 10.10.10.1

netmask 255.255.255.0

pre-up ip tunnel add mgre0 mode gre key 1 ttl 64 tos inherit

pre-up ip link set mgre0 mtu 1400

pre-up ip link set mgre0 multicast on

Содержимое файла /etc/network/interfaces.d/mgre1:

auto mgre1

iface mgre1 inet static

address 10.10.20.1

netmask 255.255.255.0

pre-up ip tunnel add mgre1 mode gre key 2 ttl 64 tos inherit

pre-up ip link set mgre1 mtu 1400

pre-up ip link set mgre1 multicast on

Настройки NHRP

Содержимое файла /etc/opennhrp/opennhrp.conf:

interface mgre0

 map 10.10.10.100/24 172.16.100.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

interface mgre1

 map 10.10.20.200/24 172.17.200.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

Настройки OSPF

frr version 4.1-dev

frr defaults traditional

hostname spoke1-n1

username sterra nopassword

!

service integrated-vtysh-config

!

log syslog informational

!

interface mgre0

 ip ospf authentication message-digest

 ip ospf cost 1

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 0

!

interface mgre1

 ip ospf authentication message-digest

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 0

!

router ospf

 ospf router-id 192.168.1.10

 passive-interface eth1

 network 10.10.10.0/24 area 0.0.0.0

 network 10.10.20.0/24 area 0.0.0.0

 network 192.168.1.0/24 area 0.0.0.0

 area 0.0.0.0 authentication message-digest

!

line vty

!

end

Настройки VRRP

Содержимое файла /etc/keepalived/scripts/notify_backup:

#!/bin/bash

# Script to run during BACKUP transit

vtysh -c "conf t" -c "router ospf" -c "passive-interface mgre0" -c "passive-interface mgre1"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_fault:

#!/bin/bash

# Script to run during FAULT transit

vtysh -c "conf t" -c "router ospf" -c "passive-interface mgre0" -c "passive-interface mgre1"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_master:

#!/bin/bash

# Script to run during MASTER transit

vtysh -c "conf t" -c "router ospf" -c "no passive-interface mgre0" -c "no passive-interface mgre1"

exit 0

Содержимое файла /etc/keepalived/keepalived.conf:

vrrp_script check_run_service_vpnsvc {

  script "/etc/keepalived/scripts/check_run_service 'vpnsvc'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_opennhrp {

  script "/etc/keepalived/scripts/check_run_service 'opennhrp'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_ospfd {

  script "/etc/keepalived/scripts/check_run_service 'ospfd'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_zebra {

  script "/etc/keepalived/scripts/check_run_service 'zebra'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_isp_link {

  script "/etc/keepalived/scripts/check_ping 'eth0' '172.16.1.1 172.17.1.1' "

  fall 15

  rise 10

  timeout 5

  interval 1

}

 

vrrp_instance eth1_1 {

  interface eth1

  track_interface {

        eth0

  }

  track_script {

    check_run_service_vpnsvc

    check_run_service_opennhrp

    check_run_service_ospfd

    check_run_service_zebra

    check_isp_link

  }

  virtual_ipaddress {

    192.168.1.1/24

  }

  nopreempt

  garp_master_refresh 5

  priority 100

  advert_int 1

  virtual_router_id 1

  notify_master /etc/keepalived/scripts/notify_master

  notify_backup /etc/keepalived/scripts/notify_backup

  notify_fault /etc/keepalived/scripts/notify_fault

}

Устройство Spoke1-n2

Параметры IPsec и Firewall

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit clear

crypto isakmp identity dn

crypto isakmp session-time-max 10

crypto isakmp keepalive 1 3

crypto isakmp keepalive retry-count 3

username cscons privilege 15 password 0 csp

aaa new-model

!

hostname spoke1-n2

enable password csp

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

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

 mode transport

!

ip access-list extended IPSEC_DMVPN

 deny   icmp host 100.101.1.2 any

 deny   udp host 100.101.1.2 any

 deny   tcp host 100.101.1.2 any

 deny   ip host 100.101.1.2 host 224.0.0.5

 deny   ip host 100.101.1.2 host 224.0.0.6

 deny   ip host 100.101.1.2 host 224.0.0.18

 permit ip host 100.101.1.2 any

!

ip access-list extended FIREWALL_OUT

 deny   ip 192.168.1.0 0.0.0.255 100.64.0.0 0.63.255.255

 deny   ip 192.168.1.0 0.0.0.255 172.16.0.0 0.15.255.255

 deny   ip 192.168.1.0 0.0.0.255 192.168.0.0 0.0.255.255

 deny   ip 192.168.1.0 0.0.0.255 10.0.0.0 0.255.255.255

 deny   gre any any

 permit ip any any

!

!

crypto dynamic-map DMAP 1

 match address IPSEC_DMVPN

 set transform-set GOST

 set dead-connection history off

!

crypto map VPN 1 ipsec-isakmp dynamic DMAP

!

interface GigabitEthernet0/0

 ip address 100.101.1.2 255.255.255.0

 ip access-group FIREWALL_OUT out

 crypto map VPN

!

interface GigabitEthernet0/1

 ip address 192.168.1.20 255.255.255.0

!

!

ip route 0.0.0.0 0.0.0.0 100.101.1.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

3082024C308201FBA00302010202102B6E3351FD6EB2AD48200203CB5BA14130

...

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

end

Настройки mGRE

Содержимое файла /etc/network/interfaces.d/mgre0:

auto mgre0

iface mgre0 inet static

address 10.10.10.2

netmask 255.255.255.0

pre-up ip tunnel add mgre0 mode gre key 1 ttl 64 tos inherit

pre-up ip link set mgre0 mtu 1400

pre-up ip link set mgre0 multicast on

Содержимое файла /etc/network/interfaces.d/mgre1:

auto mgre1

iface mgre1 inet static

address 10.10.20.2

netmask 255.255.255.0

pre-up ip tunnel add mgre1 mode gre key 2 ttl 64 tos inherit

pre-up ip link set mgre1 mtu 1400

pre-up ip link set mgre1 multicast on

Настройки NHRP

Содержимое файла /etc/opennhrp/opennhrp.conf:

interface mgre0

 map 10.10.10.100/24 172.16.100.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

interface mgre1

 map 10.10.20.200/24 172.17.200.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

Настройки OSPF

frr version 4.1-dev

frr defaults traditional

hostname spoke1-n2

username sterra nopassword

!

service integrated-vtysh-config

!

log syslog informational

!

interface mgre0

 ip ospf authentication message-digest

 ip ospf cost 1

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 0

!

interface mgre1

 ip ospf authentication message-digest

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 0

!

router ospf

 ospf router-id 192.168.1.20

 passive-interface eth1

 network 10.10.10.0/24 area 0.0.0.0

 network 10.10.20.0/24 area 0.0.0.0

 network 192.168.1.0/24 area 0.0.0.0

 area 0.0.0.0 authentication message-digest

!

line vty

!

end

Настройки VRRP

Содержимое файла /etc/keepalived/scripts/notify_backup:

#!/bin/bash

# Script to run during BACKUP transit

vtysh -c "conf t" -c "router ospf" -c "passive-interface mgre0" -c "passive-interface mgre1"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_fault:

#!/bin/bash

# Script to run during FAULT transit

vtysh -c "conf t" -c "router ospf" -c "passive-interface mgre0" -c "passive-interface mgre1"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_master:

#!/bin/bash

# Script to run during MASTER transit

vtysh -c "conf t" -c "router ospf" -c "no passive-interface mgre0" -c "no passive-interface mgre1"

exit 0

Содержимое файла /etc/keepalived/keepalived.conf:

vrrp_script check_run_service_vpnsvc {

  script "/etc/keepalived/scripts/check_run_service 'vpnsvc'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_opennhrp {

  script "/etc/keepalived/scripts/check_run_service 'opennhrp'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_ospfd {

  script "/etc/keepalived/scripts/check_run_service 'ospfd'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_run_service_zebra {

  script "/etc/keepalived/scripts/check_run_service 'zebra'"

  fall 5

  rise 5

  interval 1

}

 

vrrp_script check_isp_link {

  script "/etc/keepalived/scripts/check_ping 'eth0' '172.16.1.1 172.17.1.1' "

  fall 15

  rise 10

  timeout 5

  interval 1

}

 

vrrp_instance eth1_1 {

  interface eth1

  track_interface {

        eth0

  }

  track_script {

    check_run_service_vpnsvc

    check_run_service_opennhrp

    check_run_service_ospfd

    check_run_service_zebra

    check_isp_link

  }

  virtual_ipaddress {

    192.168.1.1/24

  }

  nopreempt

  garp_master_refresh 5

  priority 50

  advert_int 1

  virtual_router_id 1

  notify_master /etc/keepalived/scripts/notify_master

  notify_backup /etc/keepalived/scripts/notify_backup

  notify_fault /etc/keepalived/scripts/notify_fault

}

Устройство Spoke2

Параметры IPsec и Firewall

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit clear

crypto isakmp identity dn

crypto isakmp session-time-max 10

crypto isakmp keepalive 1 3

crypto isakmp keepalive retry-count 3

username cscons privilege 15 password 0 csp

aaa new-model

!

!

hostname spoke2

enable password csp

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

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

 mode transport

!

ip access-list extended IPSEC_DMVPN

 deny   icmp host 172.16.2.2 any

 deny   udp host 172.16.2.2 any

 deny   tcp host 172.16.2.2 any

 deny   ip host 172.16.2.2 host 224.0.0.5

 deny   ip host 172.16.2.2 host 224.0.0.6

 deny   ip host 172.16.2.2 host 224.0.0.18

 permit ip host 172.16.2.2 any

!

ip access-list extended FIREWALL_OUT

 deny   ip 192.168.2.0 0.0.0.255 100.64.0.0 0.63.255.255

 deny   ip 192.168.2.0 0.0.0.255 172.16.0.0 0.15.255.255

 deny   ip 192.168.2.0 0.0.0.255 192.168.0.0 0.0.255.255

 deny   ip 192.168.2.0 0.0.0.255 10.0.0.0 0.255.255.255

 deny   gre any any

 permit ip any any

!

crypto dynamic-map DMAP 1

 match address IPSEC_DMVPN

 set transform-set GOST

 set dead-connection history off

!

crypto map VPN 1 ipsec-isakmp dynamic DMAP

!

interface GigabitEthernet0/0

 ip address 172.16.2.2 255.255.255.0

 ip access-group FIREWALL_OUT out

 crypto map VPN

!

interface GigabitEthernet0/1

 ip address 192.168.2.1 255.255.255.0

!

!

ip route 0.0.0.0 0.0.0.0 172.16.2.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check none

crypto pki certificate chain s-terra_technological_trustpoint

certificate 2B6E3351FD6EB2AD48200203CB5BA141

3082024C308201FBA00302010202102B6E3351FD6EB2AD48200203CB5BA14130

...

E34EE9640D905032C1F1E3B4491257D5

 

quit

!

end

Настройки mGRE

Содержимое файла /etc/network/interfaces.d/mgre0:

auto mgre0

iface mgre0 inet static

address 10.10.10.3

netmask 255.255.255.0

pre-up ip tunnel add mgre0 mode gre key 1 ttl 64 tos inherit

pre-up ip link set mgre0 mtu 1400

pre-up ip link set mgre0 multicast on

Содержимое файла /etc/network/interfaces.d/mgre1:

auto mgre1

iface mgre1 inet static

address 10.10.20.3

netmask 255.255.255.0

pre-up ip tunnel add mgre1 mode gre key 2 ttl 64 tos inherit

pre-up ip link set mgre1 mtu 1400

pre-up ip link set mgre1 multicast on

Настройки NHRP

Содержимое файла /etc/opennhrp/opennhrp.conf:

interface mgre0

 map 10.10.10.100/24 172.16.100.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

interface mgre1

 map 10.10.20.200/24 172.17.200.2 register

 multicast nhs

 holding-time 7200

 cisco-authentication secret

 non-caching

Настройки OSPF

frr version 4.1-dev

frr defaults traditional

hostname spoke2

username sterra nopassword

!

service integrated-vtysh-config

!

log syslog informational

!

interface mgre0

 ip ospf authentication message-digest

 ip ospf cost 1

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 0

!

interface mgre1

 ip ospf authentication message-digest

 ip ospf message-digest-key 1 md5 russia

 ip ospf priority 0

!

router ospf

 ospf router-id 192.168.2.1

 passive-interface eth1

 network 10.10.10.0/24 area 0.0.0.0

 network 10.10.20.0/24 area 0.0.0.0

 network 192.168.2.0/24 area 0.0.0.0

 area 0.0.0.0 authentication message-digest

!

line vty

!

end