DMVPN - Dynamic Multipoint VPN в VyOS
DMVPN (Dynamic Multipoint VPN) - технология создания динамических mesh VPN сетей с автоматическим установлением туннелей между spoke узлами без необходимости предварительной конфигурации всех возможных соединений.
Обзор
DMVPN объединяет три ключевые технологии для создания масштабируемых и гибких VPN сетей:
NHRP (Next Hop Resolution Protocol) - RFC 2332
- Протокол динамического разрешения адресов для NBMA сетей
- Позволяет spoke узлам находить друг друга для прямых туннелей
- Регистрация и запросы адресов через NHS (Next Hop Server)
mGRE (Multipoint GRE) - RFC 1702
- Multipoint Generic Routing Encapsulation
- Один туннельный интерфейс для множества удаленных peer
- Динамическое создание туннелей без предварительной конфигурации
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' registershortcut
Разрешить создание 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
saveFailover:
- 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 UPshow 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/412Kshow vpn ipsec status
Показать общий статус IPsec:
show vpn ipsec statusПроверка туннеля
show interfaces tunnel
Показать все туннельные интерфейсы:
show interfaces tunnelshow 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 0ping через туннель
Проверить 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 bgpshow ip bgp summary
Краткая информация о BGP neighbors:
show ip bgp summaryshow 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 через туннель
Чек-лист:
- Проверьте GRE на firewall
На hub и spoke:
show firewall ipv4 input filterДолжно быть правило разрешающее GRE (protocol 47).
- Проверьте IPsec
show vpn ipsec saЕсли SA не установлен:
- Проверьте pre-shared-secret (должен совпадать)
- Проверьте ESP/IKE groups (должны совпадать)
- Проверьте firewall для UDP 500, 4500 и ESP
- Проверьте NHRP authentication
Пароль cisco-authentication должен совпадать на hub и spoke.
- Проверьте source-address на spoke
show interfaces tunnel tun0source-address должен быть реальным WAN IP или IP на WAN интерфейсе.
- Проверьте 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
Решение:
- Проверьте NHRP map на spoke:
show protocols nhrp tunnel tun0Должен быть map с register для hub:
map 10.255.0.1/32 nbma-address 203.0.113.1 register- Проверьте holding-time на hub:
show protocols nhrp tunnel tun0Убедитесь что holding-time достаточный (300-600 секунд).
- Проверьте network-id:
Если используется network-id, он должен совпадать на hub и spoke.
- Перезапустите NHRP на spoke:
restart nhrp tunnel tun0Spoke-to-Spoke туннели не создаются
Симптомы:
- Hub-to-spoke работает
- Spoke-to-spoke трафик идет через hub
show ip nhrp shortcutна spoke пустой
Решение:
- Проверьте redirect на hub:
show protocols nhrp tunnel tun0Должен быть redirect включен.
- Проверьте shortcut на spoke:
show protocols nhrp tunnel tun0Должен быть shortcut включен.
- Проверьте маршрутизацию на spoke:
Spoke должны иметь маршруты к сетям за другими spoke через hub:
show ip routeЕсли маршрутов нет - проблема с динамической маршрутизацией (BGP/OSPF).
- Инициируйте трафик spoke-to-spoke:
ping 192.168.2.1 # Сеть за другим spokeПосле первых пакетов через hub должен создаться shortcut.
- Проверьте NHRP resolution:
show log | match nhrpИщите NHRP resolution requests и responses.
IPsec SA постоянно пересоздается
Симптомы:
show vpn ipsec saпоказывает малое uptime- Туннель работает но нестабильно
- Логи показывают постоянное пересоздание SA
Решение:
- Проверьте Dead Peer Detection:
show vpn ipsec ike-groupУбедитесь что DPD настроен корректно:
- action: restart
- interval: 30
- timeout: 120
- Проверьте MTU:
Слишком большой MTU может вызывать проблемы. Попробуйте:
set interfaces tunnel tun0 mtu '1400'
commit- Проверьте NAT traversal:
Если spoke за NAT, убедитесь что UDP 4500 открыт.
- Проверьте lifetime:
show vpn ipsec esp-group
show vpn ipsec ike-groupСлишком короткий lifetime вызывает частые rekeying.
Производительность DMVPN низкая
Симптомы:
- Медленная передача данных через туннель
- Высокая latency
- Packet loss
Решение:
- Проверьте MTU:
Фрагментация пакетов снижает производительность:
# Тест PMTU
ping 10.255.0.1 size 1400 do-not-fragmentЕсли пакеты не проходят, уменьшите MTU:
set interfaces tunnel tun0 mtu '1380'
commit- Проверьте 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- Проверьте загрузку CPU:
show system cpuGRE + IPsec требуют CPU. Если загрузка высокая - проблема в железе.
- Проверьте bandwidth на WAN:
monitor interfaces eth0 trafficВозможно WAN канал насыщен.
- Отключите compression (если включен):
GRE compression обычно не нужен и снижает производительность.
Multicast трафик не проходит
Симптомы:
- OSPF соседства не формируются
- Multicast приложения не работают
- EIGRP hello не проходят
Решение:
- Проверьте multicast на туннеле:
show interfaces tunnel tun0Должно быть multicast enable.
- Проверьте NHRP multicast:
На hub:
show protocols nhrp tunnel tun0Должно быть multicast dynamic.
На spoke:
show protocols nhrp tunnel tun0Должно быть multicast nhs.
- Проверьте IGMP:
show ip igmp groups- Тестируйте multicast:
На spoke отправьте multicast:
sudo ping -I tun0 224.0.0.5На других spoke мониторьте:
sudo tcpdump -i tun0 -nn dst 224.0.0.5Лучшие практики
Безопасность
- Используйте сильную аутентификацию
- NHRP authentication минимум 8 символов
- IPsec pre-shared-secret минимум 20 символов
- Рассмотрите сертификаты для IPsec
- Современная криптография
- AES-256-GCM для ESP encryption
- SHA-256 минимум для hash
- DH group 14 минимум (лучше 19/20)
- IKEv2 вместо IKEv1
- Ограничьте 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'- Ротация ключей
Периодически меняйте:
- NHRP authentication password
- IPsec pre-shared-secrets
- IKE/ESP lifetime настройте для автоматического rekeying
Масштабируемость
- Используйте BGP для больших сетей
BGP масштабируется лучше OSPF для сотен spoke:
- Гибкая политика маршрутизации
- Атрибуты для traffic engineering
- Route reflectors для еще большего масштаба
- Summary маршруты на hub
Не анонсируйте специфичные /32 маршруты spoke - используйте summarization.
- DMVPN Phase 3
Для больших сетей используйте Phase 3 (summary routes + shortcut).
- Мониторинг ресурсов hub
Hub - критичный компонент, мониторьте:
- CPU utilization
- Memory usage
- NHRP cache size
- IPsec SA count
Надежность
- Dual-hub архитектура
Для критичных сетей используйте два hub:
- Разные публичные IP
- Разные датацентры/облака
- Spoke с двумя NHS
- 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'- NHRP holding-time
Баланс между overhead и скоростью обнаружения отказов:
- 300-600 секунд для стабильных сетей
- 120-300 секунд для нестабильных WAN
- Backup маршруты
Настройте floating static routes как backup для DMVPN.
Производительность
- Правильный MTU
Определите оптимальный MTU для вашей сети:
- Стандартно: 1400 для GRE + IPsec
- Тестируйте PMTU:
ping size <value> do-not-fragment - MSS clamping для TCP
- Минимизируйте overhead
- Не используйте compression без необходимости
- GRE key используйте только если нужна изоляция
- Избегайте nested туннелей
- Offloading (если доступен)
На поддерживаемом железе включите crypto offloading для IPsec.
- 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'Управление и мониторинг
- Документация
Документируйте:
- Топологию DMVPN (какой spoke где)
- IP addressing plan (tunnel IPs, NBMA IPs)
- BGP AS numbers
- Контакты для каждого spoke
- Мониторинг
Настройте мониторинг:
- NHRP cache size на hub
- IPsec SA status
- BGP/OSPF neighbor state
- Bandwidth utilization
- Packet loss/latency
- Логирование
Включите логи для DMVPN событий:
set system syslog global facility local7 level 'debug'
set system syslog host 192.168.1.100 facility local7 level 'info'- Централизованное управление
Для больших сетей используйте:
- Ansible для автоматизации конфигурации
- Git для версионирования config
- VyOS API для программного управления
- Регулярное тестирование
Периодически тестируйте:
- Failover на dual-hub
- Spoke-to-spoke tunnels
- Performance (throughput, latency)
- Recovery после сбоев
Сравнение с другими VPN технологиями
| Характеристика | DMVPN | WireGuard | IPsec Site-to-Site | OpenVPN |
|---|---|---|---|---|
| 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) | Manual | Manual | Manual |
| Стандартизация | RFC | RFC | RFC | Нет (de-facto) |
Когда использовать DMVPN:
- Service provider с множеством клиентов
- Enterprise с множеством филиалов
- Нужны spoke-to-spoke туннели
- Масштабируемость критична
- Динамическая маршрутизация требуется
Когда НЕ использовать DMVPN:
- Малое количество site (2-3) - используйте WireGuard или IPsec
- Простота важнее функциональности - используйте WireGuard
- Производительность критична - используйте WireGuard
- Нет опыта с NHRP/GRE - используйте WireGuard
Ресурсы и дополнительные материалы
Официальная документация
- VyOS DMVPN Documentation
- RFC 2332 - NBMA Next Hop Resolution Protocol (NHRP)
- RFC 1702 - Generic Routing Encapsulation over IPv4 networks
- RFC 4301 - Security Architecture for the Internet Protocol
VyOS командная справка
# Показать все NHRP команды
show ip nhrp ?
# Показать все IPsec команды
show vpn ipsec ?
# Показать все tunnel команды
show interfaces tunnel ?Связанные разделы документации
- IPsec VPN - для понимания IPsec интеграции
- WireGuard - альтернатива для простых сценариев
- Firewall - настройка firewall для DMVPN
- BGP - динамическая маршрутизация через DMVPN
- OSPF - альтернативная маршрутизация
Облачные платформы
Сообщество и поддержка
- VyOS Community Forums
- VyOS Slack
- VyOS GitHub
- OpenNIX Support - для коммерческой поддержки
Заключение
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 инфраструктур с отличной масштабируемостью и надежностью.