Настройка DMVPN (phase 2) dual cloud с протоколом динамической маршрутизации iBGP
Данная инструкция описывает настройку DMVPN для сетевых инженеров, знакомых с данной технологией по оборудованию Cisco, а также разбирающихся в базовых настройках «С-Терра Шлюз».
Технология 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. Шлюзы должны быть инициализированы (подробнее на http://doc.s-terra.ru раздел С-Терра Шлюз -> С-Терра Шлюз 4.3 -> «Подключение ПАК и инициализация С-Терра Шлюз на вычислительных системах архитектуры Intel x86-64»).
2. На шлюзах должны быть установлены корневой сертификат УЦ и локальный сертификат устройства.
Исключительно для тестовых целей можно использовать тестовый УЦ от «КриптоПро», веб-интерфейс: https://testgost2012.cryptopro.ru/certsrv/certrqxt.asp.
Рисунок 1. Общая схема стенда
Данная инструкция описывает настройку технологии DMVPN на шлюзах безопасности «С-Терра Шлюз 4.3». Будет настроено две mGRE подсети (dual cloud) и использован протокол динамической маршрутизации iBGP. По окончании настройки реализуется возможность построения динамических защищенных соединений между всеми подсетями филиалов, а также подсетями филиалов и центрального офиса (см. рисунок 1).
Стенд состоит из 16 устройств:
· «С-Терра Шлюз 4.3»: 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).
Из-за особенности реализации не обеспечивается Spoke-to-Spoke взаимодействия между «С-Терра Шлюз 4.3» за NAT и между устройством Cisco за NAT.
Для Продукта «С-Терра Шлюз» версии 4.3 сборки 4.3.23955 есть рекомендации для улучшения производительности в главе «Особые случаи поведения»->«Улучшение производительности».
Между шлюзами в филиалах и центральным офисом устанавливаются статические IPsec туннели. Инициатором построения туннелей является служебный трафик протоколов NHRP/BGP.
Между филиальными шлюзами устанавливаются динамические IPsec туннели. Инициатором построения туннелей является реальный трафик защищаемых подсетей филиалов.
Допускается расположение шлюзов безопасности за устройствами, выполняющими функции трансляции сетевых адресов. Трансляция в этом случае должна быть статическая (порты 500/4500 протокола UDP должны быть проброшены на «С-Терра Шлюз»).
Для корректной работы DMVPN с NAT необходимо, чтобы режим IPsec туннеля был транспортный.
Параметры протокола IKE:
· Аутентификация при помощи цифровых сертификатов, алгоритм подписи – ГОСТ Р 34.10-2012 (ключ 256 бит);
· Алгоритм шифрования – ГОСТ 28147-89 (ключ 256 бит);
· Алгоритм вычисления хеш-функции – ГОСТ Р 34.11-2012 ТК26 (ключ 256 бит);
Алгоритм выработки общего ключа (аналог алгоритма Диффи-Хеллмана) – VKO_GOSTR3410_2012_256 (ключ 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-интерфейс. Резервирование подключения к Интернет обеспечивается следующим принципом – каждый центральный шлюз подключается к соответствующему Интернет-провайдеру.
В силу некоторых особенностей открытой реализации протокола NHRP в пакете OpenNHRP необходимо придерживаться следующего принципа на филиальных шлюзах: одна mGRE-подсеть на один центральный шлюз. То есть в данной инструкции необходимо две mGRE-подсети на филиальных шлюзах, одна для Hub1, а вторая для Hub2.
Отказоустойчивость филиала. Отказоустойчивость филиала реализована протоколом VRRP, работающим со стороны защищаемой подсети. Сервис Keepalived, реализующий протокол VRRP, при помощи скрипта /etc/keepalived/scripts/check_ping дополнительно контролирует состояние канала Интернет-провайдера посредством проверки доступности заданных узлов по протоколу ICMP. Если все заданные узлы недоступны определенное время, то нода кластера переходит в состояние FAULT, что приводит к переключению кластера на резервную ноду (в случае, если она была в состоянии BACKUP), которая должна быть подключена к другому Интернет-провайдеру. Резервирование подключения к Интернет обеспечивается следующим принципом – каждая нода кластера филиала подключается к соответствующему Интернет-провайдеру.
При помощи конфигурационного файла /etc/keepalived/notify_common.conf и скрипта /etc/keepalived/scripts/notify_common обеспечивается следующая логика. Если нода переходит в состояние BACKUP или FAULT, то BGP пиринг с центральными шлюзами выключается и добавляется маршрут до подсети центрального офиса (192.168.100.0/24) через VIP адрес (192.168.1.1) ноды, которая находится в состоянии MASTER. Если нода переходит в состояние MASTER, то BGP пиринг с центральными шлюзами включается и удаляется маршрут до подсети центрального офиса через VIP адрес.
На портах коммутатора Int_switch1_Spoke1, подключенных к шлюзам, обязательно должен быть включен режим portfast.
1. Шлюзы безопасности «С-Терра Шлюз 4.3» могут быть сконфигурированы для ограничения полосы пропускания пользовательского трафика. В рамках настоящей инструкции эта возможность не демонстрируется.
Для исключения срабатываний механизма защиты от атак воспроизведения на принимающем шлюзе безопасности при перегрузке полосы пропускания на передающем шлюзе рекомендуется отказаться от shaping на WAN‑интерфейсе и выполнять его ДО зашифрования трафика, например, на внешнем оборудовании (LAN‑сегмент) или mGRE‑интерфейсе шлюза (подробнее в разделе «Ограничение полосы пропускания (shaping)» инструкции «Обеспечение качества обслуживания для трафика (QoS). Версия 5.0»).
Перед настройкой стенда необходимо выполнить предварительные требования к начальному состоянию «С-Терра Шлюз», которые описаны в главе «Требования к начальному состоянию «С-Терра Шлюз».
На данном устройстве должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
На данном устройстве должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
На данном устройстве должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
На данном устройстве сетевые интерфейсы, коммутирующие шлюзы Hub1, Hub2 и роутер Int_router1_Hub, должны быть в одном VLAN и в режиме portfast.
На данном устройстве сетевые интерфейсы, коммутирующие шлюзы Spoke1_n1, Spoke1_n2 и персональный компьютер host_behind_spoke1, должны быть в одном VLAN и в режиме portfast.
На данном устройстве должны быть настроены IP-адреса в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
На данном устройстве должно быть настроено:
1. IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
2. Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).
На данном устройстве должно быть настроено:
1. IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
2. Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).
На данном устройстве должно быть настроено:
1. IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
2. Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).
На данном устройстве должно быть настроено:
1. IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
2. Source NAT/Destination NAT. В приложении представлены настройки iptables (содержимое файла /etc/iptables.rules).
На данном устройстве должно быть настроено:
1. IP-адреса в соответствии с общей схемой стенда (см. рисунок 1). В приложении представлены сетевые настройки (содержимое файла /etc/network/interfaces).
2. Динамическая маршрутизация. В приложении представлены настройки FRR.
Перед началом настроек убедитесь в том, что былы выполнены шаги, описанные в главе «Требования к начальному состоянию «С-Терра Шлюз».
Краткий план настройки:
1. Базовые сетевые настройки.
2. Настройка IPsec и Firewall.
3. Настройка mGRE-интерфейса.
4. Настройка NHRP.
5. Настройка BGP.
6. Войдите в CLI разграничения доступа (или Initial CLI). Для этого, после появления сообщения:
S-Terra administrative console
введите логин и пароль для CLI разграничения доступа:
Пользователь и пароль по умолчанию: administrator, s-terra. Обязательно смените пароль для пользователя administrator при помощи команды change user password.
login as: administrator
administrator's password:
administrator@sterragate]
7. Базовые сетевые настройки осуществляются из cisco-like консоли шлюза, чтобы попасть в нее выполните следующую команду в CLI разграничения доступа:
Пользователь и пароль по умолчанию: cscons, csp. Обязательно смените пароль для пользователя cscons и enable пароль. Под пользователем cscons можно осуществлять удаленное управление шлюзом по SSH.
administrator@sterragate] configure
sterragate login: cscons
Password:
S-Terra Gate 4.3.xxxxx (amd64)
sterragate#
8. Настройте имя устройства, 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
9. Проверьте доступность маршрута по умолчанию:
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 осуществляются из cisco-like консоли шлюза.
1. Параметры IKE:
hub1#conf t
hub1(config)#crypto isakmp identity dn
hub1(config)#crypto isakmp fragmentation
hub1(config)#crypto isakmp security-association lifetime delta 50
hub1(config)#crypto isakmp initiator-sessions-max 100
hub1(config)#crypto isakmp responder-sessions-max 100
hub1(config)#crypto ipsec security-association lifetime kilobytes 4294967295
hub1(config)#crypto isakmp keepalive 3 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)#exit
2. Параметры IPsec:
2.1. Группы сетевых объектов:
hub1(config)#object-group network self
hub1(config-network-group)#description IP on WAN interface
hub1(config-network-group)#host 100.100.100.2
hub1(config-network-group)#exit
hub1(config)#object-group network private
hub1(config-network-group)#description private LANs
hub1(config-network-group)#100.64.0.0 255.192.0.0
hub1(config-network-group)#172.16.0.0 255.240.0.0
hub1(config-network-group)#192.168.0.0 255.255.0.0
hub1(config-network-group)#10.0.0.0 255.0.0.0
hub1(config-network-group)#exit
hub1(config)#object-group network multicast
hub1(config-network-group)#host 224.0.0.5
hub1(config-network-group)#host 224.0.0.6
hub1(config-network-group)#host 224.0.0.18
hub1(config-network-group)#exit
hub1(config)#object-group network protected_lan
hub1(config-network-group)#description LANs which must be protected by IPsec
hub1(config-network-group)#192.168.100.0 255.255.255.0
hub1(config-network-group)#exit
2.2. Список доступа для трафика:
Для работы DMVPN в списке доступа следует указать ключевое слово each, а не any (как в версиях 4.1/4.2; any в прошлых версиях совместимо с each в текущей):
permit ip object-group self each.
Ключевое слово each позволяет строить узкие IPsec туннели для любого адреса назначения (например, для каждого NBMA адреса шлюза).
При работе «С-Терра Шлюз» через NAT в транспортном IPsec режиме нельзя указывать в фильтрах для трафика, требующего шифрование, протоколы отличные от IP. То есть нельзя написать:
permit gre object-group self each.
hub1(config)#ip access-list extended IPSEC_DMVPN
hub1(config-ext-nacl)# deny icmp object-group self any
hub1(config-ext-nacl)# deny udp object-group self any
hub1(config-ext-nacl)# deny tcp object-group self any
hub1(config-ext-nacl)# deny ip object-group self object-group multicast
hub1(config-ext-nacl)# remark special DMVPN filter
hub1(config-ext-nacl)# permit ip object-group self each
hub1(config-ext-nacl)#exit
hub1(config)#
После исключения из шифрования (строки с deny) протоколов ICMP/UDP/TCP под фильтр permit ip object-group self each попадет как раз GRE трафик.
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 object-group protected_lan object-group private
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
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-интерфейсу, а на филиальных – по два (по одному на каждый центральный шлюз).
1. Настройки mGRE интерфейсов осуществляются из linux bash, чтобы попасть в linux bash выполните следующую команду в CLI разграничения доступа (предварительно нужно выйти из консоли cisco-like):
hub1#exit
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 ethtool -K mgre0 tx off > /dev/null
pre-up ip link set mgre0 mtu 1400
pre-up ip link set mgre0 multicast on
pre-up ip link set mgre0 type gre nopmtudisc
pre-up ip link set mgre0 type gre ignore-df
post-down ip link del mgre0
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 nopmtudisc 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
valid_lft forever preferred_lft forever
Настройки mGRE-интерфейса приведены в приложении.
Настройка NHRP осуществляются из linux bash.
1. Приведите файл /etc/opennhrp/opennhrp.conf к виду:
Значение holding-time следует задавать в диапозоне от 30 до 150. Период отправки nhrp-пакетов равен трети от значения holding-time. При получении nhrp-пакета в log-файле создаются соответсвующие записи. При большом количестве криптомаршрутизаторов участвующих в DMVPN и малом значении holding-time, может произойти переполнение логов. При значении holding-time больше 150 время восстановления соединения между криптомаршрутизаторами может занимать больше минуты.
interface mgre0
multicast dynamic
holding-time 90
cisco-authentication secret
non-caching
2. Добавьте сервис OpenNHRP в автозагрузку и запустите его:
root@hub1:~# systemctl enable opennhrp
Created symlink /etc/systemd/system/multi-user.target.wants/opennhrp.service -> /lib/systemd/system/opennhrp.service.
root@hub1:~# systemctl start opennhrp
Настройки NHRP приведены в приложении.
Динамическая маршрутизация настраивается через консоль сервиса FRR (аналог Quagga).
1. Добавьте сервис FRR в автозагрузку и запустите его:
root@hub1:~# systemctl enable frr
Synchronizing state of frr.service with SysV service script with /lib/system/system-sysv-install.
Executing: /lib/system/system-sysv-install enable frr
root@hub1:~# systemctl start frr
При старте могут возникать сообщения:
Jul 1 15:01:54 sterrragate watchfrr[831]: [EC 268435467] zebra state -> down : initial connection attempt failed
Jul 1 15:01:54 sterrragate watchfrr[831]: [EC 268435467] bgpd state -> down : initial connection attempt failed
Jul 1 15:01:54 sterrragate watchfrr[831]: [EC 268435467] ripd state -> down : initial connection attempt failed
Jul 1 15:01:54 sterrragate watchfrr[831]: [EC 268435467] ospfd state -> down : initial connection attempt failed
Jul 1 15:01:54 sterrragate watchfrr[831]: [EC 268435467] pbrd state -> down : initial connection attempt failedstaticd
Jul 1 15:01:54 sterrragate watchfrr[831]: [EC 268435467] zebra state -> down : initial connection attempt failed
Jul 1 15:01:54 sterrragate watchfrr[831]: [EC 100663303] Forked background command [pid 832]: /usr/lib/frr/watchfrr.sh restart all
Jul 1 15:01:54 sterrragate watchfrr.sh: Cannot stop bgpd: pid file not found
Jul 1 15:01:54 sterrragate watchfrr.sh: Cannot stop ripd: pid file not found
Jul 1 15:01:54 sterrragate watchfrr.sh: Cannot stop zebra: pid file not found
Jul 1 15:01:54 sterrragate watchfrr.sh: Cannot stop ospfd: pid file not found
Jul 1 15:01:54 sterrragate watchfrr.sh: Cannot stop pbrd: pid file not found
Jul 1 15:01:54 sterrragate watchfrr.sh: Cannot stop staticd: pid file not found
Данные сообщения не являются ошибкой при старте сервиса.
2. Войдите в консоль сервиса FRR, для этого нужно из linux bash набрать следующую команду:
root@hub1:~# vtysh
Hello, this is FRRouting (version 7.3).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
hub1#
3. Настройте BGP (см. описание http://docs.frrouting.org):
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 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 192.168.255.1 remote-as 65001
hub1(config-router)# bgp listen limit 5000
hub1(config-router)# bgp listen range 10.10.10.0/24 peer-group spokes-ibgp
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
Команда «neighbor spokes-ibgp next-hop-self» используется для изменения next-hop адреса маршрутов, полученных от eBGP соседей.
Чтобы изменять next-hop адреса маршрутов, полученных по iBGP, можно использовать команду «neighbor spokes-ibgp next-hop-self all». В этом случае трафик между филиалами будет идти через центр (DMVPN phase 1).
hub1(config-router-af)# end
hub1# write
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Warning: /etc/frr/frr.conf.sav unlink failed
Integrated configuration saved to /etc/frr/frr.conf
[OK]
Настройки BGP приведены в приложении.
Перед началом настроек убедитесь в том, что былы выполнены шаги, описанные в главе «Требования к начальному состоянию «С-Терра Шлюз».
Настройка устройства Hub2 осуществляется аналогично устройству Hub1 с учетом соответствующих IP-адресов (см. рисунок 1).
Значение mGRE key на Hub1 и Hub2 должно быть различным.
В приложении представлены соответствующие конфигурационные файлы.
Перед началом настроек убедитесь в том, что былы выполнены шаги, описанные в главе «Требования к начальному состоянию «С-Терра Шлюз».
Краткий план настройки:
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.3.xxxxx (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 осуществляются из cisco-like консоли шлюза.
1. Параметры IKE:
spoke1-n1#conf t
spoke1-n1(config)#crypto isakmp identity dn
spoke1-n1(config)#crypto isakmp fragmentation
spoke1-n1(config)#crypto isakmp security-association lifetime delta 50
spoke1-n1(config)#crypto isakmp initiator-sessions-max 100
spoke1-n1(config)#crypto isakmp responder-sessions-max 100
spoke1-n1(config)#crypto ipsec security-association lifetime kilobytes 4294967295
spoke1-n1(config)#crypto isakmp keepalive 3 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. Группы сетевых объектов:
spoke1-n1(config)#object-group network self
spoke1-n1(config-network-group)#description IP on WAN interface
spoke1-n1(config-network-group)#host 100.100.100.2
spoke1-n1(config-network-group)#exit
spoke1-n1(config)#object-group network private
spoke1-n1(config-network-group)#description private LANs
spoke1-n1(config-network-group)#100.64.0.0 255.192.0.0
spoke1-n1(config-network-group)#172.16.0.0 255.240.0.0
spoke1-n1(config-network-group)#192.168.0.0 255.255.0.0
spoke1-n1(config-network-group)#10.0.0.0 255.0.0.0
spoke1-n1(config-network-group)#exit
spoke1-n1(config)#object-group network multicast
spoke1-n1(config-network-group)#host 224.0.0.5
spoke1-n1(config-network-group)#host 224.0.0.6
spoke1-n1(config-network-group)#host 224.0.0.18
spoke1-n1(config-network-group)#exit
spoke1-n1(config)#object-group network protected_lan
spoke1-n1(config-network-group)#description LANs which must be protected by IPsec
spoke1-n1(config-network-group)#192.168.1.0 255.255.255.0
spoke1-n1(config-network-group)#exit
2.2. Список доступа для трафика:
Для работы DMVPN в списке доступа следует указать ключевое слово each, а не any:
permit ip object-group self each.
Ключевое слово each позволяет строить узкие IPsec туннели для любого адреса назначения (например, для каждого NBMA адреса шлюза).
При работе «С-Терра Шлюз» через NAT в транспортном IPsec режиме нельзя указывать в фильтрах для трафика, требующего шифрование, протоколы отличные от IP. То есть нельзя написать:
permit gre object-group self each.
spoke1-n1(config)#ip access-list extended IPSEC_DMVPN
spoke1-n1(config-ext-nacl)# deny icmp object-group self any
spoke1-n1(config-ext-nacl)# deny udp object-group self any
spoke1-n1(config-ext-nacl)# deny tcp object-group self any
spoke1-n1(config-ext-nacl)# deny ip object-group self object-group multicast
spoke1-n1(config-ext-nacl)# remark special DMVPN filter
spoke1-n1(config-ext-nacl)# permit ip object-group self each
spoke1-n1(config-ext-nacl)#exit
spoke1-n1(config)#
После исключения из шифрования (строки с deny) протоколов ICMP/UDP/TCP под фильтр permit ip object-group self each попадет как раз GRE трафик.
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 object-group protected_lan object-group private
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 приведены в приложении.
1. Настройки mGRE интерфейсов осуществляются из linux bash, чтобы попасть в linux bash выполните следующую команду в CLI разграничения доступа:
spoke1-n1#exit
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 ethtool -K mgre0 tx off > /dev/null
pre-up ip link set mgre0 mtu 1400
pre-up ip link set mgre0 multicast on
pre-up ip link set mgre0 type gre nopmtudisc
pre-up ip link set mgre0 type gre ignore-df
post-down ip link del mgre0
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 ethtool -K mgre1 tx off > /dev/null
pre-up ip link set mgre1 mtu 1400
pre-up ip link set mgre1 multicast on
pre-up ip link set mgre1 type gre nopmtudisc
pre-up ip link set mgre1 type gre ignore-df
post-down ip link del mgre1
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 nopmtudisc key 1
root@spoke1-n1:~# ip tunnel show mgre1
mgre1: gre/ip remote any local any ttl 64 tos inherit nopmtudisc key 2
root@spoke1-n1:~# ip address show dev mgre0
5: mgre0@NONE: <MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN group default qlen 1
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
valid_lft forever preferred_lft forever
root@spoke1-n1:~# ip address show dev mgre1
6: mgre1@NONE: <MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN group default qlen 1
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
valid_lft forever preferred_lft forever
Настройки mGRE-интерфейсов приведены в приложении.
Настройка NHRP осуществляются из linux bash.
1. Приведите файл /etc/opennhrp/opennhrp.conf к виду:
На всех филиальных шлюзах настройки (/etc/opennhrp/opennhrp.conf) NHRP должны быть одинаковыми.
Значение holding-time следует задавать в диапозоне от 30 до 150. Период отправки nhrp-пакетов равен трети от значения holding-time. При получении nhrp-пакета в log-файле создаются соответсвующие записи. При большом количестве криптомаршрутизаторов участвующих в DMVPN и малом значении holding-time, может произойти переполнение логов. При значении holding-time больше 150 время восстановления соединения между криптомаршрутизаторами может занимать больше минуты.
Маска в настройках opennhrp должна совпадать с маской на mgre интерфейсе.
interface mgre0
map 10.10.10.100/24 172.16.100.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
interface mgre1
map 10.10.20.200/24 172.17.200.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
2. Добавьте сервис OpenNHRP в автозагрузку и запустите его:
root@spoke1-n1:~# systemctl enable opennhrp
Created symlink /etc/systemd/system/multi-user.target.wants/opennhrp.service -> /lib/systemd/system/opennhrp.service.
root@spoke1-n1:~# systemctl start opennhrp
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 приведены в приложении.
Динамическая маршрутизация настраивается через консоль сервиса FRR (аналог Quagga).
1. Добавьте сервис FRR в автозагрузку и запустите его:
root@spoke1-n1:~# systemctl enable frr
Synchronizing state of frr.service with SysV service script with /lib/system/system-sysv-install.
Executing: /lib/system/system-sysv-install enable frr
root@spoke1-n1:~# systemctl start frr
2. Войдите в консоль сервиса FRR, для этого нужно из linux bash набрать следующую команду:
root@spoke1-n1:~# vtysh
Hello, this is FRRouting (version 7.3).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
spoke1-n1#
3. Настройте BGP (см. описание http://docs.frrouting.org):
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.10.100 timers connect 30
spoke1-n1(config-router)# neighbor 10.10.20.200 remote-as 65000
spoke1-n1(config-router)# neighbor 10.10.20.200 timers connect 30
По умолчанию, время, через которое будет совершена повторная попытка построения BGP соседства составляет две минуты. Чтобы уменьшить данное время до 30 секунд используется команда «neighbor 10.10.10.100 timers connect 30».
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)# route-map FROM-HUB2-IN permit 1
spoke1-n1(config-route-map)# set local-preference 50
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)# end
spoke1-n1# write
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Warning: /etc/frr/frr.conf.sav unlink failed
Integrated configuration saved to /etc/frr/frr.conf
[OK]
Настройки BGP приведены в приложении.
Настройка VRRP осуществляются из linux bash.
1. Сохраните копию файла /etc/keepalived/notify_common.conf в /etc/keepalived/notify_common.conf.backup и приведите файл /etc/keepalived/notify_common.conf к виду:
FLAG_MANAGE_ROUTES="true"
RESERVE_ROUTES="192.168.100.0/24"
RESERVE_NEXTHOP="192.168.1.1"
RESERVE_METRIC="1"
FLAG_DMVPN_SCENARIO_ON_CLUSTERED_SPOKE="true"
DMVPN_INTERNAL_ROUTING_PROTOCOL="IBGP"
DMVPN_LOCAl_ASN="65000"
DMVPN_BGP_NEIGHBORS="10.10.10.100 10.10.20.200"
Конфигурационный файл /etc/keepalived/notify_common.conf управляет скриптом /etc/keepalived/scripts/notify_common. Логика следующая: если нода переходит в состояние BACKUP или FAULT, то BGP пиринг с центральными шлюзами (10.10.10.100, 10.10.20.200) выключается и добавляется маршрут до подсети 192.168.100.0/24 через 192.168.1.1 (VIP адрес). Если нода переходит в состояние MASTER, то BGP пиринг с центральными шлюзами включается и удаляется маршрут до подсети 192.168.100.0/24 через 192.168.1.1.
Изменение параметров DMVPN в файле /etc/keepalived/notify_common.conf после настройки keepalived (в процессе работы):
При необходимости изменения параметров следует:
1) Перезапустить FRR с помощью команды "systemctl restart frr" (это действие загрузит конфигурацию, которая соответствует состоянию MASTER). ВАЖНО: После перезапуска FRR может возникнуть ассиметричная маршрутизация. Это связано с тем, что устройство в состоянии BACKUP или FAULT будет участвовать в обмене BGP маршрутами;
2) Изменить требуемые настройки FRR, которые соответствует состоянию MASTER;
3) Сохранить настройки FRR (команда write).
4) После настройки FRR требуется изменить соответствующие параметры DMVPN в файле /etc/keepalived/notify_common.conf.
5) Для устройств, находящихся в состоянии BACKUP или FAULT, следует перезапустить сервис keepalived, чтобы применить настройки из файла /etc/keepalived/notify_common.conf. Для устройства в состоянии MASTER настройки применяются после перехода в состояние BACKUP или FAULT.
Если была допущена ошибка в файле /etc/keepalived/notify_common.conf в части DMVPN (например, номер автономной системы или IP-адрес BGP пира не совпадает с настройками FRR), то при переходе ноды в состояние BACKUP или FAULT в логах /var/log/cspvpngate.log появится сообщение "VRRP notify common script: ERROR: can not set shutdown on neighbor". После исправления ошибок в файле достаточно перезапустить сервис keepalived.
2. Приведите файл /etc/keepalived/keepalived.conf к виду:
global_defs {
enable_dbus
}
vrrp_track_process opennhrp {
process opennhrp
quorum 1
delay 5
}
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_sync_group 0 {
notify "/etc/keepalived/scripts/notify_common"
group {
eth1_1
}
}
vrrp_instance eth1_1 {
interface eth1
track_interface {
eth0
}
track_process {
opennhrp
}
track_script {
check_isp_link
}
virtual_ipaddress {
192.168.1.1/24 label eth1:900
}
nopreempt
garp_master_refresh 5
priority 100
advert_int 3
virtual_router_id 1
}
Сервис Keepalived проверяет:
· запущен ли сервис opennhrp и, если остановлен, то нода переводится в состояние FAULT;
· доступность канала Интернет через интерфейс eth0, доступность канала определяется по доступности хостов по протоколу ICMP, если все хосты недоступны, то нода переводится в состояние FAULT;
· состояние сетевого интерфейса eth0, если интерфейс теряет несущую (отключили сетевой кабель) или переходит в состояние down, то нода переводится в состояние FAULT.
3. Добавьте сервис Keepalived в автозагрузку и запустите его:
root@spoke1-n1:~# systemctl enable keepalived
Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service -> /lib/systemd/system/keepalived.service.
Created symlink /etc/systemd/system/vpngate.service.wants/keepalived.service -> /lib/systemd/system/keepalived.service.
root@spoke1-n1:~# systemctl start keepalived
4. Убедитесь, что нода перешла в состояние MASTER. Для этого войдите в cisco-like консоль шлюза и посмотрите настройки VRRP:
root@spoke1-n1:~# cs_console
spoke1-n1>enable
Password:
spoke1-n1#show vrrp
Interface VRID State
-------------------------------------------
GigabitEthernet0/1 1 Master
spoke1-n1#exit
5. Убедитесь, что на внутреннем интерфейсе eth1 появился кластерный VIP-адрес:
root@spoke1-n1:~# ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:9e:5b:07 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
valid_lft forever preferred_lft forever
inet 192.168.1.1/24 scope global secondary eth1:900
valid_lft forever preferred_lft forever
Настройки VRRP приведены в приложении.
Перед началом настроек убедитесь в том, что былы выполнены шаги, описанные в главе «Требования к начальному состоянию «С-Терра Шлюз».
Настройка устройства Spoke1-n2 осуществляется аналогично устройству Spoke1-n1 с учетом соответствующих IP-адресов (см. рисунок 1).
Значение bgp router-id у резервной ноды должно отличаться от значения основной ноды (Spoke1-n1).
Значение priority в VRRP у резервной ноды должно быть меньше, чем у основной ноды.
В приложении представлены соответствующие конфигурационные файлы.
Перед началом настроек убедитесь в том, что былы выполнены шаги, описанные в главе «Требования к начальному состоянию «С-Терра Шлюз».
Настройка устройства 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: 105:09
Interface: mgre0
Type: dynamic
Protocol-Address: 10.10.10.3/32
NBMA-Address: 172.16.2.2
Flags: up
Expires-In: 104: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: 104: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: 102:09
Interface: mgre0
Type: dynamic
Protocol-Address: 10.10.20.3/32
NBMA-Address: 172.16.2.2
Flags: up
Expires-In: 101: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: 101: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 STALE
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 STALE
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-адрес филиальных шлюзов выполнен верно.
4. Убедитесь, что на центральных шлюзах корректно работает протокол BGP, для этого зайдите в linux bash выполните следующие команды:
root@hub1:~# vtysh
Hello, this is FRRouting (version 7.3).
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 7.3).
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 group default qlen 1000
link/ether 00:50:56:9e:5b:07 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
valid_lft forever preferred_lft forever
inet 192.168.1.1/24 scope global secondary eth1:900
valid_lft forever preferred_lft forever
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 3s, length 20
13:55:40.069075 IP 192.168.1.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 3s, length 20
13:55:43.070165 IP 192.168.1.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 3s, length 20
13:55:46.071247 IP 192.168.1.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 3s, 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 пакеты.
Также в cisco-like консоли шлюза можно увидеть состояние VRRP:
spoke1-n1#show vrrp
Interface VRID State
-------------------------------------------
GigabitEthernet0/1 1 Master
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:~# ip link set dev 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 7.3).
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 7.3).
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:~# ip link set dev 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 7.3).
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 7.3).
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, для этого проверьте наличие VIP адреса на внутреннем интерфейсе и состояние VRRP в cisco-like консоли шлюза:
root@spoke1-n2:~# ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:9e:2f:6a brd ff:ff:ff:ff:ff:ff
inet 192.168.1.20/24 brd 192.168.1.255 scope global eth1
valid_lft forever preferred_lft forever
inet 192.168.1.1/24 scope global secondary eth1:900
valid_lft forever preferred_lft forever
spoke1-n2#show vrrp
Interface VRID State
-------------------------------------------
GigabitEthernet0/1 1 Master
Видно, что кластерный VIP-адрес (192.168.1.1) присутствует на внутреннем интерфейсе eth1 и VRRP находится в состоянии MASTER.
1.3. Убедитесь, что на резервной ноде по протоколу BGP установлено соседство с центральными шлюзами и получены маршруты в защищаемые подсети, для этого в linux bash выполните следующие команды:
root@spoke1-n2:~# vtysh
Hello, this is FRRouting (version 7.3).
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), для этого проверьте отсутсвие VIP адреса на внутреннем интерфейсе, и состояние VRRP в cisco-like консоли шлюза:
root@spoke1-n1:~# ip address show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:9e:5b:07 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
valid_lft forever preferred_lft forever
spoke1-n1#show vrrp
Interface VRID State
-------------------------------------------
GigabitEthernet0/1 1 Backup
Видно, что основная нода находится в состоянии 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, для этого состояние VRRP в cisco-like консоли шлюза:
spoke1-n2#show vrrp
Interface VRID State
-------------------------------------------
GigabitEthernet0/1 1 Fault
2.3. Убедитесь, что основная нода кластера перешла в состояние MASTER, для этого в linux bash выполните следующую команду:
spoke1-n1#show vrrp
Interface VRID State
-------------------------------------------
GigabitEthernet0/1 1 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 выполните следующую команду:
spoke1-n2#show vrrp
Interface VRID State
-------------------------------------------
GigabitEthernet0/1 1 Backup
Видно, что в случае полного отказа основной ноды кластера роль MASTER на себя берет резервная нода и успешно обрабатывает трафик. При отказе Интернет-провайдера нода кластера переходит в состояние FAULT, а в случае восстановления в BACKUP.
В данной главе будет описана настройка балансировки пакетов от филиальных шлюзов между шлюзами центрального офиса.
На устройстве Int_router1_Hub должны отсутствовать route-map, регулирующие приоритет входящих маршрутов, полученных от Hub1 и Hub2. В таком случае в таблице марщрутизации Int_router1_Hub будут присутствовать маршруты, полученные как от Hub1, так и от Hub2.
На криптошлюзах филиалов требуется изменить настройки FRR. Далее показана настройка Spoke1-n1.
1. Войдите в консоль сервиса FRR, для этого нужно из linux bash набрать следующую команду:
root@spoke1-n1:~# vtysh
Hello, this is FRRouting (version 7.3).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
spoke1-n1#
2. Требуется удалить старые route-map. После этого Spoke1-n1 будет получать маршруты до защищаемых подсетей центрального офиса и филиалов с одинаковым приоритетом:
spoke1-n1# conf t
spoke1-n1(config)# no route-map FROM-HUB1-IN
spoke1-n1(config)# no route-map FROM-HUB2-IN
spoke1-n1(config)# router bgp 65000
spoke1-n1(config-router)# address-family ipv4 unicast
spoke1-n1(config-router-af)# no neighbor 10.10.10.100 route-map FROM-HUB1-IN in
spoke1-n1(config-router-af)# no neighbor 10.10.20.200 route-map FROM-HUB2-IN in
3. Добавьте новые route-map с указанием local-preference для маршрутов отправленных на Hub1 и Hub2. Это позволит заранее устанавливать приоритет маршрутов до подсетей других филиалов, которые находятся в одной автономной системе. Поэтому между филиалами не будет асимметричной маршрутизации. Значение local-preference по eBGP передаваться не будет:
spoke1-n1(config-router-af)# neighbor 10.10.10.100 route-map TO-HUB1-OUT out
spoke1-n1(config-router-af)# neighbor 10.10.20.200 route-map TO-HUB2-OUT out
spoke1-n1(config-router-af)# exit-address-family
spoke1-n1(config-router)# route-map TO-HUB2-OUT permit 1
spoke1-n1(config-route-map)# set local-preference 50
spoke1-n1(config-route-map)# route-map TO-HUB1-OUT permit 1
spoke1-n1(config-route-map)# set local-preference 100
spoke1-n1(config-route-map)# end
4. Сохраните настройки FRR:
spoke1-n1# write
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Warning: /etc/frr/frr.conf.sav unlink failed
Integrated configuration saved to /etc/frr/frr.conf
[OK]
Настройка устройств Spoke1-n2 и Spoke2 осуществляется аналогично устройству Spoke1-n1.
После настройки на устройстве Int_router1_Hub должно быть по два маршрута до защищаемых сетей филиала, а на криптошлюзах филиалов будет два маршрута до защищаемой сети центрального офиса.
root@Int_router1_Hub:~# ip route
192.168.1.0/24 proto 186 metric 20
nexthop via 192.168.255.10 dev ens160 weight 1
nexthop via 192.168.255.20 dev ens160 weight 1
192.168.2.0/24 proto 186 metric 20
nexthop via 192.168.255.10 dev ens160 weight 1
nexthop via 192.168.255.20 dev ens160 weight 1
192.168.100.0/24 dev ens192 proto kernel scope link src 192.168.100.1
192.168.255.0/24 dev ens160 proto kernel scope link src 192.168.255.1
root@spoke1-n1:~# ip route
default via 100.100.1.1 dev eth0
10.10.10.0/24 dev mgre0 proto kernel scope link src 10.10.10.1
10.10.20.0/24 dev mgre1 proto kernel scope link src 10.10.20.1
100.100.1.0/24 dev eth0 proto kernel scope link src 100.100.1.2
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10
192.168.2.0/24 via 10.10.10.3 dev mgre0 proto bgp metric 20
192.168.100.0/24 proto bgp metric 20
nexthop via 10.10.10.100 dev mgre0 weight 1
nexthop via 10.10.20.200 dev mgre1 weight 1
root@spoke2:~# ip route
default via 172.16.2.1 dev eth0
10.10.10.0/24 dev mgre0 proto kernel scope link src 10.10.10.3
10.10.20.0/24 dev mgre1 proto kernel scope link src 10.10.20.3
172.16.2.0/24 dev eth0 proto kernel scope link src 172.16.2.2
192.168.1.0/24 via 10.10.10.1 dev mgre0 proto bgp metric 20
192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.1
192.168.100.0/24 proto bgp metric 20
nexthop via 10.10.10.100 dev mgre0 weight 1
nexthop via 10.10.20.200 dev mgre1 weight 1
1. Если на шлюзах филиала настроен протокол VRRP, то на криптошлюзах центрального офиса может возникать ошибка:
May 14 14:47:25 hub1 bgpd[740]: [EC 33554454] 10.10.10.1 [Error] bgp_read_packet error: Connection reset by peer
Данная ошибка возникает из-за того, что критпошлюзы центрального офиса пытаются поднять BGP пиринг с резервной нодой, где пиринг отключен.
2. Если в качестве протокола динамической маршрутизации используется OSPF, то при добавлении в систему GRE интерфейса может произойти следующее. В настройки FRR для данного GRE интерфейса будет добавлена команда “ip ospf network broadcast”. Также проблема может возникать при перезапуске сервисов networking и vpndrv, а также при перезагрузке шлюза.
Чтобы избежать проблемы нужно, после добавления нового GRE интерфейса, а также при перезапуске сервисов networking и vpndrv, перезапустить сервис FRR, чтобы использовались сохраненные в FRR настройки.
root@Hub1:~# systemctl restart frr.service
Чтобы после перезагрузки шлюза GRE интерфейс не переходил в broadcast, следует настроить запуск FRR сервиса после сервиса networking. Настройка осуществляется через linux bash:
2.1. Создайте директорию /etc/systemd/system/frr.service.d/:
root@Hub1-n1:~# mkdir -p /etc/systemd/system/frr.service.d
2.2. Создайте файл /etc/systemd/system/frr.service.d/add_dependency.conf с содержимым:
[Unit]
After=networking.service
2.3. Выполните пересчет хешей при выполнении любого из следущих условий:
· для любого класса СКЗИ, если доверенная загрузка Шлюза обеспечивается программными средствами (СофтМДЗ, см. файл /etc/image_version);
· для классов СКЗИ КС2 и КС3, если доверенная загрузка Шлюза обеспечивается аппаратными средствами.
root@Hub1:~# /opt/VPNagent/bin/links_verify.sh update
2.4. Перезапустите шлюз:
root@Hub1:~# reboot
Примечание: в процессе включения шлюза службы запускаются в следующем порядке: сначала загружается vpndrv, затем networking, затем frr, и последним запускается vpngate. При выключении шлюза службы завершаются в обратном порядке. В то время, когда vpngate.service не работает, действует политика Default Driver Policy (DDP), и в случае, если политика установлена в dropall, то FRR не сможет отправлять и получать обновления по протоколам динамической маршрутизации от других сетевых устройств.
Рекомендации для улучшения производительности актуальны для Продукта «С-Терра Шлюз» версии 4.3 сборки 4.3.23955 (исполнения ПАК «С-Терра Шлюз» версий «3-7», «3-9», «3-11»).
1. Выставите в драйвере размер очереди на отправку в 960 пакетов:
root@Hub1:~# drv_mgr set pq_send_q_size 960
Value of "pq_send_q_size" is set to 960.
2. Выставите в linux размер очереди на отправку в 10000 пакетов:
2.1. Создайте файл /etc/network/if-up.d/set_iface_qlen со следующим содержимым:
#!/bin/sh
if ! ip link set dev $IFACE qlen 10000; then
logger -p local7.error "ERROR: Сan not set qlen to 10000 on $IFACE"
fi
2.2. Добавьте права на исполнение:
root@Hub1:~# chmod u+x /etc/network/if-up.d/set_iface_qlen
2.3. Перезагрузитесь и посмотрите, что на сетевых интерфейса в состоянии UP значение qlen равно 10000:
root@Hub1:~# ip l | grep qlen
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 10000
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 10000
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 10000
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 10000
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
Содержимое файла /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
Содержимое файла /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
Содержимое файла /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]: '
Содержимое файла /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
Содержимое файла /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]: '
Содержимое файла /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
Содержимое файла /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]: '
Содержимое файла /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
Содержимое файла /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]: '
Содержимое файла /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
Содержимое файла /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
Содержимое файла /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
Содержимое файла /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 7.3
frr defaults traditional
hostname int-router1-hub
log syslog informational
no ipv6 informational
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
!
!
version 12.4
no service password-encryption
!
crypto ipsec df-bit copy
crypto isakmp identity dn
crypto isakmp fragmentation
crypto isakmp security-association lifetime delta 50
crypto isakmp initiator-sessions-max 100
crypto isakmp responder-sessions-max 100
crypto ipsec security-association lifetime kilobytes 4294967295
crypto isakmp keepalive 3 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
!
object-group network self
description IP on WAN interface
host 100.100.100.2
!
object-group network private
description private LANs
100.64.0.0 255.192.0.0
172.16.0.0 255.240.0.0
192.168.0.0 255.255.0.0
10.0.0.0 255.0.0.0
!
object-group network multicast
host 224.0.0.5
host 224.0.0.6
host 224.0.0.18
!
object-group network protected_lan
description LANs which must be protected by IPsec
192.168.100.0 255.255.255.0
!
ip access-list extended FIREWALL_OUT
deny ip object-group protected_lan object-group private
deny gre any any
permit ip any any
!
ip access-list extended IPSEC_DMVPN
deny icmp object-group self any
deny udp object-group self any
deny tcp object-group self any
deny ip object-group self object-group multicast
remark special DMVPN filter
permit ip object-group self each
!
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
Содержимое файла /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 ethtool -K mgre0 tx off > /dev/null
pre-up ip link set mgre0 mtu 1400
pre-up ip link set mgre0 multicast on
pre-up ip link set mgre0 type gre nopmtudisc
pre-up ip link set mgre0 type gre ignore-df
post-down ip link del mgre0
Содержимое файла /etc/opennhrp/opennhrp.conf:
interface mgre0
multicast dynamic
holding-time 90
cisco-authentication secret
non-caching
frr version 7.3
frr defaults traditional
hostname hub1
log syslog informational
service integrated-vtysh-config
!
router bgp 65000
bgp router-id 10.10.10.100
bgp log-neighbor-changes
bgp network import-check
timers bgp 3 9
neighbor spokes-ibgp peer-group
neighbor spokes-ibgp remote-as 65000
neighbor 192.168.255.1 remote-as 65001
bgp listen limit 5000
bgp listen range 10.10.10.0/24 peer-group spokes-ibgp
!
address-family ipv4 unicast
neighbor spokes-ibgp route-reflector-client
neighbor spokes-ibgp next-hop-self
exit-address-family
!
line vty
!
!
version 12.4
no service password-encryption
!
crypto ipsec df-bit copy
crypto isakmp identity dn
crypto isakmp fragmentation
crypto isakmp security-association lifetime delta 50
crypto isakmp initiator-sessions-max 100
crypto isakmp responder-sessions-max 100
crypto ipsec security-association lifetime kilobytes 4294967295
crypto isakmp keepalive 3 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
!
object-group network self
description IP on WAN interface
host 100.100.200.2
!
object-group network private
description private LANs
100.64.0.0 255.192.0.0
172.16.0.0 255.240.0.0
192.168.0.0 255.255.0.0
10.0.0.0 255.0.0.0
!
object-group network multicast
host 224.0.0.5
host 224.0.0.6
host 224.0.0.18
!
object-group network protected_lan
description LAN which must be protected by IPsec
192.168.100.0 255.255.255.0
!
ip access-list extended FIREWALL_OUT
deny ip object-group protected_lan object-group private
deny gre any any
permit ip any any
!
ip access-list extended IPSEC_DMVPN
deny icmp object-group self any
deny udp object-group self any
deny tcp object-group self any
deny ip object-group self object-group multicast
remark special DMVPN filter
permit ip object-group self each
!
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
Содержимое файла /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 ethtool -K mgre0 tx off > /dev/null
pre-up ip link set mgre0 mtu 1400
pre-up ip link set mgre0 multicast on
pre-up ip link set mgre0 type gre nopmtudisc
pre-up ip link set mgre0 type gre ignore-df
post-down ip link del mgre0
Содержимое файла /etc/opennhrp/opennhrp.conf:
interface mgre0
multicast dynamic
holding-time 90
cisco-authentication secret
non-caching
frr version 7.3
frr defaults traditional
hostname hub2
log syslog informational
service integrated-vtysh-config
!
router bgp 65000
bgp router-id 10.10.20.200
bgp log-neighbor-changes
bgp network import-check
timers bgp 3 9
neighbor spokes-ibgp peer-group
neighbor spokes-ibgp remote-as 65000
neighbor 192.168.255.1 remote-as 65001
bgp listen limit 5000
bgp listen range 10.10.20.0/24 peer-group spokes-ibgp
!
address-family ipv4 unicast
neighbor spokes-ibgp route-reflector-client
neighbor spokes-ibgp next-hop-self
exit-address-family
!
line vty
!
!
version 12.4
no service password-encryption
!
crypto ipsec df-bit copy
crypto isakmp identity dn
crypto isakmp fragmentation
crypto isakmp security-association lifetime delta 50
crypto isakmp initiator-sessions-max 100
crypto isakmp responder-sessions-max 100
crypto ipsec security-association lifetime kilobytes 4294967295
crypto isakmp keepalive 3 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
!
object-group network self
description IP on WAN interface
host 100.100.1.2
!
object-group network private
description private LANs
100.64.0.0 255.192.0.0
172.16.0.0 255.240.0.0
192.168.0.0 255.255.0.0
10.0.0.0 255.0.0.0
!
object-group network multicast
host 224.0.0.5
host 224.0.0.6
host 224.0.0.18
!
object-group network protected_lan
description LANs which must be protected by IPsec
192.168.1.0 255.255.255.0
!
ip access-list extended FIREWALL_OUT
deny ip object-group protected_lan object-group private
deny gre any any
permit ip any any
!
ip access-list extended IPSEC_DMVPN
deny icmp object-group self any
deny udp object-group self any
deny tcp object-group self any
deny ip object-group self object-group multicast
remark special DMVPN filter
permit ip object-group self each
!
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
Содержимое файла /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 ethtool -K mgre0 tx off > /dev/null
pre-up ip link set mgre0 mtu 1400
pre-up ip link set mgre0 multicast on
pre-up ip link set mgre0 type gre nopmtudisc
pre-up ip link set mgre0 type gre ignore-df
post-down ip link del mgre0
Содержимое файла /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 ethtool -K mgre1 tx off > /dev/null
pre-up ip link set mgre1 mtu 1400
pre-up ip link set mgre1 multicast on
pre-up ip link set mgre1 type gre nopmtudisc
pre-up ip link set mgre1 type gre ignore-df
post-down ip link del mgre1
Содержимое файла /etc/opennhrp/opennhrp.conf:
interface mgre0
map 10.10.10.100/24 172.16.100.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
interface mgre1
map 10.10.20.200/24 172.17.200.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
frr version 7.3
frr defaults traditional
hostname spoke1-n1
log syslog informational
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.10.100 timers connect 30
neighbor 10.10.20.200 remote-as 65000
neighbor 10.10.20.200 timers connect 30
!
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
!
Содержимое файла /etc/keepalived/notify_common.conf:
FLAG_MANAGE_ROUTES="true"
RESERVE_ROUTES="192.168.100.0/24"
RESERVE_NEXTHOP="192.168.1.1"
RESERVE_METRIC="1"
FLAG_DMVPN_SCENARIO_ON_CLUSTERED_SPOKE="true"
DMVPN_INTERNAL_ROUTING_PROTOCOL="IBGP"
DMVPN_LOCAl_ASN="65000"
DMVPN_BGP_NEIGHBORS="10.10.10.100 10.10.20.200"
Содержимое файла /etc/keepalived/keepalived.conf:
global_defs {
enable_dbus
}
vrrp_track_process opennhrp {
process opennhrp
quorum 1
delay 5
}
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_sync_group 0 {
notify "/etc/keepalived/scripts/notify_common"
group {
eth1_1
}
}
vrrp_instance eth1_1 {
interface eth1
track_interface {
eth0
}
track_process {
opennhrp
}
track_script {
check_isp_link
}
virtual_ipaddress {
192.168.1.1/24 label eth1:900
}
nopreempt
garp_master_refresh 5
priority 100
advert_int 3
virtual_router_id 1
}
!
version 12.4
no service password-encryption
!
crypto ipsec df-bit copy
crypto isakmp identity dn
crypto isakmp fragmentation
crypto isakmp security-association lifetime delta 50
crypto isakmp initiator-sessions-max 100
crypto isakmp responder-sessions-max 100
crypto ipsec security-association lifetime kilobytes 4294967295
crypto isakmp keepalive 3 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
!
object-group network self
description IP on WAN interface
host 100.101.1.2
!
object-group network private
description private LANs
100.64.0.0 255.192.0.0
172.16.0.0 255.240.0.0
192.168.0.0 255.255.0.0
10.0.0.0 255.0.0.0
!
object-group network multicast
host 224.0.0.5
host 224.0.0.6
host 224.0.0.18
!
object-group network protected_lan
description LANs which must be protected by IPsec
192.168.1.0 255.255.255.0
!
ip access-list extended FIREWALL_OUT
deny ip object-group protected_lan object-group private
deny gre any any
permit ip any any
!
ip access-list extended IPSEC_DMVPN
deny icmp object-group self any
deny udp object-group self any
deny tcp object-group self any
deny ip object-group self object-group multicast
remark special DMVPN filter
permit ip object-group self each
!
!
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
Содержимое файла /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 ethtool -K mgre0 tx off > /dev/null
pre-up ip link set mgre0 mtu 1400
pre-up ip link set mgre0 multicast on
pre-up ip link set mgre0 type gre nopmtudisc
pre-up ip link set mgre0 type gre ignore-df
post-down ip link del mgre0
Содержимое файла /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 ethtool -K mgre1 tx off > /dev/null
pre-up ip link set mgre1 mtu 1400
pre-up ip link set mgre1 multicast on
pre-up ip link set mgre1 type gre nopmtudisc
pre-up ip link set mgre1 type gre ignore-df
post-down ip link del mgre1
Содержимое файла /etc/opennhrp/opennhrp.conf:
interface mgre0
map 10.10.10.100/24 172.16.100.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
interface mgre1
map 10.10.20.200/24 172.17.200.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
frr version 7.3
frr defaults traditional
hostname spoke1-n2
log syslog informational
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.10.100 timers connect 30
neighbor 10.10.20.200 remote-as 65000
neighbor 10.10.20.200 timers connect 30
!
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
!
Содержимое файла /etc/keepalived/notify_common.conf:
FLAG_MANAGE_ROUTES="true"
RESERVE_ROUTES="192.168.100.0/24"
RESERVE_NEXTHOP="192.168.1.1"
RESERVE_METRIC="1"
FLAG_DMVPN_SCENARIO_ON_CLUSTERED_SPOKE="true"
DMVPN_INTERNAL_ROUTING_PROTOCOL="IBGP"
DMVPN_LOCAl_ASN="65000"
DMVPN_BGP_NEIGHBORS="10.10.10.100 10.10.20.200"
Содержимое файла /etc/keepalived/keepalived.conf:
global_defs {
enable_dbus
}
vrrp_track_process opennhrp {
process opennhrp
quorum 1
delay 5
}
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_sync_group 0 {
notify "/etc/keepalived/scripts/notify_common"
group {
eth1_1
}
}
vrrp_instance eth1_1 {
interface eth1
track_interface {
eth0
}
track_process {
opennhrp
}
track_script {
check_isp_link
}
virtual_ipaddress {
192.168.1.1/24 label eth1:900
}
nopreempt
garp_master_refresh 5
priority 50
advert_int 3
virtual_router_id 1
}
!
version 12.4
no service password-encryption
!
crypto ipsec df-bit copy
crypto isakmp identity dn
crypto isakmp fragmentation
crypto isakmp security-association lifetime delta 50
crypto isakmp initiator-sessions-max 100
crypto isakmp responder-sessions-max 100
crypto ipsec security-association lifetime kilobytes 4294967295
crypto isakmp keepalive 3 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
!
object-group network self
description IP on WAN interface
host 172.16.2.2
!
object-group network private
description private LANs
100.64.0.0 255.192.0.0
172.16.0.0 255.240.0.0
192.168.0.0 255.255.0.0
10.0.0.0 255.0.0.0
!
object-group network multicast
host 224.0.0.5
host 224.0.0.6
host 224.0.0.18
!
object-group network protected_lan
description LANs which must be protected by IPsec
192.168.2.0 255.255.255.0
!
ip access-list extended FIREWALL_OUT
deny ip object-group protected_lan object-group private
deny gre any any
permit ip any any
!
ip access-list extended IPSEC_DMVPN
deny icmp object-group self any
deny udp object-group self any
deny tcp object-group self any
deny ip object-group self object-group multicast
remark special DMVPN filter
permit ip object-group self each
!
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
Содержимое файла /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 ethtool -K mgre0 tx off > /dev/null
pre-up ip link set mgre0 mtu 1400
pre-up ip link set mgre0 multicast on
pre-up ip link set mgre0 type gre nopmtudisc
pre-up ip link set mgre0 type gre ignore-df
post-down ip link del mgre0
Содержимое файла /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 ethtool -K mgre1 tx off > /dev/null
pre-up ip link set mgre1 mtu 1400
pre-up ip link set mgre1 multicast on
pre-up ip link set mgre1 type gre nopmtudisc
pre-up ip link set mgre1 type gre ignore-df
post-down ip link del mgre1
Содержимое файла /etc/opennhrp/opennhrp.conf:
interface mgre0
map 10.10.10.100/24 172.16.100.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
interface mgre1
map 10.10.20.200/24 172.17.200.2 register
multicast nhs
holding-time 90
cisco-authentication secret
non-caching
frr version 7.3
frr defaults traditional
hostname spoke2
log syslog informational
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.10.100 timers connect 30
neighbor 10.10.20.200 remote-as 65000
neighbor 10.10.20.200 timers connect 30
!
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