DMVPN - Dynamic Multipoint VPN в VyOS

DMVPN (Dynamic Multipoint VPN) - технология создания динамических mesh VPN сетей с автоматическим установлением туннелей между spoke узлами без необходимости предварительной конфигурации всех возможных соединений.

Обзор

DMVPN объединяет три ключевые технологии для создания масштабируемых и гибких VPN сетей:

  1. NHRP (Next Hop Resolution Protocol) - RFC 2332

    • Протокол динамического разрешения адресов для NBMA сетей
    • Позволяет spoke узлам находить друг друга для прямых туннелей
    • Регистрация и запросы адресов через NHS (Next Hop Server)
  2. mGRE (Multipoint GRE) - RFC 1702

    • Multipoint Generic Routing Encapsulation
    • Один туннельный интерфейс для множества удаленных peer
    • Динамическое создание туннелей без предварительной конфигурации
  3. IPsec - RFC 4301

    • Шифрование и аутентификация GRE трафика
    • Защита данных в туннелях
    • IKE для обмена ключами

Ключевые возможности

  • Динамические туннели: Spoke узлы автоматически создают прямые туннели между собой
  • Масштабируемость: Добавление новых spoke без изменения конфигурации существующих
  • Spoke-to-Spoke: Прямые туннели между spoke без транзита через hub
  • Отказоустойчивость: Поддержка нескольких hub для redundancy
  • Простая конфигурация: Минимальная настройка на spoke узлах
  • Динамическая маршрутизация: Интеграция с BGP/EIGRP/OSPF

Архитектура

                  ┌─────────────┐
                  │   Hub (NHS) │
                  │ 203.0.113.1 │
                  └──────┬──────┘
                         │
        ┌────────────────┼────────────────┐
        │                │                │
   ┌────▼────┐      ┌────▼────┐     ┌────▼────┐
   │ Spoke 1 │      │ Spoke 2 │     │ Spoke 3 │
   │  .10    │◄────►│  .20    │◄───►│  .30    │
   └─────────┘      └─────────┘     └─────────┘

   Spoke-to-Spoke туннели создаются автоматически

Преимущества перед традиционным VPN:

  • Не требуется N×(N-1)/2 туннелей для full mesh
  • Hub масштабируется до сотен spoke
  • Spoke добавляются без изменения конфигурации hub
  • Автоматическая оптимизация маршрутов (spoke-to-spoke)

Компоненты DMVPN

Hub (NHS - Next Hop Server)

Функции:

  • Центральная точка регистрации для spoke узлов
  • База данных NHRP mapping (tunnel IP ↔ NBMA IP)
  • Обработка NHRP resolution requests
  • Отправка redirect для spoke-to-spoke tunnels
  • Маршрутизация трафика между spoke (до создания direct tunnel)

Требования:

  • Статический публичный IP адрес
  • Всегда доступен для spoke узлов
  • Должен принимать NHRP registrations

Spoke

Функции:

  • Регистрация своего tunnel IP ↔ NBMA IP mapping на NHS
  • NHRP resolution requests для поиска других spoke
  • Создание динамических spoke-to-spoke туннелей
  • Обработка NHRP redirect от hub

Требования:

  • Может иметь динамический публичный IP
  • Должен достигать hub через интернет
  • Инициирует NHRP регистрацию и IPsec соединения

Фазы DMVPN

VyOS поддерживает DMVPN Phase 2 и Phase 3 функциональность:

Phase 2 - Spoke-to-Spoke on Demand

Характеристики:

  • Spoke имеют специфичные маршруты для сетей за другими spoke
  • Hub может инициировать NHRP redirect
  • Spoke создают direct tunnel после redirect от hub
  • Требуется summarization на hub для маршрутов

Конфигурация на Hub:

  • set protocols nhrp tunnel tun0 redirect

Конфигурация на Spoke:

  • set protocols nhrp tunnel tun0 shortcut

Phase 3 - Spoke-to-Spoke with Summarization

Характеристики:

  • Spoke используют default или summary маршруты
  • NHRP redirect работает с summarized routes
  • Более масштабируемо (меньше маршрутов)
  • Автоматическое создание spoke-to-spoke после первого пакета

Отличия от Phase 2:

  • На spoke один summary маршрут вместо множества специфичных
  • Hub анонсирует summary/default route
  • Redirect работает без необходимости специфичных маршрутов

Конфигурация Hub

Базовая конфигурация Hub

# Tunnel интерфейс
set interfaces tunnel tun0 address '10.255.0.1/24'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '203.0.113.1'
set interfaces tunnel tun0 parameters ip key '1'

# NHRP на Hub
set protocols nhrp tunnel tun0 cisco-authentication 'SecretNHRP123'
set protocols nhrp tunnel tun0 holding-time '300'
set protocols nhrp tunnel tun0 multicast 'dynamic'
set protocols nhrp tunnel tun0 redirect

# Разрешить GRE на firewall
set firewall ipv4 input filter rule 200 action 'accept'
set firewall ipv4 input filter rule 200 protocol 'gre'
set firewall ipv4 input filter rule 200 description 'Allow GRE for DMVPN'

# Разрешить IPsec
set firewall ipv4 input filter rule 210 action 'accept'
set firewall ipv4 input filter rule 210 protocol 'esp'
set firewall ipv4 input filter rule 210 description 'Allow ESP for IPsec'

set firewall ipv4 input filter rule 211 action 'accept'
set firewall ipv4 input filter rule 211 destination port '500'
set firewall ipv4 input filter rule 211 protocol 'udp'
set firewall ipv4 input filter rule 211 description 'Allow ISAKMP'

set firewall ipv4 input filter rule 212 action 'accept'
set firewall ipv4 input filter rule 212 destination port '4500'
set firewall ipv4 input filter rule 212 protocol 'udp'
set firewall ipv4 input filter rule 212 description 'Allow NAT-T'

commit
save

Параметры NHRP на Hub

cisco-authentication

NHRP authentication password (максимум 8 символов):

set protocols nhrp tunnel tun0 cisco-authentication 'MySecret1'

Важно: Пароль должен совпадать на hub и всех spoke.

holding-time

Время жизни NHRP registration entry (в секундах):

set protocols nhrp tunnel tun0 holding-time '300'

По умолчанию: 600 секунд. Spoke должны re-register до истечения.

multicast

Обработка multicast трафика:

set protocols nhrp tunnel tun0 multicast 'dynamic'

Опции:

  • dynamic: Автоматическая репликация multicast к зарегистрированным spoke
  • nhs: Отправка multicast только к NHS (для spoke)
  • Не указывать: Multicast не обрабатывается

Необходимо для динамической маршрутизации (OSPF/EIGRP) через DMVPN.

redirect

Отправка NHRP redirect spoke узлам для создания direct tunnels:

set protocols nhrp tunnel tun0 redirect

Включает DMVPN Phase 2/3 функциональность.

Параметры Tunnel интерфейса на Hub

address

IP адрес в DMVPN сети (host address с prefix):

set interfaces tunnel tun0 address '10.255.0.1/24'

Рекомендуется использовать приватные сети (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16).

encapsulation

Тип инкапсуляции (для DMVPN используется GRE):

set interfaces tunnel tun0 encapsulation 'gre'

Для DMVPN всегда GRE (multipoint).

multicast enable

Включить multicast на туннеле:

set interfaces tunnel tun0 multicast 'enable'

Необходимо для NHRP multicast replication и динамической маршрутизации.

source-address

Локальный IP адрес для туннеля (NBMA address):

set interfaces tunnel tun0 source-address '203.0.113.1'

Должен быть публичным IP или IP на WAN интерфейсе.

parameters ip key

GRE key для идентификации туннеля:

set interfaces tunnel tun0 parameters ip key '1'

Должен совпадать на hub и всех spoke. Значение: 0-4294967295.

mtu

Максимальный размер пакета в туннеле:

set interfaces tunnel tun0 mtu '1400'

По умолчанию: 1476 (1500 - 24 байт GRE header). Уменьшите если есть IPsec (до 1400).

description

Описание интерфейса:

set interfaces tunnel tun0 description 'DMVPN Hub to Spoke Network'

Конфигурация Spoke

Базовая конфигурация Spoke

# Tunnel интерфейс
set interfaces tunnel tun0 address '10.255.0.10/24'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '198.51.100.10'
set interfaces tunnel tun0 parameters ip key '1'

# NHRP на Spoke
set protocols nhrp tunnel tun0 cisco-authentication 'SecretNHRP123'
set protocols nhrp tunnel tun0 map '10.255.0.1/24' nbma-address '203.0.113.1'
set protocols nhrp tunnel tun0 map '10.255.0.1/24' register
set protocols nhrp tunnel tun0 nhs '10.255.0.1'
set protocols nhrp tunnel tun0 shortcut
set protocols nhrp tunnel tun0 multicast 'nhs'

# Firewall (аналогично hub)
set firewall ipv4 input filter rule 200 action 'accept'
set firewall ipv4 input filter rule 200 protocol 'gre'

set firewall ipv4 input filter rule 210 action 'accept'
set firewall ipv4 input filter rule 210 protocol 'esp'

set firewall ipv4 input filter rule 211 action 'accept'
set firewall ipv4 input filter rule 211 destination port '500'
set firewall ipv4 input filter rule 211 protocol 'udp'

set firewall ipv4 input filter rule 212 action 'accept'
set firewall ipv4 input filter rule 212 destination port '4500'
set firewall ipv4 input filter rule 212 protocol 'udp'

commit
save

Параметры NHRP на Spoke

nhs

Адрес Next Hop Server (Hub tunnel IP):

set protocols nhrp tunnel tun0 nhs '10.255.0.1'

Можно указать несколько NHS для redundancy:

set protocols nhrp tunnel tun0 nhs '10.255.0.1'
set protocols nhrp tunnel tun0 nhs '10.255.0.2'

map

Статический NHRP mapping (tunnel IP → NBMA IP):

set protocols nhrp tunnel tun0 map '10.255.0.1/32' nbma-address '203.0.113.1'

Назначение: Указывает spoke как достичь hub до установления NHRP.

Опции map:

  • register: Автоматическая регистрация spoke на NHS
set protocols nhrp tunnel tun0 map '10.255.0.1/24' register

shortcut

Разрешить создание spoke-to-spoke shortcuts:

set protocols nhrp tunnel tun0 shortcut

Включает DMVPN Phase 2/3 - spoke будут создавать прямые туннели после redirect от hub.

multicast nhs

Отправка multicast трафика к NHS:

set protocols nhrp tunnel tun0 multicast 'nhs'

Необходимо для динамической маршрутизации на spoke (OSPF/EIGRP).

Параметры Tunnel интерфейса на Spoke

Аналогичны hub с отличиями:

# Уникальный tunnel IP для каждого spoke
set interfaces tunnel tun0 address '10.255.0.10/24'  # Spoke 1
set interfaces tunnel tun0 address '10.255.0.20/24'  # Spoke 2
set interfaces tunnel tun0 address '10.255.0.30/24'  # Spoke 3

# source-address - локальный публичный IP spoke
set interfaces tunnel tun0 source-address '198.51.100.10'

# Остальные параметры идентичны hub
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 parameters ip key '1'

IPsec интеграция

DMVPN обычно комбинируется с IPsec для шифрования GRE трафика.

IPsec профиль для DMVPN

VyOS использует IPsec профили привязанные к туннельным интерфейсам:

# IPsec профиль
set vpn ipsec profile DMVPN-PROFILE authentication mode 'pre-shared-secret'
set vpn ipsec profile DMVPN-PROFILE authentication pre-shared-secret 'MyIPsecSecret123'
set vpn ipsec profile DMVPN-PROFILE bind tunnel 'tun0'
set vpn ipsec profile DMVPN-PROFILE esp-group 'DMVPN-ESP'
set vpn ipsec profile DMVPN-PROFILE ike-group 'DMVPN-IKE'

# ESP группа (шифрование)
set vpn ipsec esp-group DMVPN-ESP lifetime '3600'
set vpn ipsec esp-group DMVPN-ESP mode 'transport'
set vpn ipsec esp-group DMVPN-ESP pfs 'dh-group2'
set vpn ipsec esp-group DMVPN-ESP proposal 1 encryption 'aes256'
set vpn ipsec esp-group DMVPN-ESP proposal 1 hash 'sha256'

# IKE группа (key exchange)
set vpn ipsec ike-group DMVPN-IKE ikev2-reauth
set vpn ipsec ike-group DMVPN-IKE key-exchange 'ikev2'
set vpn ipsec ike-group DMVPN-IKE lifetime '28800'
set vpn ipsec ike-group DMVPN-IKE proposal 1 dh-group '14'
set vpn ipsec ike-group DMVPN-IKE proposal 1 encryption 'aes256'
set vpn ipsec ike-group DMVPN-IKE proposal 1 hash 'sha256'

commit
save

Параметры IPsec

ESP Group (Encryption)

mode transport:

set vpn ipsec esp-group DMVPN-ESP mode 'transport'

Для DMVPN всегда используется transport mode (IPsec шифрует GRE, а не создает свой туннель).

encryption:

set vpn ipsec esp-group DMVPN-ESP proposal 1 encryption 'aes256'

Рекомендуемые: aes256, aes128, aes256gcm128

hash:

set vpn ipsec esp-group DMVPN-ESP proposal 1 hash 'sha256'

Рекомендуемые: sha256, sha384, sha512

PFS (Perfect Forward Secrecy):

set vpn ipsec esp-group DMVPN-ESP pfs 'dh-group14'

Опции: dh-group2, dh-group5, dh-group14, dh-group19, dh-group20

IKE Group (Key Exchange)

IKEv2:

set vpn ipsec ike-group DMVPN-IKE key-exchange 'ikev2'

IKEv2 рекомендуется для DMVPN (лучше для NAT traversal, быстрее reconnect).

DH Group:

set vpn ipsec ike-group DMVPN-IKE proposal 1 dh-group '14'

Минимум group 14 (2048-bit) для безопасности.

Dead Peer Detection:

set vpn ipsec ike-group DMVPN-IKE dead-peer-detection action 'restart'
set vpn ipsec ike-group DMVPN-IKE dead-peer-detection interval '30'
set vpn ipsec ike-group DMVPN-IKE dead-peer-detection timeout '120'

Автоматическое восстановление при обрыве туннеля.

Привязка профиля к туннелю

IPsec профиль автоматически применяется к туннелю:

set vpn ipsec profile DMVPN-PROFILE bind tunnel 'tun0'

После commit все GRE пакеты через tun0 автоматически шифруются IPsec.

Network ID

Network ID группирует DMVPN туннели в логические сети:

set protocols nhrp tunnel tun0 network-id '1'

Применение:

  • Изоляция разных DMVPN сетей на одном роутере
  • Несколько DMVPN туннелей с разными network-id
  • Spoke регистрируется только на NHS с matching network-id

Пример с несколькими network-id:

# Туннель для production
set interfaces tunnel tun0 ...
set protocols nhrp tunnel tun0 network-id '1'

# Туннель для development
set interfaces tunnel tun1 ...
set protocols nhrp tunnel tun1 network-id '2'

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

DMVPN обычно комбинируется с протоколами динамической маршрутизации для автоматического обмена маршрутами.

BGP через DMVPN

BGP наиболее популярен для DMVPN сетей (особенно service provider).

Конфигурация Hub:

# BGP на Hub
set protocols bgp system-as '65000'
set protocols bgp parameters router-id '10.255.0.1'

# Spoke 1
set protocols bgp neighbor '10.255.0.10' remote-as '65001'
set protocols bgp neighbor '10.255.0.10' address-family ipv4-unicast

# Spoke 2
set protocols bgp neighbor '10.255.0.20' remote-as '65002'
set protocols bgp neighbor '10.255.0.20' address-family ipv4-unicast

# Spoke 3
set protocols bgp neighbor '10.255.0.30' remote-as '65003'
set protocols bgp neighbor '10.255.0.30' address-family ipv4-unicast

# Анонсирование сетей
set protocols bgp address-family ipv4-unicast network '192.168.0.0/24'

Конфигурация Spoke:

# BGP на Spoke 1
set protocols bgp system-as '65001'
set protocols bgp parameters router-id '10.255.0.10'

# Neighbor - Hub
set protocols bgp neighbor '10.255.0.1' remote-as '65000'
set protocols bgp neighbor '10.255.0.1' address-family ipv4-unicast

# Анонсирование локальной сети
set protocols bgp address-family ipv4-unicast network '192.168.1.0/24'

Преимущества BGP:

  • Масштабируемость (сотни spoke)
  • Гибкая политика маршрутизации
  • Next-hop self на hub для spoke-to-spoke
  • Поддержка атрибутов (communities, AS-path)

OSPF через DMVPN

OSPF требует broadcast/multicast, DMVPN поддерживает через NHRP multicast.

Конфигурация Hub:

set interfaces tunnel tun0 ip ospf network 'broadcast'
set interfaces tunnel tun0 ip ospf priority '255'

set protocols ospf area '0' network '10.255.0.0/24'
set protocols ospf area '0' network '192.168.0.0/24'
set protocols ospf parameters router-id '10.255.0.1'

Конфигурация Spoke:

set interfaces tunnel tun0 ip ospf network 'broadcast'
set interfaces tunnel tun0 ip ospf priority '0'

set protocols ospf area '0' network '10.255.0.0/24'
set protocols ospf area '0' network '192.168.1.0/24'
set protocols ospf parameters router-id '10.255.0.10'

Важно:

  • Hub должен быть DR (priority 255)
  • Spoke - DROther (priority 0)
  • NHRP multicast dynamic на hub
  • NHRP multicast nhs на spoke

EIGRP через DMVPN

EIGRP хорошо подходит для DMVPN (особенно в Cisco-compatible окружении).

Примечание: VyOS использует FRR, который не поддерживает EIGRP напрямую. Для EIGRP используйте BGP или OSPF.

Dual-Hub Redundancy

Для критичных сетей настраивается несколько hub для отказоустойчивости.

Топология Dual-Hub

         ┌─────────────┐        ┌─────────────┐
         │   Hub 1     │        │   Hub 2     │
         │ 203.0.113.1 │        │ 203.0.113.2 │
         │ 10.255.0.1  │        │ 10.255.0.2  │
         └──────┬──────┘        └──────┬──────┘
                │                      │
       ┌────────┼──────────────────────┼────────┐
       │        │                      │        │
  ┌────▼────┐  │                      │   ┌────▼────┐
  │ Spoke 1 │  │                      │   │ Spoke 3 │
  │  .10    │  │                      │   │  .30    │
  └─────────┘  │                      │   └─────────┘
               │                      │
          ┌────▼────┐                 │
          │ Spoke 2 │                 │
          │  .20    │◄────────────────┘
          └─────────┘

Конфигурация Hub 1

# Tunnel tun0
set interfaces tunnel tun0 address '10.255.0.1/24'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '203.0.113.1'
set interfaces tunnel tun0 parameters ip key '1'

# NHRP Hub 1
set protocols nhrp tunnel tun0 cisco-authentication 'SecretNHRP123'
set protocols nhrp tunnel tun0 holding-time '300'
set protocols nhrp tunnel tun0 multicast 'dynamic'
set protocols nhrp tunnel tun0 redirect

# IPsec
set vpn ipsec profile DMVPN-PROFILE authentication mode 'pre-shared-secret'
set vpn ipsec profile DMVPN-PROFILE authentication pre-shared-secret 'MyIPsecSecret123'
set vpn ipsec profile DMVPN-PROFILE bind tunnel 'tun0'
set vpn ipsec profile DMVPN-PROFILE esp-group 'DMVPN-ESP'
set vpn ipsec profile DMVPN-PROFILE ike-group 'DMVPN-IKE'

# BGP для dual-hub
set protocols bgp system-as '65000'
set protocols bgp parameters router-id '10.255.0.1'
set protocols bgp neighbor '10.255.0.2' remote-as '65000'  # Hub 2 iBGP
set protocols bgp neighbor '10.255.0.2' address-family ipv4-unicast

commit
save

Конфигурация Hub 2

Аналогично Hub 1 с изменением адресов:

set interfaces tunnel tun0 address '10.255.0.2/24'
set interfaces tunnel tun0 source-address '203.0.113.2'

set protocols bgp parameters router-id '10.255.0.2'
set protocols bgp neighbor '10.255.0.1' remote-as '65000'  # Hub 1 iBGP

Конфигурация Spoke для Dual-Hub

Spoke конфигурируется с двумя NHS:

# Tunnel
set interfaces tunnel tun0 address '10.255.0.10/24'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '198.51.100.10'
set interfaces tunnel tun0 parameters ip key '1'

# NHRP с двумя NHS
set protocols nhrp tunnel tun0 cisco-authentication 'SecretNHRP123'
set protocols nhrp tunnel tun0 shortcut
set protocols nhrp tunnel tun0 multicast 'nhs'

# Hub 1
set protocols nhrp tunnel tun0 map '10.255.0.1/32' nbma-address '203.0.113.1'
set protocols nhrp tunnel tun0 map '10.255.0.1/32' register
set protocols nhrp tunnel tun0 nhs '10.255.0.1'

# Hub 2
set protocols nhrp tunnel tun0 map '10.255.0.2/32' nbma-address '203.0.113.2'
set protocols nhrp tunnel tun0 map '10.255.0.2/32' register
set protocols nhrp tunnel tun0 nhs '10.255.0.2'

# IPsec
set vpn ipsec profile DMVPN-PROFILE authentication mode 'pre-shared-secret'
set vpn ipsec profile DMVPN-PROFILE authentication pre-shared-secret 'MyIPsecSecret123'
set vpn ipsec profile DMVPN-PROFILE bind tunnel 'tun0'
set vpn ipsec profile DMVPN-PROFILE esp-group 'DMVPN-ESP'
set vpn ipsec profile DMVPN-PROFILE ike-group 'DMVPN-IKE'

# BGP к обоим hub
set protocols bgp system-as '65001'
set protocols bgp parameters router-id '10.255.0.10'
set protocols bgp neighbor '10.255.0.1' remote-as '65000'  # Hub 1
set protocols bgp neighbor '10.255.0.1' address-family ipv4-unicast
set protocols bgp neighbor '10.255.0.2' remote-as '65000'  # Hub 2
set protocols bgp neighbor '10.255.0.2' address-family ipv4-unicast

# Анонсирование локальной сети
set protocols bgp address-family ipv4-unicast network '192.168.1.0/24'

commit
save

Failover:

  • Spoke регистрируется на обоих NHS
  • BGP соседства с обоими hub
  • При отказе Hub 1 - автоматическое переключение на Hub 2
  • Spoke-to-spoke tunnels продолжают работать

Практический пример: Yandex Cloud Service Provider Hub

Сценарий

Service provider размещает DMVPN hub в Yandex Cloud для подключения множества клиентских филиалов.

Топология:

  • Hub: VyOS в Yandex Cloud (публичный IP: 158.160.10.50)
  • Spoke 1: Клиент A, офис Москва (динамический IP)
  • Spoke 2: Клиент A, офис Санкт-Петербург (динамический IP)
  • Spoke 3: Клиент B, офис Екатеринбург (статический IP: 95.163.20.100)

Сети:

  • DMVPN tunnel: 10.100.0.0/24
  • Hub: 10.100.0.1
  • Клиент A, Москва: 10.100.0.10, LAN 192.168.10.0/24
  • Клиент A, СПб: 10.100.0.11, LAN 192.168.11.0/24
  • Клиент B, Екб: 10.100.0.20, LAN 192.168.20.0/24

Конфигурация Hub в Yandex Cloud

# Tunnel интерфейс
set interfaces tunnel tun0 address '10.100.0.1/24'
set interfaces tunnel tun0 description 'DMVPN Hub for Service Provider'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '10.128.0.10'  # Внутренний IP VM в Yandex Cloud
set interfaces tunnel tun0 parameters ip key '100'
set interfaces tunnel tun0 mtu '1400'

# NHRP Hub конфигурация
set protocols nhrp tunnel tun0 cisco-authentication 'YC_DMVPN_2025'
set protocols nhrp tunnel tun0 holding-time '600'
set protocols nhrp tunnel tun0 multicast 'dynamic'
set protocols nhrp tunnel tun0 redirect
set protocols nhrp tunnel tun0 network-id '100'

# IPsec профиль
set vpn ipsec profile YC-DMVPN authentication mode 'pre-shared-secret'
set vpn ipsec profile YC-DMVPN authentication pre-shared-secret 'SuperSecretYC2025!'
set vpn ipsec profile YC-DMVPN bind tunnel 'tun0'
set vpn ipsec profile YC-DMVPN esp-group 'YC-ESP'
set vpn ipsec profile YC-DMVPN ike-group 'YC-IKE'

# ESP группа
set vpn ipsec esp-group YC-ESP lifetime '3600'
set vpn ipsec esp-group YC-ESP mode 'transport'
set vpn ipsec esp-group YC-ESP pfs 'dh-group14'
set vpn ipsec esp-group YC-ESP proposal 1 encryption 'aes256gcm128'
set vpn ipsec esp-group YC-ESP proposal 1 hash 'sha256'
set vpn ipsec esp-group YC-ESP proposal 2 encryption 'aes256'
set vpn ipsec esp-group YC-ESP proposal 2 hash 'sha256'

# IKE группа
set vpn ipsec ike-group YC-IKE ikev2-reauth
set vpn ipsec ike-group YC-IKE key-exchange 'ikev2'
set vpn ipsec ike-group YC-IKE lifetime '28800'
set vpn ipsec ike-group YC-IKE proposal 1 dh-group '14'
set vpn ipsec ike-group YC-IKE proposal 1 encryption 'aes256gcm128'
set vpn ipsec ike-group YC-IKE proposal 1 hash 'sha256'
set vpn ipsec ike-group YC-IKE proposal 2 dh-group '14'
set vpn ipsec ike-group YC-IKE proposal 2 encryption 'aes256'
set vpn ipsec ike-group YC-IKE proposal 2 hash 'sha256'
set vpn ipsec ike-group YC-IKE dead-peer-detection action 'restart'
set vpn ipsec ike-group YC-IKE dead-peer-detection interval '30'
set vpn ipsec ike-group YC-IKE dead-peer-detection timeout '120'

# BGP для маршрутизации (каждый клиент - свой AS)
set protocols bgp system-as '65500'
set protocols bgp parameters router-id '10.100.0.1'

# Клиент A spokes (iBGP внутри клиента A)
set protocols bgp neighbor '10.100.0.10' remote-as '65001'
set protocols bgp neighbor '10.100.0.10' description 'Client A - Moscow'
set protocols bgp neighbor '10.100.0.10' address-family ipv4-unicast

set protocols bgp neighbor '10.100.0.11' remote-as '65001'
set protocols bgp neighbor '10.100.0.11' description 'Client A - SPb'
set protocols bgp neighbor '10.100.0.11' address-family ipv4-unicast

# Клиент B spoke
set protocols bgp neighbor '10.100.0.20' remote-as '65002'
set protocols bgp neighbor '10.100.0.20' description 'Client B - Ekaterinburg'
set protocols bgp neighbor '10.100.0.20' address-family ipv4-unicast

# Анонсирование сетей в Yandex Cloud (если есть)
set protocols bgp address-family ipv4-unicast network '10.128.0.0/24'

# Firewall правила для DMVPN
set firewall ipv4 name WAN_LOCAL rule 100 action 'accept'
set firewall ipv4 name WAN_LOCAL rule 100 protocol 'gre'
set firewall ipv4 name WAN_LOCAL rule 100 description 'Allow GRE for DMVPN'

set firewall ipv4 name WAN_LOCAL rule 110 action 'accept'
set firewall ipv4 name WAN_LOCAL rule 110 protocol 'esp'
set firewall ipv4 name WAN_LOCAL rule 110 description 'Allow ESP for IPsec'

set firewall ipv4 name WAN_LOCAL rule 111 action 'accept'
set firewall ipv4 name WAN_LOCAL rule 111 destination port '500'
set firewall ipv4 name WAN_LOCAL rule 111 protocol 'udp'
set firewall ipv4 name WAN_LOCAL rule 111 description 'Allow ISAKMP'

set firewall ipv4 name WAN_LOCAL rule 112 action 'accept'
set firewall ipv4 name WAN_LOCAL rule 112 destination port '4500'
set firewall ipv4 name WAN_LOCAL rule 112 protocol 'udp'
set firewall ipv4 name WAN_LOCAL rule 112 description 'Allow NAT-T'

# Применение firewall к WAN интерфейсу
set firewall ipv4 input filter rule 1000 action 'jump'
set firewall ipv4 input filter rule 1000 jump-target 'WAN_LOCAL'
set firewall ipv4 input filter rule 1000 inbound-interface name 'eth0'

# Разрешить forward между spokes (для spoke-to-spoke)
set firewall ipv4 forward filter rule 200 action 'accept'
set firewall ipv4 forward filter rule 200 inbound-interface name 'tun0'
set firewall ipv4 forward filter rule 200 outbound-interface name 'tun0'

commit
save

Конфигурация Spoke (Клиент A, Москва)

# Tunnel интерфейс
set interfaces tunnel tun0 address '10.100.0.10/24'
set interfaces tunnel tun0 description 'DMVPN to YC Hub - Client A Moscow'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '192.0.2.50'  # WAN IP spoke
set interfaces tunnel tun0 parameters ip key '100'
set interfaces tunnel tun0 mtu '1400'

# NHRP Spoke конфигурация
set protocols nhrp tunnel tun0 cisco-authentication 'YC_DMVPN_2025'
set protocols nhrp tunnel tun0 map '10.100.0.1/32' nbma-address '158.160.10.50'
set protocols nhrp tunnel tun0 map '10.100.0.1/32' register
set protocols nhrp tunnel tun0 nhs '10.100.0.1'
set protocols nhrp tunnel tun0 shortcut
set protocols nhrp tunnel tun0 multicast 'nhs'
set protocols nhrp tunnel tun0 network-id '100'

# IPsec профиль (идентичный hub)
set vpn ipsec profile YC-DMVPN authentication mode 'pre-shared-secret'
set vpn ipsec profile YC-DMVPN authentication pre-shared-secret 'SuperSecretYC2025!'
set vpn ipsec profile YC-DMVPN bind tunnel 'tun0'
set vpn ipsec profile YC-DMVPN esp-group 'YC-ESP'
set vpn ipsec profile YC-DMVPN ike-group 'YC-IKE'

set vpn ipsec esp-group YC-ESP lifetime '3600'
set vpn ipsec esp-group YC-ESP mode 'transport'
set vpn ipsec esp-group YC-ESP pfs 'dh-group14'
set vpn ipsec esp-group YC-ESP proposal 1 encryption 'aes256gcm128'
set vpn ipsec esp-group YC-ESP proposal 1 hash 'sha256'
set vpn ipsec esp-group YC-ESP proposal 2 encryption 'aes256'
set vpn ipsec esp-group YC-ESP proposal 2 hash 'sha256'

set vpn ipsec ike-group YC-IKE ikev2-reauth
set vpn ipsec ike-group YC-IKE key-exchange 'ikev2'
set vpn ipsec ike-group YC-IKE lifetime '28800'
set vpn ipsec ike-group YC-IKE proposal 1 dh-group '14'
set vpn ipsec ike-group YC-IKE proposal 1 encryption 'aes256gcm128'
set vpn ipsec ike-group YC-IKE proposal 1 hash 'sha256'
set vpn ipsec ike-group YC-IKE proposal 2 dh-group '14'
set vpn ipsec ike-group YC-IKE proposal 2 encryption 'aes256'
set vpn ipsec ike-group YC-IKE proposal 2 hash 'sha256'
set vpn ipsec ike-group YC-IKE dead-peer-detection action 'restart'
set vpn ipsec ike-group YC-IKE dead-peer-detection interval '30'
set vpn ipsec ike-group YC-IKE dead-peer-detection timeout '120'

# BGP
set protocols bgp system-as '65001'
set protocols bgp parameters router-id '10.100.0.10'

# Neighbor к Hub
set protocols bgp neighbor '10.100.0.1' remote-as '65500'
set protocols bgp neighbor '10.100.0.1' description 'YC Hub'
set protocols bgp neighbor '10.100.0.1' address-family ipv4-unicast

# iBGP к другому spoke клиента A (СПб)
set protocols bgp neighbor '10.100.0.11' remote-as '65001'
set protocols bgp neighbor '10.100.0.11' description 'Client A - SPb'
set protocols bgp neighbor '10.100.0.11' address-family ipv4-unicast

# Анонсирование локальной сети
set protocols bgp address-family ipv4-unicast network '192.168.10.0/24'

# Firewall
set firewall ipv4 input filter rule 200 action 'accept'
set firewall ipv4 input filter rule 200 protocol 'gre'

set firewall ipv4 input filter rule 210 action 'accept'
set firewall ipv4 input filter rule 210 protocol 'esp'

set firewall ipv4 input filter rule 211 action 'accept'
set firewall ipv4 input filter rule 211 destination port '500'
set firewall ipv4 input filter rule 211 protocol 'udp'

set firewall ipv4 input filter rule 212 action 'accept'
set firewall ipv4 input filter rule 212 destination port '4500'
set firewall ipv4 input filter rule 212 protocol 'udp'

commit
save

Проверка подключения

На Hub:

# Показать NHRP cache (registered spokes)
show ip nhrp cache

# Показать NHS статус
show ip nhrp nhs

# Показать IPsec SA
show vpn ipsec sa

# Показать BGP neighbors
show ip bgp summary

# Показать BGP routes
show ip bgp

На Spoke:

# Проверить NHRP registration
show ip nhrp cache

# Проверить NHS
show ip nhrp nhs

# Проверить shortcut туннели
show ip nhrp shortcut

# Проверить IPsec SA
show vpn ipsec sa

# Ping hub
ping 10.100.0.1 source-address 10.100.0.10

# Ping другой spoke (инициирует spoke-to-spoke)
ping 10.100.0.20 source-address 10.100.0.10

# Проверить BGP
show ip bgp summary
show ip route bgp

Практический пример: VK Cloud Enterprise Branch Connectivity

Сценарий

Enterprise размещает DMVPN hub в VK Cloud для подключения филиалов компании.

Топология:

  • Hub: VyOS в VK Cloud (публичный IP: 95.142.100.200)
  • Spoke 1: Филиал Казань (192.168.100.0/24)
  • Spoke 2: Филиал Нижний Новгород (192.168.101.0/24)
  • Spoke 3: Филиал Самара (192.168.102.0/24)

DMVPN tunnel: 172.16.0.0/24

Конфигурация Hub в VK Cloud

# Tunnel интерфейс
set interfaces tunnel tun0 address '172.16.0.1/24'
set interfaces tunnel tun0 description 'VK Cloud DMVPN Hub for Enterprise'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '10.0.1.10'  # Внутренний IP VM в VK Cloud
set interfaces tunnel tun0 parameters ip key '200'
set interfaces tunnel tun0 mtu '1400'

# NHRP Hub
set protocols nhrp tunnel tun0 cisco-authentication 'VK_Ent_25'
set protocols nhrp tunnel tun0 holding-time '600'
set protocols nhrp tunnel tun0 multicast 'dynamic'
set protocols nhrp tunnel tun0 redirect

# IPsec
set vpn ipsec profile VK-ENTERPRISE authentication mode 'pre-shared-secret'
set vpn ipsec profile VK-ENTERPRISE authentication pre-shared-secret 'EnterpriseVK!2025'
set vpn ipsec profile VK-ENTERPRISE bind tunnel 'tun0'
set vpn ipsec profile VK-ENTERPRISE esp-group 'VK-ESP'
set vpn ipsec profile VK-ENTERPRISE ike-group 'VK-IKE'

set vpn ipsec esp-group VK-ESP lifetime '3600'
set vpn ipsec esp-group VK-ESP mode 'transport'
set vpn ipsec esp-group VK-ESP pfs 'dh-group19'
set vpn ipsec esp-group VK-ESP proposal 1 encryption 'aes256gcm128'
set vpn ipsec esp-group VK-ESP proposal 1 hash 'sha256'

set vpn ipsec ike-group VK-IKE ikev2-reauth
set vpn ipsec ike-group VK-IKE key-exchange 'ikev2'
set vpn ipsec ike-group VK-IKE lifetime '28800'
set vpn ipsec ike-group VK-IKE proposal 1 dh-group '19'
set vpn ipsec ike-group VK-IKE proposal 1 encryption 'aes256gcm128'
set vpn ipsec ike-group VK-IKE proposal 1 hash 'sha256'
set vpn ipsec ike-group VK-IKE dead-peer-detection action 'restart'
set vpn ipsec ike-group VK-IKE dead-peer-detection interval '30'
set vpn ipsec ike-group VK-IKE dead-peer-detection timeout '120'

# OSPF для маршрутизации между филиалами
set interfaces tunnel tun0 ip ospf network 'broadcast'
set interfaces tunnel tun0 ip ospf priority '255'

set protocols ospf area '0' network '172.16.0.0/24'
set protocols ospf area '0' network '10.0.1.0/24'
set protocols ospf parameters router-id '172.16.0.1'

# Firewall
set firewall ipv4 input filter rule 300 action 'accept'
set firewall ipv4 input filter rule 300 protocol 'gre'

set firewall ipv4 input filter rule 310 action 'accept'
set firewall ipv4 input filter rule 310 protocol 'esp'

set firewall ipv4 input filter rule 311 action 'accept'
set firewall ipv4 input filter rule 311 destination port '500'
set firewall ipv4 input filter rule 311 protocol 'udp'

set firewall ipv4 input filter rule 312 action 'accept'
set firewall ipv4 input filter rule 312 destination port '4500'
set firewall ipv4 input filter rule 312 protocol 'udp'

commit
save

Конфигурация Spoke (Филиал Казань)

# Tunnel
set interfaces tunnel tun0 address '172.16.0.10/24'
set interfaces tunnel tun0 description 'DMVPN to VK Cloud Hub - Kazan Branch'
set interfaces tunnel tun0 encapsulation 'gre'
set interfaces tunnel tun0 multicast 'enable'
set interfaces tunnel tun0 source-address '93.80.50.100'  # WAN IP филиала
set interfaces tunnel tun0 parameters ip key '200'
set interfaces tunnel tun0 mtu '1400'

# NHRP
set protocols nhrp tunnel tun0 cisco-authentication 'VK_Ent_25'
set protocols nhrp tunnel tun0 map '172.16.0.1/32' nbma-address '95.142.100.200'
set protocols nhrp tunnel tun0 map '172.16.0.1/32' register
set protocols nhrp tunnel tun0 nhs '172.16.0.1'
set protocols nhrp tunnel tun0 shortcut
set protocols nhrp tunnel tun0 multicast 'nhs'

# IPsec (идентичный hub)
set vpn ipsec profile VK-ENTERPRISE authentication mode 'pre-shared-secret'
set vpn ipsec profile VK-ENTERPRISE authentication pre-shared-secret 'EnterpriseVK!2025'
set vpn ipsec profile VK-ENTERPRISE bind tunnel 'tun0'
set vpn ipsec profile VK-ENTERPRISE esp-group 'VK-ESP'
set vpn ipsec profile VK-ENTERPRISE ike-group 'VK-IKE'

set vpn ipsec esp-group VK-ESP lifetime '3600'
set vpn ipsec esp-group VK-ESP mode 'transport'
set vpn ipsec esp-group VK-ESP pfs 'dh-group19'
set vpn ipsec esp-group VK-ESP proposal 1 encryption 'aes256gcm128'
set vpn ipsec esp-group VK-ESP proposal 1 hash 'sha256'

set vpn ipsec ike-group VK-IKE ikev2-reauth
set vpn ipsec ike-group VK-IKE key-exchange 'ikev2'
set vpn ipsec ike-group VK-IKE lifetime '28800'
set vpn ipsec ike-group VK-IKE proposal 1 dh-group '19'
set vpn ipsec ike-group VK-IKE proposal 1 encryption 'aes256gcm128'
set vpn ipsec ike-group VK-IKE proposal 1 hash 'sha256'
set vpn ipsec ike-group VK-IKE dead-peer-detection action 'restart'
set vpn ipsec ike-group VK-IKE dead-peer-detection interval '30'
set vpn ipsec ike-group VK-IKE dead-peer-detection timeout '120'

# OSPF
set interfaces tunnel tun0 ip ospf network 'broadcast'
set interfaces tunnel tun0 ip ospf priority '0'

set protocols ospf area '0' network '172.16.0.0/24'
set protocols ospf area '0' network '192.168.100.0/24'
set protocols ospf parameters router-id '172.16.0.10'

# Firewall
set firewall ipv4 input filter rule 300 action 'accept'
set firewall ipv4 input filter rule 300 protocol 'gre'

set firewall ipv4 input filter rule 310 action 'accept'
set firewall ipv4 input filter rule 310 protocol 'esp'

set firewall ipv4 input filter rule 311 action 'accept'
set firewall ipv4 input filter rule 311 destination port '500'
set firewall ipv4 input filter rule 311 protocol 'udp'

set firewall ipv4 input filter rule 312 action 'accept'
set firewall ipv4 input filter rule 312 destination port '4500'
set firewall ipv4 input filter rule 312 protocol 'udp'

commit
save

Операционные команды

Проверка NHRP

show ip nhrp cache

Показать NHRP cache (известные mappings):

show ip nhrp cache

Пример вывода на Hub:

Iface    Type    Protocol    NBMA            Tunnel          Flags
tun0     dynamic nhrp        198.51.100.10   10.255.0.10/32  registered UP
tun0     dynamic nhrp        198.51.100.20   10.255.0.20/32  registered UP
tun0     dynamic nhrp        95.163.20.100   10.255.0.30/32  registered UP

Флаги:

  • registered: Spoke зарегистрирован на NHS
  • UP: Туннель активен
  • dynamic: Entry создан динамически

show ip nhrp nhs

Показать Next Hop Server статус:

show ip nhrp nhs

Пример вывода на Spoke:

Iface    NBMA            Tunnel          Flags
tun0     203.0.113.1     10.255.0.1/32   UP

show ip nhrp shortcut

Показать active spoke-to-spoke shortcuts:

show ip nhrp shortcut

Пример вывода:

Iface    Target          Via             Type
tun0     192.168.2.0/24  10.255.0.20     shortcut

Означает: трафик к 192.168.2.0/24 идет напрямую к 10.255.0.20 (spoke-to-spoke).

Проверка IPsec

show vpn ipsec sa

Показать IPsec Security Associations:

show vpn ipsec sa

Пример вывода:

Connection        State    Uptime    Bytes In/Out
tun0-1            up       00:15:23  1.2M/856K
tun0-2            up       00:10:45  523K/412K

show vpn ipsec status

Показать общий статус IPsec:

show vpn ipsec status

Проверка туннеля

show interfaces tunnel

Показать все туннельные интерфейсы:

show interfaces tunnel

show interfaces tunnel tun0

Детальная информация о туннеле:

show interfaces tunnel tun0

Пример вывода:

tun0: <POINTOPOINT,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast
    link/ipip 203.0.113.1 peer 0.0.0.0
    inet 10.255.0.1/24 brd 10.255.0.255 scope global tun0
    RX:  bytes    packets     errors    dropped    overrun      mcast
           1.2M       8543          0          0          0          0
    TX:  bytes    packets     errors    dropped    carrier   collisions
         856.3K       5432          0          0          0          0

ping через туннель

Проверить connectivity через DMVPN:

# Ping tunnel IP
ping 10.255.0.10

# Ping сеть за spoke
ping 192.168.1.1

# Ping с указанием source
ping 10.255.0.10 source-address 10.255.0.1

Проверка маршрутизации

show ip route

Показать таблицу маршрутизации:

show ip route

Ищите маршруты через tun0 интерфейс.

show ip bgp

Показать BGP таблицу:

show ip bgp

show ip bgp summary

Краткая информация о BGP neighbors:

show ip bgp summary

show ip ospf neighbor

Показать OSPF соседей:

show ip ospf neighbor

Диагностика трафика

monitor interfaces tunnel tun0 traffic

Мониторинг трафика в реальном времени:

monitor interfaces tunnel tun0 traffic

Для выхода: Ctrl+C

tcpdump на туннеле

Захват пакетов для детальной диагностики:

sudo tcpdump -i tun0 -nn

Пример - смотреть только NHRP:

sudo tcpdump -i tun0 -nn proto gre

Устранение неполадок

Туннель не поднимается

Симптомы:

  • show ip nhrp cache на hub пустой
  • show ip nhrp nhs на spoke показывает DOWN
  • Нет connectivity через туннель

Чек-лист:

  1. Проверьте GRE на firewall

На hub и spoke:

show firewall ipv4 input filter

Должно быть правило разрешающее GRE (protocol 47).

  1. Проверьте IPsec
show vpn ipsec sa

Если SA не установлен:

  • Проверьте pre-shared-secret (должен совпадать)
  • Проверьте ESP/IKE groups (должны совпадать)
  • Проверьте firewall для UDP 500, 4500 и ESP
  1. Проверьте NHRP authentication

Пароль cisco-authentication должен совпадать на hub и spoke.

  1. Проверьте source-address на spoke
show interfaces tunnel tun0

source-address должен быть реальным WAN IP или IP на WAN интерфейсе.

  1. Проверьте connectivity к hub
ping 203.0.113.1  # Публичный IP hub

Если не пингуется - проблемы с маршрутизацией/firewall до hub.

NHRP регистрация не происходит

Симптомы:

  • Туннель UP, но spoke не появляется в show ip nhrp cache на hub
  • На spoke show ip nhrp nhs показывает DOWN

Решение:

  1. Проверьте NHRP map на spoke:
show protocols nhrp tunnel tun0

Должен быть map с register для hub:

map 10.255.0.1/32 nbma-address 203.0.113.1 register
  1. Проверьте holding-time на hub:
show protocols nhrp tunnel tun0

Убедитесь что holding-time достаточный (300-600 секунд).

  1. Проверьте network-id:

Если используется network-id, он должен совпадать на hub и spoke.

  1. Перезапустите NHRP на spoke:
restart nhrp tunnel tun0

Spoke-to-Spoke туннели не создаются

Симптомы:

  • Hub-to-spoke работает
  • Spoke-to-spoke трафик идет через hub
  • show ip nhrp shortcut на spoke пустой

Решение:

  1. Проверьте redirect на hub:
show protocols nhrp tunnel tun0

Должен быть redirect включен.

  1. Проверьте shortcut на spoke:
show protocols nhrp tunnel tun0

Должен быть shortcut включен.

  1. Проверьте маршрутизацию на spoke:

Spoke должны иметь маршруты к сетям за другими spoke через hub:

show ip route

Если маршрутов нет - проблема с динамической маршрутизацией (BGP/OSPF).

  1. Инициируйте трафик spoke-to-spoke:
ping 192.168.2.1  # Сеть за другим spoke

После первых пакетов через hub должен создаться shortcut.

  1. Проверьте NHRP resolution:
show log | match nhrp

Ищите NHRP resolution requests и responses.

IPsec SA постоянно пересоздается

Симптомы:

  • show vpn ipsec sa показывает малое uptime
  • Туннель работает но нестабильно
  • Логи показывают постоянное пересоздание SA

Решение:

  1. Проверьте Dead Peer Detection:
show vpn ipsec ike-group

Убедитесь что DPD настроен корректно:

  • action: restart
  • interval: 30
  • timeout: 120
  1. Проверьте MTU:

Слишком большой MTU может вызывать проблемы. Попробуйте:

set interfaces tunnel tun0 mtu '1400'
commit
  1. Проверьте NAT traversal:

Если spoke за NAT, убедитесь что UDP 4500 открыт.

  1. Проверьте lifetime:
show vpn ipsec esp-group
show vpn ipsec ike-group

Слишком короткий lifetime вызывает частые rekeying.

Производительность DMVPN низкая

Симптомы:

  • Медленная передача данных через туннель
  • Высокая latency
  • Packet loss

Решение:

  1. Проверьте MTU:

Фрагментация пакетов снижает производительность:

# Тест PMTU
ping 10.255.0.1 size 1400 do-not-fragment

Если пакеты не проходят, уменьшите MTU:

set interfaces tunnel tun0 mtu '1380'
commit
  1. Проверьте MSS clamping:

Для TCP трафика настройте MSS clamping:

set firewall ipv4 forward filter rule 50 action 'accept'
set firewall ipv4 forward filter rule 50 protocol 'tcp'
set firewall ipv4 forward filter rule 50 tcp flags syn
set firewall ipv4 forward filter rule 50 tcp mss '1360:1536'
commit
  1. Проверьте загрузку CPU:
show system cpu

GRE + IPsec требуют CPU. Если загрузка высокая - проблема в железе.

  1. Проверьте bandwidth на WAN:
monitor interfaces eth0 traffic

Возможно WAN канал насыщен.

  1. Отключите compression (если включен):

GRE compression обычно не нужен и снижает производительность.

Multicast трафик не проходит

Симптомы:

  • OSPF соседства не формируются
  • Multicast приложения не работают
  • EIGRP hello не проходят

Решение:

  1. Проверьте multicast на туннеле:
show interfaces tunnel tun0

Должно быть multicast enable.

  1. Проверьте NHRP multicast:

На hub:

show protocols nhrp tunnel tun0

Должно быть multicast dynamic.

На spoke:

show protocols nhrp tunnel tun0

Должно быть multicast nhs.

  1. Проверьте IGMP:
show ip igmp groups
  1. Тестируйте multicast:

На spoke отправьте multicast:

sudo ping -I tun0 224.0.0.5

На других spoke мониторьте:

sudo tcpdump -i tun0 -nn dst 224.0.0.5

Лучшие практики

Безопасность

  1. Используйте сильную аутентификацию
  • NHRP authentication минимум 8 символов
  • IPsec pre-shared-secret минимум 20 символов
  • Рассмотрите сертификаты для IPsec
  1. Современная криптография
  • AES-256-GCM для ESP encryption
  • SHA-256 минимум для hash
  • DH group 14 минимум (лучше 19/20)
  • IKEv2 вместо IKEv1
  1. Ограничьте firewall

Разрешайте GRE/IPsec только от известных источников (если возможно):

set firewall ipv4 input filter rule 200 action 'accept'
set firewall ipv4 input filter rule 200 protocol 'gre'
set firewall ipv4 input filter rule 200 source group address-group 'KNOWN_SPOKES'
  1. Ротация ключей

Периодически меняйте:

  • NHRP authentication password
  • IPsec pre-shared-secrets
  • IKE/ESP lifetime настройте для автоматического rekeying

Масштабируемость

  1. Используйте BGP для больших сетей

BGP масштабируется лучше OSPF для сотен spoke:

  • Гибкая политика маршрутизации
  • Атрибуты для traffic engineering
  • Route reflectors для еще большего масштаба
  1. Summary маршруты на hub

Не анонсируйте специфичные /32 маршруты spoke - используйте summarization.

  1. DMVPN Phase 3

Для больших сетей используйте Phase 3 (summary routes + shortcut).

  1. Мониторинг ресурсов hub

Hub - критичный компонент, мониторьте:

  • CPU utilization
  • Memory usage
  • NHRP cache size
  • IPsec SA count

Надежность

  1. Dual-hub архитектура

Для критичных сетей используйте два hub:

  • Разные публичные IP
  • Разные датацентры/облака
  • Spoke с двумя NHS
  1. Dead Peer Detection

Настройте DPD для быстрого обнаружения обрывов:

set vpn ipsec ike-group DMVPN-IKE dead-peer-detection action 'restart'
set vpn ipsec ike-group DMVPN-IKE dead-peer-detection interval '30'
set vpn ipsec ike-group DMVPN-IKE dead-peer-detection timeout '120'
  1. NHRP holding-time

Баланс между overhead и скоростью обнаружения отказов:

  • 300-600 секунд для стабильных сетей
  • 120-300 секунд для нестабильных WAN
  1. Backup маршруты

Настройте floating static routes как backup для DMVPN.

Производительность

  1. Правильный MTU

Определите оптимальный MTU для вашей сети:

  • Стандартно: 1400 для GRE + IPsec
  • Тестируйте PMTU: ping size <value> do-not-fragment
  • MSS clamping для TCP
  1. Минимизируйте overhead
  • Не используйте compression без необходимости
  • GRE key используйте только если нужна изоляция
  • Избегайте nested туннелей
  1. Offloading (если доступен)

На поддерживаемом железе включите crypto offloading для IPsec.

  1. QoS

Для критичного трафика настройте QoS:

set traffic-policy shaper DMVPN-SHAPER bandwidth '100mbit'
set traffic-policy shaper DMVPN-SHAPER class 10 match 'voice' ip dscp 'ef'
set traffic-policy shaper DMVPN-SHAPER class 10 bandwidth '20%'
set traffic-policy shaper DMVPN-SHAPER class 10 priority '1'

set interfaces tunnel tun0 traffic-policy out 'DMVPN-SHAPER'

Управление и мониторинг

  1. Документация

Документируйте:

  • Топологию DMVPN (какой spoke где)
  • IP addressing plan (tunnel IPs, NBMA IPs)
  • BGP AS numbers
  • Контакты для каждого spoke
  1. Мониторинг

Настройте мониторинг:

  • NHRP cache size на hub
  • IPsec SA status
  • BGP/OSPF neighbor state
  • Bandwidth utilization
  • Packet loss/latency
  1. Логирование

Включите логи для DMVPN событий:

set system syslog global facility local7 level 'debug'
set system syslog host 192.168.1.100 facility local7 level 'info'
  1. Централизованное управление

Для больших сетей используйте:

  • Ansible для автоматизации конфигурации
  • Git для версионирования config
  • VyOS API для программного управления
  1. Регулярное тестирование

Периодически тестируйте:

  • Failover на dual-hub
  • Spoke-to-spoke tunnels
  • Performance (throughput, latency)
  • Recovery после сбоев

Сравнение с другими VPN технологиями

ХарактеристикаDMVPNWireGuardIPsec Site-to-SiteOpenVPN
Spoke-to-SpokeДа, динамическиНет (manual)Нет (manual)Нет (manual)
МасштабируемостьОтлично (сотни spoke)ХорошоПлохо (N*N туннелей)Средне
Конфигурация spokeМинимальнаяПростаяДля каждого peerПростая (server-client)
Динамические IP spokeДаДаОграниченоДа
ПроизводительностьХорошоОтличноХорошоСредне
MulticastДа (через NHRP)НетНетНет
Динамическая маршрутизацияДа (BGP/OSPF)Нет нативноДа (BGP/OSPF)Да (BGP/OSPF)
NAT traversalДа (через NAT-T)ДаДа (NAT-T)Да
RedundancyДа (dual-hub)ManualManualManual
СтандартизацияRFCRFCRFCНет (de-facto)

Когда использовать DMVPN:

  • Service provider с множеством клиентов
  • Enterprise с множеством филиалов
  • Нужны spoke-to-spoke туннели
  • Масштабируемость критична
  • Динамическая маршрутизация требуется

Когда НЕ использовать DMVPN:

  • Малое количество site (2-3) - используйте WireGuard или IPsec
  • Простота важнее функциональности - используйте WireGuard
  • Производительность критична - используйте WireGuard
  • Нет опыта с NHRP/GRE - используйте WireGuard

Ресурсы и дополнительные материалы

Официальная документация

VyOS командная справка

# Показать все NHRP команды
show ip nhrp ?

# Показать все IPsec команды
show vpn ipsec ?

# Показать все tunnel команды
show interfaces tunnel ?

Связанные разделы документации

  • IPsec VPN - для понимания IPsec интеграции
  • WireGuard - альтернатива для простых сценариев
  • Firewall - настройка firewall для DMVPN
  • BGP - динамическая маршрутизация через DMVPN
  • OSPF - альтернативная маршрутизация

Облачные платформы

Сообщество и поддержка

Заключение

DMVPN - мощная технология для создания масштабируемых VPN сетей с динамическими spoke-to-spoke туннелями. VyOS предоставляет полную поддержку DMVPN включая NHRP, mGRE и IPsec интеграцию.

Ключевые преимущества DMVPN:

  • Масштабируемость до сотен spoke узлов
  • Автоматическое создание spoke-to-spoke туннелей
  • Минимальная конфигурация на spoke
  • Поддержка динамических IP адресов
  • Интеграция с динамической маршрутизацией
  • Отказоустойчивость через dual-hub

Рекомендации:

  • Для service provider сетей - DMVPN идеален
  • Для enterprise с множеством филиалов - DMVPN отличный выбор
  • Для малых сетей (2-5 site) - рассмотрите WireGuard
  • Используйте BGP для больших масштабируемых сетей
  • Настройте dual-hub для критичных сетей
  • Регулярно мониторьте и тестируйте

DMVPN в VyOS обеспечивает enterprise-grade функциональность для построения сложных VPN инфраструктур с отличной масштабируемостью и надежностью.