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

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

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

dmvpn_1.01_ibgp.tar

download ibgp

 

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

В документе представлено описание настройки 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) и использован протокол динамической маршрутизации iBGP. По окончании настройки реализуется возможность построения динамических защищенных соединений между всеми подсетями филиалов, а также подсетями филиалов и центрального офиса (см. рисунок 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/BGP.

Между филиальными шлюзами устанавливаются динамические 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 бит).

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

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

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

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

Все шлюзы безопасности находятся в одной автономной системе №65000. Центральные шлюзы являются роут-рефлекторами (route-reflector), а филиальные – роут-рефлектор клиентами (route-reflector client).

Между шлюзами в центральном офисе и роутером Int_router1_Hub (AS №65001) передача маршрутной информации обеспечивается при помощи eBGP.

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

Отказоустойчивость центрального офиса. Отказоустойчивость центрального офиса, а именно шлюзов безопасности Hub1 и Hub2, обеспечивается протоколами NHRP и BGP. Филиальные шлюзы одновременно регистрируются по протоколу 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>).

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

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

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

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

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

root@sterragate:~# ./dmvpn_prep.bash

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

Preparation of S-Terra Gate 4.2 for DMVPN scenario

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

...

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

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

Preparation completed successfully, please, reboot OS

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

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

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

root@sterragate:~# reboot

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

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

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

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

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

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

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

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

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

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

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 приведены в приложении.

Настройка BGP

Динамическая маршрутизация настраивается через консоль сервиса 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.    Настройте BGP (см. описание https://frrouting.org/user-guide/bgp.html):

hub1# configure terminal

hub1(config)# router bgp 65000

hub1(config-router)#  bgp router-id 10.10.10.100

hub1(config-router)#  bgp log-neighbor-changes

hub1(config-router)#  bgp deterministic-med

hub1(config-router)#  bgp network import-check

hub1(config-router)#  timers bgp 3 9

hub1(config-router)#  neighbor spokes-ibgp peer-group

hub1(config-router)#  neighbor spokes-ibgp remote-as 65000

hub1(config-router)#  neighbor 10.10.10.1 peer-group spokes-ibgp

hub1(config-router)#  neighbor 10.10.10.2 peer-group spokes-ibgp

hub1(config-router)#  neighbor 10.10.10.3 peer-group spokes-ibgp

hub1(config-router)#  neighbor 192.168.255.1 remote-as 65001

hub1(config-router)#

hub1(config-router)#  address-family ipv4 unicast

hub1(config-router-af)#   neighbor spokes-ibgp route-reflector-client

hub1(config-router-af)#   neighbor spokes-ibgp next-hop-self

hub1(config-router-af)#   neighbor spokes-ibgp soft-reconfiguration inbound

hub1(config-router-af)#   neighbor 10.10.10.1 route-map FROM-SPOKE1-N1-IN in

hub1(config-router-af)#   neighbor 10.10.10.2 route-map FROM-SPOKE1-N2-IN in

hub1(config-router-af)#  exit-address-family

hub1(config-router)#

hub1(config-router)# route-map FROM-SPOKE1-N1-IN permit 1

hub1(config-route-map)#  set local-preference 100

hub1(config-route-map)#

hub1(config-route-map)# route-map FROM-SPOKE1-N2-IN permit 1

hub1(config-route-map)#  set local-preference 50

hub1(config-route-map)#

hub1(config-route-map)# end

hub1# write

Note: this version of vtysh never writes vtysh.conf

Building Configuration...

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

[OK]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 приведены в приложении.

Настройка BGP

Динамическая маршрутизация настраивается через консоль сервиса 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.    Настройте BGP (см. описание https://frrouting.org/user-guide/bgp.html):

spoke1-n1# conf t

spoke1-n1(config)# router bgp 65000

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

spoke1-n1(config-router)#  bgp log-neighbor-changes

spoke1-n1(config-router)#  bgp network import-check

spoke1-n1(config-router)#  timers bgp 3 9

spoke1-n1(config-router)#  neighbor 10.10.10.100 remote-as 65000

spoke1-n1(config-router)#  neighbor 10.10.20.200 remote-as 65000

spoke1-n1(config-router)#

spoke1-n1(config-router)#  address-family ipv4 unicast

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

spoke1-n1(config-router-af)#   neighbor 10.10.10.100 route-map FROM-HUB1-IN in

spoke1-n1(config-router-af)#   neighbor 10.10.20.200 route-map FROM-HUB2-IN in

spoke1-n1(config-router-af)#  exit-address-family

spoke1-n1(config-router)#

spoke1-n1(config-router)# route-map FROM-HUB2-IN permit 1

spoke1-n1(config-route-map)#  set local-preference 50

spoke1-n1(config-route-map)#

spoke1-n1(config-route-map)# route-map FROM-HUB1-IN permit 1

spoke1-n1(config-route-map)#  set local-preference 100

spoke1-n1(config-route-map)#

spoke1-n1(config-route-map)# end

spoke1-n1# write

Note: this version of vtysh never writes vtysh.conf

Building Configuration...

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

[OK]

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

Настройка VRRP

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

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

#!/bin/bash

# Script to run during BACKUP transit

vtysh -c "conf t" -c "router bgp 65000" -c "neighbor 10.10.10.100 shutdown" -c "neighbor 10.10.20.200 shutdown"

exit 0

Если нода переходит в состояние BACKUP, то выключаем BGP пиринг с центральными шлюзами.

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

#!/bin/bash

# Script to run during FAULT transit

vtysh -c "conf t" -c "router bgp 65000" -c "neighbor 10.10.10.100 shutdown" -c "neighbor 10.10.20.200 shutdown"

exit 0

Если нода переходит в состояние FAULT, то выключаем BGP пиринг с центральными шлюзами.

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

#!/bin/bash

# Script to run during MASTER transit

vtysh -c "conf t" -c "router bgp 65000" -c "no neighbor 10.10.10.100 shutdown" -c "no neighbor 10.10.20.200 shutdown"

exit 0

Если нода переходит в состояние MASTER, то включаем BGP пиринг с центральными шлюзами.

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_bgpd {

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

  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_bgpd

    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, bgpd, 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).

Значение bgp router-id у резервной ноды должно отличаться от значения основной ноды (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 1 (100.100.100.2,4500)-(172.16.1.2,4500) active 1828 1936

2 2 (100.100.100.2,4500)-(172.16.2.2,4500) active 2828 2928

3 3 (100.100.100.2,4500)-(172.17.1.2,4500) active 1828 1936

 

IPsec connections:

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

1 1 (100.100.100.2,*)-(172.16.1.2,*) * ESP nat-t-trans 19664 15936

2 2 (100.100.100.2,*)-(172.16.2.2,*) * ESP nat-t-trans 25976 29528

3 3 (100.100.100.2,*)-(172.17.1.2,*) * ESP nat-t-trans 5696 4952

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.1.2,4500) active 1928 2036

2 2 (100.100.200.2,4500)-(172.16.2.2,4500) active 2828 2928

3 3 (100.100.200.2,4500)-(172.17.1.2,4500) active 1828 1936

 

IPsec connections:

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

1 1 (100.100.200.2,*)-(172.16.1.2,*) * ESP nat-t-trans 18720 16864

2 2 (100.100.200.2,*)-(172.16.2.2,*) * ESP nat-t-trans 13416 17272

3 3 (100.100.200.2,*)-(172.17.1.2,*) * ESP nat-t-trans 12040 9680

Видно, что на каждом центральном шлюзе установлено по три 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.    Убедитесь, что на центральных шлюзах корректно работает протокол BGP, для этого зайдите в linux bash выполните следующие команды:

root@hub1:~# vtysh

 

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

Copyright 1996-2005 Kunihiro Ishiguro, et al.

hub1# show ip bgp summary

 

IPv4 Unicast Summary:

BGP router identifier 10.10.10.100, local AS number 65000 vrf-id 0

BGP table version 5

RIB entries 5, using 760 bytes of memory

Peers 4, using 81 KiB of memory

Peer groups 1, using 64 bytes of memory

 

Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd

10.10.10.1      4      65000     117     119        0    0    0 00:05:39            1

10.10.10.2      4      65000       0       2        0    0    0    never       Active

10.10.10.3      4      65000     109     110        0    0    0 00:04:31            1

192.168.255.1   4      65001     176     176        0    0    0 00:08:25            1

 

Total number of neighbors 4

hub1# show ip route bgp

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

 

B>* 192.168.1.0/24 [200/0] via 10.10.10.1, mgre0, 00:06:35

B>* 192.168.2.0/24 [200/0] via 10.10.10.3, mgre0, 00:05:27

B>* 192.168.100.0/24 [20/0] via 192.168.255.1, eth1, 00:09:20

root@hub2:~# vtysh

 

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

Copyright 1996-2005 Kunihiro Ishiguro, et al.

hub2# show ip bgp summary

IPv4 Unicast Summary:

BGP router identifier 10.10.20.200, local AS number 65000 vrf-id 0

BGP table version 5

RIB entries 5, using 760 bytes of memory

Peers 4, using 81 KiB of memory

Peer groups 1, using 64 bytes of memory

 

Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd

10.10.20.1      4      65000     144     146        0    0    0 00:07:02            1

10.10.20.2      4      65000       0       5        0    0    0    never       Active

10.10.20.3      4      65000     138     139        0    0    0 00:05:57            1

192.168.255.1   4      65001     200     200        0    0    0 00:09:39            1

 

Total number of neighbors 4

hub2# show ip route bgp

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

 

B>* 192.168.1.0/24 [200/0] via 10.10.20.1, mgre0, 00:07:29

B>* 192.168.2.0/24 [200/0] via 10.10.20.3, mgre0, 00:06:25

B>* 192.168.100.0/24 [20/0] via 192.168.255.1, eth1, 00:10:06

Видно, что на каждом центральном шлюзе по протоколу BGP установлено соседство с основной нодой кластера в филиале №1, со шлюзом в филиале №2 и роутером Int_router1_Hub. Соседство с резервной нодой кластера в филиале №1 отсутствует, как и требуется (нода, которая находится в состоянии BACKUP/FAULT не участвует в BGP).

Маршруты до филиальных подсетей (192.168.1.0/24 и 192.168.2.0/24) в таблице маршрутизации присутствуют, а также до 192.168.100.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=61 time=2.03 ms

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

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

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

 

--- 192.168.2.100 ping statistics ---

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

rtt min/avg/max/mdev = 0.728/81.831/323.760/139.678 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 5 (100.100.1.2,4500)-(172.16.100.2,4500) active 1936 1828

2 6 (100.100.1.2,4500)-(172.17.200.2,4500) active 2036 1928

3 7 (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 1 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 60560 79336

2 2 (100.100.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 63648 84856

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

Видно, что пакеты успешно дошли от 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 6 (100.100.1.2,4500)-(172.17.200.2,4500) active 2036 1928

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

3 8 (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 1 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 65880 87264

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

root@spoke1-n1:~# vtysh

 

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

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke1-n1# show ip route bgp

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

 

B>* 192.168.2.0/24 [200/0] via 10.10.20.3, mgre1, 00:12:35

B>* 192.168.100.0/24 [200/0] via 10.10.20.200, mgre1, 00:12:35

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 1 (172.16.2.2,4500)-(172.17.200.2,4500) active 2928 2828

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

 

IPsec connections:

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

1 2 (172.16.2.2,*)-(172.17.200.2,*) * ESP nat-t-trans 219016 189272

2 3 (172.16.2.2,*)-(172.16.1.2,*) * ESP nat-t-trans 288 288

root@spoke2:~# vtysh

 

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

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke2# show ip route bgp

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

 

B>* 192.168.1.0/24 [200/0] via 10.10.20.1, mgre1, 00:14:19

B>* 192.168.100.0/24 [200/0] via 10.10.20.200, mgre1, 00:14:19

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.13 ms

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

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

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

 

--- 192.168.100.100 ping statistics ---

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

rtt min/avg/max/mdev = 1.052/1.086/1.138/0.047 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.78 ms

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

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

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

 

--- 192.168.2.100 ping statistics ---

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

rtt min/avg/max/mdev = 0.771/1.051/1.786/0.425 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 6 (100.100.1.2,4500)-(172.17.200.2,4500) active 2036 1928

2 7 (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 1 (100.100.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 173584 203232

2 3 (100.100.1.2,*)-(172.16.2.2,*) * ESP nat-t-trans 576 576

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 6 (100.100.1.2,4500)-(172.17.200.2,4500) active 2036 1928

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

3 51 (100.100.1.2,4500)-(172.16.100.2,4500) active 2136 2028

 

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 184088 214232

2 3 (100.100.1.2,*)-(172.16.2.2,*) * ESP nat-t-trans 576 576

3 4 (100.100.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 288 0

root@spoke1-n1:~# vtysh

 

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

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke1-n1# show ip route bgp

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

 

B>* 192.168.2.0/24 [200/0] via 10.10.10.3, mgre0, 00:00:45

B>* 192.168.100.0/24 [200/0] via 10.10.10.100, mgre0, 00:00:45

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 1 (172.16.2.2,4500)-(172.17.200.2,4500) active 2928 2828

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

3 51 (172.16.2.2,4500)-(172.16.100.2,4500) active 2328 2228

 

IPsec connections:

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

1 2 (172.16.2.2,*)-(172.17.200.2,*) * ESP nat-t-trans 379584 338448

2 3 (172.16.2.2,*)-(172.16.1.2,*) * ESP nat-t-trans 576 576

3 4 (172.16.2.2,*)-(172.16.100.2,*) * ESP nat-t-trans 49448 50408

root@spoke2:~# vtysh

 

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

Copyright 1996-2005 Kunihiro Ishiguro, et al.

spoke2# show ip route bgp

 

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

Copyright 1996-2005 Kunihiro Ishiguro, et al.

 

spoke2# show ip route bgp

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

 

B>* 192.168.1.0/24 [200/0] via 10.10.10.1, mgre0, 00:02:28

B>* 192.168.100.0/24 [200/0] via 10.10.10.100, mgre0, 00:04:58

Видно, что в случае отказа внешнего сетевого интерфейса 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.     Убедитесь, что на резервной ноде по протоколу BGP установлено соседство с центральными шлюзами и получены маршруты в защищаемые подсети, для этого в 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 bgp summary

 

IPv4 Unicast Summary:

BGP router identifier 192.168.1.20, local AS number 65000 vrf-id 0

BGP table version 3

RIB entries 5, using 760 bytes of memory

Peers 2, using 40 KiB of memory

 

Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd

10.10.10.100    4      65000      23      21        0    0    0 00:00:52            2

10.10.20.200    4      65000      23      21        0    0    0 00:00:52            2

 

Total number of neighbors 2

spoke1-n2# show ip route bgp

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

 

B>* 192.168.2.0/24 [200/0] via 10.10.10.3, mgre0, 00:01:15

B>* 192.168.100.0/24 [200/0] via 10.10.10.100, mgre0, 00:01:15

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=1.96 ms

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

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

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

 

--- 192.168.2.100 ping statistics ---

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

rtt min/avg/max/mdev = 0.784/114.653/455.074/196.542 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 23 (100.101.1.2,4500)-(172.17.200.2,4500) active 2100 2192

2 24 (100.101.1.2,4500)-(172.16.100.2,4500) active 2100 2192

3 25 (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 4 (100.101.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 240 152

2 5 (100.101.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 408 240

3 6 (100.101.1.2,*)-(172.16.100.2,*) * ESP nat-t-trans 12576 12608

4 7 (100.101.1.2,*)-(172.17.200.2,*) * ESP nat-t-trans 11616 11648

5 8 (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_bgpd) 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

!

router bgp 65001

 bgp router-id 192.168.255.1

 coalesce-time 1000

 timers bgp 3 9

 neighbor 192.168.255.10 remote-as 65000

 neighbor 192.168.255.20 remote-as 65000

 !

 address-family ipv4 unicast

  network 192.168.100.0/24

  neighbor 192.168.255.10 route-map FROM-HUB1-IN in

  neighbor 192.168.255.20 route-map FROM-HUB2-IN in

 exit-address-family

!

route-map FROM-HUB1-IN permit 1

 set local-preference 100

!

route-map FROM-HUB2-IN permit 1

 set local-preference 50

!

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

Настройки BGP

frr version 4.1-dev

frr defaults traditional

hostname hub1

username sterra nopassword

!

service integrated-vtysh-config

!

router bgp 65000

 bgp router-id 10.10.10.100

 bgp log-neighbor-changes

 bgp deterministic-med

 bgp network import-check

 timers bgp 3 9

 neighbor spokes-ibgp peer-group

 neighbor spokes-ibgp remote-as 65000

 neighbor 10.10.10.1 peer-group spokes-ibgp

 neighbor 10.10.10.2 peer-group spokes-ibgp

 neighbor 10.10.10.3 peer-group spokes-ibgp

 neighbor 192.168.255.1 remote-as 65001

 !

 address-family ipv4 unicast

  neighbor spokes-ibgp route-reflector-client

  neighbor spokes-ibgp next-hop-self

  neighbor spokes-ibgp soft-reconfiguration inbound

  neighbor 10.10.10.1 route-map FROM-SPOKE1-N1-IN in

  neighbor 10.10.10.2 route-map FROM-SPOKE1-N2-IN in

 exit-address-family

!

route-map FROM-SPOKE1-N2-IN permit 1

 set local-preference 50

!

route-map FROM-SPOKE1-N1-IN permit 1

 set local-preference 100

!

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

Настройки BGP

frr version 4.1-dev

frr defaults traditional

hostname hub2

username sterra nopassword

!

service integrated-vtysh-config

!

router bgp 65000

 bgp router-id 10.10.20.200

 bgp log-neighbor-changes

 bgp deterministic-med

 bgp network import-check

 timers bgp 3 9

 neighbor spokes-ibgp peer-group

 neighbor spokes-ibgp remote-as 65000

 neighbor 10.10.20.1 peer-group spokes-ibgp

 neighbor 10.10.20.2 peer-group spokes-ibgp

 neighbor 10.10.20.3 peer-group spokes-ibgp

 neighbor 192.168.255.1 remote-as 65001

 !

 address-family ipv4 unicast

  neighbor spokes-ibgp route-reflector-client

  neighbor spokes-ibgp next-hop-self

  neighbor spokes-ibgp soft-reconfiguration inbound

  neighbor 10.10.20.1 route-map FROM-SPOKE1-N1-IN in

  neighbor 10.10.20.2 route-map FROM-SPOKE1-N2-IN in

 exit-address-family

!

route-map FROM-SPOKE1-N2-IN permit 1

 set local-preference 50

!

route-map FROM-SPOKE1-N1-IN permit 1

 set local-preference 100

!

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

Настройки BGP

frr version 4.1-dev

frr defaults traditional

hostname spoke1-n1

username sterra nopassword

!

service integrated-vtysh-config

!

router bgp 65000

 bgp router-id 192.168.1.10

 bgp log-neighbor-changes

 bgp network import-check

 timers bgp 3 9

 neighbor 10.10.10.100 remote-as 65000

 neighbor 10.10.20.200 remote-as 65000

 !

 address-family ipv4 unicast

  network 192.168.1.0/24

  neighbor 10.10.10.100 route-map FROM-HUB1-IN in

  neighbor 10.10.20.200 route-map FROM-HUB2-IN in

 exit-address-family

!

route-map FROM-HUB1-IN permit 1

 set local-preference 100

!

route-map FROM-HUB2-IN permit 1

 set local-preference 50

!

line vty

!

end

Настройки VRRP

Содержимое файла /etc/keepalived/scripts/notify_backup:

#!/bin/bash

# Script to run during BACKUP transit

vtysh -c "conf t" -c "router bgp 65000" -c "neighbor 10.10.10.100 shutdown" -c "neighbor 10.10.20.200 shutdown"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_fault:

#!/bin/bash

# Script to run during FAULT transit

vtysh -c "conf t" -c "router bgp 65000" -c "neighbor 10.10.10.100 shutdown" -c "neighbor 10.10.20.200 shutdown"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_master:

#!/bin/bash

# Script to run during MASTER transit

vtysh -c "conf t" -c "router bgp 65000" -c "no neighbor 10.10.10.100 shutdown" -c "no neighbor 10.10.20.200 shutdown"

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_bgpd {

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

  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_bgpd

    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

Настройки BGP

frr version 4.1-dev

frr defaults traditional

hostname spoke1-n2

username sterra nopassword

!

service integrated-vtysh-config

!

router bgp 65000

 bgp router-id 192.168.1.20

 bgp log-neighbor-changes

 bgp network import-check

 timers bgp 3 9

 neighbor 10.10.10.100 remote-as 65000

 neighbor 10.10.20.200 remote-as 65000

 !

 address-family ipv4 unicast

  network 192.168.1.0/24

  neighbor 10.10.10.100 route-map FROM-HUB1-IN in

  neighbor 10.10.20.200 route-map FROM-HUB2-IN in

 exit-address-family

!

route-map FROM-HUB2-IN permit 1

 set local-preference 50

!

route-map FROM-HUB1-IN permit 1

 set local-preference 100

!

line vty

!

end

Настройки VRRP

Содержимое файла /etc/keepalived/scripts/notify_backup:

#!/bin/bash

# Script to run during BACKUP transit

vtysh -c "conf t" -c "router bgp 65000" -c "neighbor 10.10.10.100 shutdown" -c "neighbor 10.10.20.200 shutdown"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_fault:

#!/bin/bash

# Script to run during FAULT transit

vtysh -c "conf t" -c "router bgp 65000" -c "neighbor 10.10.10.100 shutdown" -c "neighbor 10.10.20.200 shutdown"

exit 0

Содержимое файла /etc/keepalived/scripts/notify_master:

#!/bin/bash

# Script to run during MASTER transit

vtysh -c "conf t" -c "router bgp 65000" -c "no neighbor 10.10.10.100 shutdown" -c "no neighbor 10.10.20.200 shutdown"

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_bgpd {

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

  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_bgpd

    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

Настройки BGP

frr version 4.1-dev

frr defaults traditional

hostname spoke2

username sterra nopassword

!

service integrated-vtysh-config

!

router bgp 65000

 bgp router-id 192.168.2.1

 bgp log-neighbor-changes

 bgp network import-check

 timers bgp 3 9

 neighbor 10.10.10.100 remote-as 65000

 neighbor 10.10.20.200 remote-as 65000

 !

 address-family ipv4 unicast

  network 192.168.2.0/24

  neighbor 10.10.10.100 route-map FROM-HUB1-IN in

  neighbor 10.10.20.200 route-map FROM-HUB2-IN in

 exit-address-family

!

route-map FROM-HUB2-IN permit 1

 set local-preference 50

!

route-map FROM-HUB1-IN permit 1

 set local-preference 100

!

line vty

!

end