В этой статье будет рассмотрен пример настройки DMVPN между устройствами Eltex серии ESR и Huawei линейки Access Routers (AR), где в качестве Hub используется маршрутизатор AR , а в качестве Spoke - маршрутизаторы ESR и AR.
Характеристики стенда:
- DMVPN Phase 3
mtu - 1400
adjust-mss 1360
время регистрации ( в том числе повторной ) - 180 с
время жизни NHRP-регистрации о регистрации на удалённом соседе - 540 с
Защищённость с помощью IPSec
eBGP (Spoke - в одной AS, Hub - в другой) в качестве протокола маршрутизации DMVPN Cloud
Front-door VRF
IKE:
Алгоритм аутентификации: SHA2-256
Алгоритм шифрования: AES-256
Метод аутентификации: по ключам
Группа Дифи-Хеллмана: 19
Механизм dead-peer-detection
Действие при срабатывании: clear
Интервал проверки: 10 с
Базовый таймаут ожидания ответа: 5 с
Количество попыток: 2
- IPsec :
- Алгоритм аутентификации SHA2-256
- Алгоритм шифрования: AES-256
- Тип организации соединения: Транспортный
Схема:
Цель:
Установить сетевую связность между LAN-подсетями, расположенными за Spoke-устройствами.В данном примере устройство модели ESR выступает в роли Spoke-1, а AR - в роли Spoke-2 и Hub. Каждый из Spoke будет анонсировать свою LAN-сеть Hub-устройству. Hub анонсирует каждому Spoke маршрут по умолчанию.
Решение:
Настройка ESR Spoke-1:
Базовые сервисы
Создадим VRF для front-door схемы и настроим интерфейсы. Интерфейс gigabitethernet 1/0/1 выступает в роли WAN, терминируя линковочную подсеть 203.0.113.0/24 к интернет-провайдеру. Он должен находиться в отдельном пространстве маршрутизации. Саб-интерфейс gigabitethernet 1/0/2.100 в данном примере выступает в роли LAN-сегмента сети 172.16.0.0/24, доступный через VLAN 100:
hostname ESR-Spoke-1 ip vrf ISP exit interface gigabitethernet 1/0/1 ip vrf forwarding ISP ip firewall disable ip address 203.0.113.10/24 exit interface gigabitethernet 1/0/2.100 ip firewall disable ip address 172.16.0.1/24 exit
При организации доступа к сети Интернет в отдельном VRF для этого примера мы будем использовать статическую маршрутизацию с указанием маршрута по умолчанию с некст-хопом IP-адреса 203.0.113.1 интернет-провайдера:
ip route vrf ISP 0.0.0.0/0 203.0.113.1
mGRE
Выполним настройку GRE-интерфейса: зададим значение key, TTL, MTU и TCP Adjust-MSS для оптимальной работы сервисов:
tunnel gre 1 key 1002 ttl 255 mtu 1400 ip tcp adjust-mss 1360
Настроим IP-параметры на GRE-интерфейсе: укажем VRF и внешний IP-адрес, от IP-интерфейса которого будет строиться туннель и зададим ему IP-адрес:
tunnel-source vrf ISP local address 203.0.113.10 ip address 10.0.2.10/24
Перейдём к настройке основной части конфигурации - DMVPN. Переведём интерфейс в режим работы multipoint:
multipoint
Зададим параметры подключения к Next-Hop Server (Hub): укажем его туннельный и NBMA (внешний) IP-адреса, а так же привяжем туннельный IP-адрес NHS для регистрации на нём. Для корректной отправки multicast-трафика через DMVPN укажем в качестве аргумента назначения Next-Hop Server (Hub):
ip nhrp map 10.0.2.1 198.51.100.10 ip nhrp nhs 10.0.2.1 ip nhrp multicast nhs
Для работы DMVPN в третьей фазе и возможности устанавливать Spoke-to-Spoke-туннели, создавая shortcut-маршруты, включим функционал обработки NHRP Traffic-indication:
ip nhrp shortcut
Для корректной сходимости и своевременного перестроения туннелей установим значение времени жизни записи о регистрации NHRP-клиента на удалённом соседе равное 540 секундам. Этой же командой регулируется и время повторной перерегистрации на удалённом Next-Hop Server - оно составляет 1/3 от значения holding-time, что в нашем случае равняется 180 секундам:
ip nhrp holding-time 540
Наконец, активируем работу протокола NHRP в mGRE-интерфейсе:
ip nhrp enable
Укажем привязки будущих IPSec VPN-профилей, с помощью которых будет обеспечено шифрование туннельных соединений. Для Hub и Spoke должны быть указаны свои VPN-профиля для обеспечения безопасности и криптоустойчивости соединений:
ip nhrp ipsec Hub ip nhrp ipsec spokes dynamic
Включим mGRE туннель:
enable exit
Настройка mGRE туннеля завершена.
IPSec
Для обеспечения защищённости канала настроим параметры IPSec-соединения и начнём с первой файзы. Для установления IKE-связности зададим обозначенные в условиях задачи алгоритмы аутентификации SHA-256 и шифрования - AES256. Для обеспечения надёжности шифрования IKE-соединения будем использовать алгоритмы Диффи-Хеллмана из 19-ой группы:
security ike proposal prop1 authentication algorithm sha2-256 encryption algorithm aes256 dh-group 19 exit
Далее выполним настройку политики IKE-соединения, указав в ней Pre-shared-key, который используется как метод авторизации по умолчанию на устройствах ESR. Так же привяжем ранее созданный IKE-proposal к этой политике:
security ike policy pol1 pre-shared-key ascii-text encrypted B9B81768A85D18A965 proposal prop1 exit
Наконец, опишем параметры идентификации IKE-соединения с Hub, по которым обе стороны смогут установить соединение. В данном примере мы используем IKE-соединение версии 2, которое является наиболее функциональным и защищённым в сравнении с первой версией:
security ike gateway Hub version v2-only
Для установления связности по ранее настроенным алгоритмам привяжем ранее созданную ike policy pol1 :
ike-policy pol1
И опишем селекторы траффика, который необходимо зашифровывать - нам необходимо выполнять полное шифрование GRE, поэтому указываем локальный и удалённый адреса туннеля:
local address 203.0.113.10 local network 203.0.113.10/32 protocol gre remote address 198.51.100.10 remote network 198.51.100.10/32 protocol gre
Укажем режим работы IPSec - Policy-based, т.к. используются селекторы трафика. А так же отключим функционал mobike - в данной конфигурации он нам не понадобится:
mode policy-based mobike disable
Завершим часть настройки IKE-сессии заданием настроек Dead Peer Detection: действие clear будет очищать текущую IKE-сессию в случае неответа удалённой стороны на пакеты типа R-U-THERE; такие пакеты мы будем отправлять каждые 10 секунд и, если не дождёмся ответа хотя бы от одного, отправим ещё 2 пакета с интервалом в 5 секунд между ними:
dead-peer-detection action clear dead-peer-detection interval 10 dead-peer-detection retransmit timeout 5 dead-peer-detection retransmit tries 2 exit
Для построения шифрованных Spoke-to-Spoke туннелей настройки параметров идентификации IKE-соединения схожи с предыдущими и отличны лишь в части удалённой стороны - устанавливаются значение параметров any:
security ike gateway Spokes version v2-only ike-policy pol1 local address 203.0.113.10 local network 203.0.113.10/32 protocol gre remote address any remote network any protocol gre mode policy-based mobike disable dead-peer-detection action clear dead-peer-detection interval 10 dead-peer-detection retransmit timeout 5 dead-peer-detection retransmit tries 2 exit
Перейдём к настройке IPSec-соединения. Как и в случае с IKE-фазой, опишем алгоритмы аутентификации и шифрования. В нашем примере это SHA-256 и AES256 соответственно:
security ipsec proposal prop1 authentication algorithm sha2-256 encryption algorithm aes256 exit
Выполним настройку политики IKE-соединения, привязав к ней IPSec-proposal:
security ipsec policy pol1 proposal prop1 exit
Финальные настройки - описание VPN-профилей соединения, отдельно для Hub и для Spoke. В обоих случаях указываем тип IPSec-соединения как транспортный, т.к. DMVPN не может работать в туннельном режиме:
security ipsec vpn Hub type transport
Т.к. в данном примере мы используем Front-door VRF схему, нам необходимо привязать данный VPN-профиль к vrf ISP:
ip vrf forwarding ISP
Условием для установления IPSec-соединения будет появление трафика по заданным селекторам в настройках IKE-фазы, для этого используем команду ike establish-tunnel route :
ike establish-tunnel route
Наконец, привяжем ранее созданные профили для IKE-фазы, где указаны селекторы трафика, который необходимо шифровать, и настройки профиля шифрования IPSec-соединения:
ike gateway Hub ike ipsec-policy pol1
Активируем настройку VPN-профиля:
enable exit
Для Spoke-to-Spoke туннелей настройки будут аналогичные, с учётом привязки профилей для данного типа соединения:
security ipsec vpn spokes type transport ip vrf forwarding ISP ike establish-tunnel route ike gateway Spokes ike ipsec-policy pol1 enable exit
Routing
Для корректного анонсирования connected-сетей из LAN-сегмента используем route-map, в котором опишем необходимый префикс:
route-map LAN_nets
rule 1
match ip address 172.16.0.0/24
exit
exit
Настроим BGP-соединение. Spoke функционирует в автономной системе 65002, поэтому создадим процесс с номером такой AS:
router bgp 65002
Укажем router-id для идентификации маршрутизатора:
router-id 10.2.0.10
И настроим соседство с Hub'ом: номер автономной системы 65001, устанавливаеться соединение будет с IP-адреса mGRE-туннеля, AFI - IPv4 unicast. Активируем работу соседа посредством команды enable:
neighbor 10.0.2.1
remote-as 65001
update-source gre 1
enable
address-family ipv4 unicast
В настройках address family необходимо указать ранее созданный route-map в направлении out для обеспечения фильтрации префиксов при их анонсировании соседу. Активируем работу AFI и покинем текущие настройки:
route-map LAN_nets out
enable
exit
Перейдём в режим настройки параметров передачи информации протоколов для процесса BGP. Здесь нам необходимо указать, что мы переиспользуем маршрутную информацию connected-подсетей, но не всех, а лишь тех, что указаны в ранее созданном route-map
LAN_nets :
address-family ipv4 unicast
redistribute connected route-map LAN_nets
exit
Наконец, активируем работу протокола BGP:
enable exit
Настройка ESR Spoke завершена.
Настройка AR Hub:
Базовые сервисы
Как и в случае с ESR Spoke, необходимо настроить базовые функции маршрутизатора - hostname, vpn-instance (VRF), сетевых интерфейсов и маршут к ISP:
# sysname ar-Hub # ip vpn-instance ISP ipv4-family # interface GigabitEthernet0/0/0 ip binding vpn-instance ISP ip address 198.51.100.10 255.255.255.0 # ip route-static vpn-instance ISP 0.0.0.0 0.0.0.0 198.51.100.1 #
Порядок конфигурирования сервисов в операционной системе AR отличен от ESR, поэтому следующим шагом будет настройка IPSec-соединения.
IPSec
Активируем совместимость работы алгоритмов аутентификации IPSec на основе SHA2 с ESR :
# ipsec authentication sha2 compatible enable #
Зададим глобальное время продолжительности IPSec Security Association в секундах как на ESR:
# ipsec sa global-duration time-based 10800 #
И активируем опцию восстановления SPI для стабильной работы соединения:
# ipsec invalid-spi-recovery enable #
Выполним настройку IPSec-соединения: укажем режим работы transport, зададим параметры аутентификации и шифрования из условий:
# ipsec proposal prop1 encapsulation-mode transport esp authentication-algorithm sha2-256 esp encryption-algorithm aes-256 #
Перейдём к настройке IKE-соединения. Зададим алгоритмы шифрования и аутентификации из условий, укажем 19-ую группу Диффи-Хеллмана и определим метод аутентификации по pre-shared ключам:
# ike proposal 1 encryption-algorithm aes-256 dh group19 authentication-algorithm sha2-256 authentication-method pre-share integrity-algorithm hmac-sha2-256 prf hmac-sha2-256 #
Настроим IKE-peer. В нём укажем аналогичные параметры механизма Dead-Peer Detection, pre-shared ключ, а так же привяжем ранее созданный профайл IKE:
# ike peer dmvpn pre-shared-key cipher %^%#|~\f>5J63Hm*}y:A8`mHfydGD`rkF/rv7&N"QUmT%^%# ike-proposal 1 dpd type periodic dpd idle-time 40 dpd retransmit-interval 10 rsa encryption-padding oaep rsa signature-padding pss ikev2 authentication sign-hash sha2-256 #
Наконец, перейдём к настройке VPN-профайла. В нём мы осуществим привязку ранее созданных IKE-пира и IPSec-профайла с параметрами шифрования, а так же зададим время длительности Security Association в секундах равное 10800:
# ipsec profile dmvpn ike-peer dmvpn proposal prop1 sa duration time-based 10800 #
Настройка IPSec завершена.
mGRE
Сначала выполним настройку основных параметров GRE-туннеля. Зададим значения MTU и TCP adjust-MSS раные 1400 и 1360 соответственно для корректной работы сервисов:
# interface Tunnel0/0/1 mtu 1400 tcp adjust-mss 1360
Зададим туннельный IP-адрес и укажем идентификатор GRE-интерфейса (key) равное 1002:
ip address 10.0.2.1 255.255.255.0 gre key 1001
После ввода в конфигурации данный параметр будет отображаться как шифрованный:
gre key cipher %^%#GXwI);@{KFc.M/#M*Sr"zP'&7>t:)&N1A9.Bv~5C%^%#
Так как в данном примере мы используем Front-door VRF-схему, то определим внешний интерфейс, с которого будет строиться этот GRE-туннель:
source vpn-instance ISP 198.51.100.10
Настройка DMVPN параметров. Переведём туннель в режим работы multipoint:
tunnel-protocol gre p2mp
Опишем IPSec VPN-профайл, с помощью которого будет осуществляться шифрование соединений:
ipsec profile dmvpn
В данном примере мы используем третью фазу DMVPN, поэтому для отправки Traffic Indication и последующего создания shortcut-маршрутов активируем функционал перенаправления NHRP-сообщений:
nhrp redirect
И укажем путь направления multicast-трафика в туннеле:
nhrp entry multicast dynamic #
Настройка mGRE туннеля завершена.
Routing
Выполним настройку BGP. Hub будет функционировать в автономной системе 65001, поэтому создадим процесс маршрутизации BGP с таким номером:
# bgp 65001
Как и в случае с ESR Spoke, укажем router-id для идентификации маршрутизатора в BGP-процессе:
router-id 10.2.0.1
Так как это Hub и на нём будет концентрироватьяс множество Spoke, вместо детального описания каждого из них используем механизм указания диапазона соседств, с которыми будет устанавливаться соединение. В этом режиме маршрутизатор не выступает инициатором установления BGP-соседства, а ожидает от удалённой стороны запроса на подключение. В синтаксисе AR этот функционал обеспечивается с помощью параметров group, которые описываются аргументом <NAME> при дальнейшей настройке соседств. Укажем в group DMVPN_cloud номер автономной системы, интерфейс и диапазон подсети, из которых будем ожидать установления соединения:
group DMVPN_cloud external peer DMVPN_cloud as-number 65002 peer DMVPN_cloud connect-interface Tunnel0/0/1 peer DMVPN_cloud listen-net 10.0.2.0 24 #
В настройках address-family IPv4 типа unicast активируем работу ранее созданной группы:
ipv4-family unicast undo synchronization peer DMVPN_cloud enable
Согласно принципам третьей фазы DMVPN, всем Spoke-маршрутизаторам Hub должен анонсировать маршрут по умолчанию. Сделаем это с помощью route-policy:
peer DMVPN_cloud default-route-advertise route-policy 1 #
И опишем в этой route-policy анонсирование всех префиксов:
# route-policy 1 permit node 10 #
Настройка AR Hub завершена.
Настройка AR Spoke-2:
Базовые сервисы
Настроим базовые функции маршрутизатора - hostname, vpn-instance (VRF), сетевых интерфейсов к LAN и WAN сгементам, а так же маршут к ISP. WAN-интерфейсом будет GigabitEthernet0/0/0, а LAN-сегмент будет доступен на маршрутизаторе через интерфейс GigabitEthernet0/0/2 с VLAN tag 200:
# sysname ar-Spoke-2 # ip vpn-instance ISP ipv4-family # interface GigabitEthernet0/0/0 ip binding vpn-instance ISP ip address 198.18.0.10 255.255.255.0 # interface GigabitEthernet0/0/2 # interface GigabitEthernet0/0/2.200 dot1q termination vid 200 ip address 172.16.254.1 255.255.255.0 # ip route-static vpn-instance ISP 0.0.0.0 0.0.0.0 198.18.0.1 #
IPSec
Как и в случае с AR Hub, активируем совместимость работы алгоритмов аутентификации IPSec на основе SHA2 с ESR :
# ipsec authentication sha2 compatible enable #
Зададим глобальное время продолжительности IPSec Security Association в секундах как на ESR:
# ipsec sa global-duration time-based 10800 #
И активируем опцию восстановления SPI для стабильной работы соединения:
# ipsec invalid-spi-recovery enable #
Выполним настройку IPSec-соединения: укажем режим работы transport, зададим параметры аутентификации и шифрования из условий:
# ipsec proposal prop1 encapsulation-mode transport esp authentication-algorithm sha2-256 esp encryption-algorithm aes-256 #
Перейдём к настройке IKE-соединения. Зададим алгоритмы шифрования и аутентификации из условий, укажем 19-ую группу Диффи-Хеллмана и определим метод аутентификации по pre-shared ключам:
# ike proposal 1 encryption-algorithm aes-256 dh group19 authentication-algorithm sha2-256 authentication-method pre-share integrity-algorithm hmac-sha2-256 prf hmac-sha2-256 #
Настроим IKE-peer. В нём укажем аналогичные параметры механизма Dead-Peer Detection, pre-shared ключ, а так же привяжем ранее созданный профайл IKE:
# ike peer dmvpn pre-shared-key cipher %^%#|~\f>5J63Hm*}y:A8`mHfydGD`rkF/rv7&N"QUmT%^%# ike-proposal 1 dpd type periodic dpd idle-time 40 dpd retransmit-interval 10 rsa encryption-padding oaep rsa signature-padding pss ikev2 authentication sign-hash sha2-256 #
Наконец, перейдём к настройке VPN-профайла. В нём мы осуществим привязку ранее созданных IKE-пира и IPSec-профайла с параметрами шифрования, а так же зададим время длительности Security Association в секундах равное 10800:
# ipsec profile dmvpn ike-peer dmvpn proposal prop1 sa duration time-based 10800 #
Настройка IPSec завершена.
mGRE
Сначала выполним настройку основных параметров GRE-туннеля. Зададим значения MTU и TCP adjust-MSS раные 1400 и 1360 соответственно для корректной работы сервисов:
# interface Tunnel0/0/1 mtu 1400 tcp adjust-mss 1360
Зададим туннельный IP-адрес и укажем идентификатор GRE-интерфейса (key) равное 1002:
ip address 10.0.2.20 255.255.255.0 gre key 1001
После ввода в конфигурации данный параметр будет отображаться как шифрованный:
gre key cipher %^%#GXwI);@{KFc.M/#M*Sr"zP'&7>t:)&N1A9.Bv~5C%^%#
Так как в данном примере мы используем Front-door VRF-схему, то определим внешний интерфейс, с которого будет строиться этот GRE-туннель:
source vpn-instance ISP 198.18.0.10
Настройка DMVPN параметров. Переведём туннель в режим работы multipoint:
tunnel-protocol gre p2mp
Опишем IPSec VPN-профайл, с помощью которого будет осуществляться шифрование соединений:
ipsec profile dmvpn
В данном примере мы используем третью фазу DMVPN, поэтому для корректной обработки приходящих от Hub сообщений типа Traffic Indication и последующего создания shortcut-маршрутов активируем функционал созданий shortcut-маршрутов:
nhrp shortcut
Укажем параметры регистрации: no-unique позволит сохранить старую запись на удалённом NHRP-соседе о Spoke, у которого может быть изменён NBMA-адрес; interval устанавливает промежуток времени, через который Spoke будет выполнять регистрацию, а так же периодическую перерегистрацию на удалённом NHRP-соседе:
nhrp registration no-unique nhrp registration interval 180
Для корректной сходимости и своевременного перестроения туннелей установим значение времени жизни записи о регистрации NHRP-клиента на удалённом соседе равное 540 секундам. Это период времени, за который локальная запись об удалённом NHRP-соседе считается актуальной и валидной вплоть до поступления следующего запроса о регистрации:
nhrp entry holdtime seconds 540
Зададим статическую запись до Hub, указывая сначала туннельный адрес, а затем NBMA:
nhrp entry 10.0.2.1 198.51.100.10 register
И укажем путь направления multicast-трафика в туннеле:
nhrp entry multicast dynamic #
Настройка mGRE туннеля завершена.
Routing
Выполним настройку BGP. Hub будет функционировать в автономной системе 65001, поэтому создадим процесс маршрутизации BGP с таким номером:
# bgp 65002
Как и в случае с ESR Spoke, укажем router-id для идентификации маршрутизатора в BGP-процессе:
router-id 10.2.0.20
Настроим eBGP-соседство с Hub, указав номер автономной системы и интерфейс-источник, с которого будет устанавливаться соединение:
peer 10.0.2.1 as-number 65001 peer 10.0.2.1 connect-interface Tunnel0/0/1 #
В настройках address-family IPv4 типа unicast укажем локальную подсеть 172.16.254.0/24 как анонсируемую и активируем работу ранее созданного соседа:
ipv4-family unicast undo synchronization network 172.16.254.0 255.255.255.0 peer 10.0.2.1 enable # return
Настройка AR Spoke-2 завершена.
Диагностика:
Сначала удостоверимся,что на Hub установились IPsec-туннели до обоих Spoke. В отличии от ESR, в синтаксисе AR нет необходимости указавать параметр vrf <VRF_NAME> для указания пространства маршрутизации:
Теперь проверим, что оба Spoke зарегистрировались на Hub:
Проверим состояние BGP - убедимся, что соседство установилось, а спокам анонсируется маршрут по умолчанию:
На Spoke проверим, что маршруты по умолчанию успешно инсталлировались в FIB:
Инициируем построение Spoke-to-Spoke туннеля, заупустив ping из LAN Spoke-1 к LAN Spoke-2 и проверим, что IPsec-туннел установились, а shortcut-маршрут успешно инсталлировался в FIB:

