Дано:
Классическая схема DMVPN -- HUB and SPOKE
R1 -- центральный офис и логический HUB
R3, R4 -- региональные офисы логические SPOKE
R2 -- имитация интернет, с маршрутизацией типа OSPF 77
Loopback интерфейсы прописываются для упрощённой настройки OSPF (RouterID)
Схема упрощена до базового концепта DMVPN типа HUB-SPOKE,
т.е. у филиалов присутствуют белые IP и отсутствует NAT
каждая логическая единица схемы имеет только одного провайдера
вместо BGP используется OSPF ( как вариант можно было бы ещё упростить до default-gateway )
Задача:
Настроить DMVPN типа point-to-multipoint с поддержкой логических mGRE тоннелей с поддержкой шифрования IPSec
Настроить днамическую маршрутизацию между ними объединяя их в одну логическую сеть
Создать эту систему таким образом чтобы добавление нового SPOKE узла требовало настройки только с его стороны
Решение:
Теоретический базис
В основе DMVPN лежат несколько технологий:
mGRE-туннели - (m – сокращение от multipoint);
Протокол NHRP (Next Hop Resolution Protocol) http://tools.ietf.org/html/rfc2332;
Протоколы динамической маршрутизации;
Профили IPsec (IPsec profiles).
Технология DMVPN позволяет решить задачу масштабируемым методом,
чем создание связей точка-точка между всеми офисами и объединения их в полносвязную топологию:
При добавлении новых маршрутизаторов в существующую сеть DMVPN, необходимо настроить только новый маршрутизатор,
изменений на уже существующих маршрутизаторах не требуется. DMVPN позволяет использовать динамически назначенные
IP-адреса на spoke-маршрутизаторах.
Если двум spoke-маршрутизаторам необходимо установить туннель напрямую, то он устанавливается динамически.
В отличие от классического point-to-point GRE – Виртуальный интерфейс mGRE работает аналогично интерфейсу point-to-multipoint Frame Relay.
Тем самым позволяя в рамках одной L2 сети объединить много устройств.
NHRP в свою очередь является сопутствующим механизмом,
позволяющим установить соответствие между реальными физическими IP адресами маршрутизаторов, и их виртуальными туннельными адресами.
Маршрутизаторы могут выступать в роли NHRP серверов, и NHRP клиентов.
Первыми являются Hub-маршрутизаторы. Они выстраивают динамическую таблицу соответствия реальных и виртуальных адресов по мере регистрации Spoke-маршрутизаторов.
И распространяют эту информацию по всем Spoke-м.
Практический концепт
1) настраиваем базовые параметры интерфейсов и OSPF маршрутизации
R1(config)#interface loopback 1
R1(config-if)#ip add 10.0.0.1 255.255.255.255
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa 0/0
R1(config-if)#ip add 100.0.0.2 255.255.255.0
R1(config-if)#no sh
---
R2(config)#int fa 0/0
R2(config-if)#ip add 100.0.0.1 255.255.255.0
R2(config-if)#no sh
R2(config)#int loopback 1
R2(config-if)#ip add 10.0.0.4 255.255.255.255
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int fa 0/1
R2(config-if)#ip add 200.1.1.1 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int fa 1/0
R2(config-if)#ip add 200.2.2.1 255.255.255.0
R2(config-if)#no sh
---
R3(config)#int fa 0/0
R3(config-if)#ip add 200.1.1.2 255.255.255.0
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#int fa 0/1
R3(config-if)#ip add 10.0.2.1 255.255.255.0
R3(config-if)#no sh
R3(config)#int loopback 1
R3(config-if)#ip add 10.0.0.2 255.255.255.255
R3(config-if)#no sh
R3(config-if)#exit
---
R4(config)#int fa 0/0
R4(config-if)#ip add 200.2.2.2 255.255.255.0
R4(config-if)#no sh
R4(config)#int fa 0/1
R4(config-if)#ip add 10.0.3.0 255.255.255.0
R4(config-if)#ip add 10.0.3.1 255.255.255.0
R4(config-if)#no sh
R4(config)#int loopback 1
R4(config-if)#ip add 10.0.0.3 255.255.255.255
R4(config-if)#no sh
R4(config-if)#exit
--------------------------------------------------------------
2) настраиваем параметры OSPF маршрутизации в сторону имитации интернета
R1(config)#router ospf 77
R1(config-router)#network 100.0.0.0 0.0.0.255 area 0
R1(config-router)#exit
R2(config)#router ospf 77
R2(config-router)#network 100.0.0.0 0.0.0.255 area 0
R2(config-router)#network 200.1.1.0 0.0.0.255 area 0
R2(config-router)#network 200.2.2.0 0.0.0.255 area 0
R2(config-router)#
R3(config)#router ospf 77
R3(config-router)#network 200.1.1.0 0.0.0.255 area 0
R3(config-router)#exit
R4(config)#router ospf 77
R4(config-router)#network 200.2.2.0 0.0.0.255 area 0
R4(config-router)#exit
--------------------------------------------------------------
--------------------------------------------------------------
3) Настраиваем mGRE интерфейсы
Для поднятия логического пространства mGRE будем использовать подсеть 192.168.0.0/24
R1(config)#interface Tunnel1
R1(config-if)#ip add 192.168.0.1 255.255.255.0
R1(config-if)#ip mtu 1400
Задаём динамический вид MAP muliticast на HUB
R1(config-if)#ip nhrp map multicast dynamic
Задаём DMVPN облаку номер 1 ( если облаков несколько )
R1(config-if)#ip nhrp network-id 1
Указываем время до обновления динамической записи в базе
R1(config-if)#ip nhrp holdtime 400
R1(config-if)#ip tcp adjust-mss 1360
R1(config-if)#tunnel source fa 0/0
R1(config-if)#tunnel mode gre multipoint
R1(config-if)#tunnel path-mtu-discovery
уменьшаем MTU – т.к. GRE и ESP инкапсуляции увеличивают размер пакета
команды: ip mtu 1400, ip tcp adjust-mss 1360, tunnel path-mtu-discovery
--------------------------------------------------------------
R3(config)#interface Tunnel1
R3(config-if)#ip add 192.168.0.101 255.255.255.0
R3(config-if)#ip mtu 1400
Прямо указываем статический map до хаба и назначаем его сервером
что указывает, что именно SPOKE будет инициатором изначального соединения
R3(config-if)#ip nhrp map 192.168.0.1 100.0.0.2
R3(config-if)#ip nhrp map multicast 100.0.0.2
R3(config-if)#ip nhrp network-id 1
R3(config-if)#ip nhrp holdtime 400
R3(config-if)#ip nhrp nhs 192.168.0.1
R3(config-if)#ip tcp adjust-mss 1360
R3(config-if)#tunnel source fa 0/0
R3(config-if)#tunnel mode gre multipoint
R3(config-if)#tunnel path-mtu-discovery
Сразу проверяем
R3(config-if)#do sh ip nhrp
192.168.0.1/32 via 192.168.0.1, Tunnel1 created 00:02:06, never expire
Type: static, Flags: authoritative used
NBMA address: 100.0.0.2
--------------------------------------------------------------
R4(config)#interface Tunnel1
R4(config-if)#ip add 192.168.0.102 255.255.255.0
R4(config-if)#ip mtu 1400
R4(config-if)#ip nhrp map 192.168.0.1 100.0.0.2
R4(config-if)#ip nhrp map multicast 100.0.0.2
R4(config-if)#ip nhrp network-id 1
R4(config-if)#ip nhrp holdtime 400
R4(config-if)#ip nhrp nhs 192.168.0.1
R4(config-if)#ip tcp adjust-mss 1360
R4(config-if)#tunnel source fa 0/0
R4(config-if)#tunnel mode gre multipoint
R4(config-if)#tunnel path-mtu-discovery
R4(config-if)#do sh ip nhrp
192.168.0.1/32 via 192.168.0.1, Tunnel1 created 00:01:17, never expire
Type: static, Flags: authoritative used
NBMA address: 100.0.0.2
---------------------------------------------------------------
4) настраиваем IPSec профили
Важно понимать, что ipsec profile – это завуалированный crypto dynamic-map.
Это отчетливо видно, если ввести: show crypto map.
При желании/необходимости данную конструкцию можно поменять на классический crypto dynamic-map,
c указанием в сопутствующем ACL интересующего трафика GRE.
Создаём ключницу DMVPN1
R1(config)#crypto keyring DMVPN1
В ключнице pre-shared ключ для всех хостов
R1(conf-keyring)#pre-shared-key address 0.0.0.0 0.0.0.0 key dmvpncisco
Настраиваем политику служебного туннеля
R1(config)#crypto isakmp policy 10
R1(config-isakmp)#encryption 3des
R1(config-isakmp)#authentication pre-share
R1(config-isakmp)#group 2
Добавляем фичи для стабильности (гугл в помощь)
When an invalid security parameter index error (shown as "Invalid SPI")
occurs in IP Security (IPSec) packet processing,
the Invalid Security Parameter Index Recovery feature allows for
an Internet Key Exchange (IKE) security association (SA) to be established.
The "IKE" module sends notification of the "Invalid SPI" error
to the originating IPSec peer so that Security Association Databases (SADBs)
can be resynchronized and successful packet processing can be resumed.
R1(config)#crypto isakmp invalid-spi-recovery
R1(config)#crypto isakmp keepalive 10 periodic
Создаём isakmp профиль DMVPN1
R1(config)#crypto isakmp profile DMVPN1
% A profile is deemed incomplete until it has match identity statements
Указываем что нужно использовать ключницу DMPN1
R1(conf-isa-prof)#keyring DMVPN1
Хост совпадения любой
R1(conf-isa-prof)#match identity address 0.0.0.0
Локальный интерфейс применения fa 0/0
R1(conf-isa-prof)#local-address fa 0/0
R1(conf-isa-prof)#exit
Задаём трансформу ( Шифрование основного туннеля )
R1(config)#crypto ipsec transform-set ESP-3DES-SHA-HMAC esp-3des esp-sha-hmac
указываем что нужно использовать профиль DMVPN1
R1(cfg-crypto-trans)#crypto ipsec profile DMVPN1
Задаём в профиле тип трансформы и профиль isakmp
R1(ipsec-profile)#set transform-set ESP-3DES-SHA-HMAC
R1(ipsec-profile)#set isakmp-profile DMVPN1
Применяем профиль ipsec DMVPN1 к туннелю
R1(config)#int Tunnel1
R1(config-if)#tunnel protection ipsec profile DMVPN1
R1(config-if)#exit
Смотрим глобально на то же в конфиге
Ключница для служебного тоннеля
crypto keyring DMVPN1
pre-shared-key address 0.0.0.0 0.0.0.0 key dmvpncisco
!
Политика служебного туннеля
crypto isakmp policy 10
encr 3des
authentication pre-share
group 2
crypto isakmp invalid-spi-recovery
crypto isakmp keepalive 10 periodic
Ключница и политика для служебного тоннеля объединяются в профиль ISAKMP
crypto isakmp profile DMVPN1
keyring DMVPN1
match identity address 0.0.0.0
local-address FastEthernet0/0
!
Далее задаётся трансформа-шифрование для основного туннеля
crypto ipsec transform-set ESP-3DES-SHA-HMAC esp-3des esp-sha-hmac
!
Далее трансформа и профиль служебного тоннеля обьединяются в профиль ipsec для установления основного туннеля
crypto ipsec profile DMVPN1
set transform-set ESP-3DES-SHA-HMAC
isakmp-profile DMVPN1
!
И профиль ipsec променяется к интерфейсу
interface Tunnel1
tunnel protection ipsec profile DMVPN1
Всё достаточно просто и прозрачно
Проверяем:
Настраиваем на R1, R3, R4 и смотрим лог и пинг
R4#ping 192.168.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 84/104/148 ms
R4#ping 192.168.0.101
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.101, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 188/280/384 ms
R4#ping 192.168.0.102
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.102, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 132/158/184 ms
R1#sh crypto isakmp sa
dst src state conn-id slot status
100.0.0.2 200.1.1.2 QM_IDLE 1 0 ACTIVE
100.0.0.2 200.2.2.2 QM_IDLE 2 0 ACTIVE
R3#sh crypto isakmp sa
dst src state conn-id slot status
100.0.0.2 200.1.1.2 QM_IDLE 1 0 ACTIVE
R4#sh crypto isakmp sa
dst src state conn-id slot status
100.0.0.2 200.2.2.2 QM_IDLE 1 0 ACTIVE
---------------------------------------------------------------
5) Поднимаем EIGRP на логической подсети
R1(config)#router eigrp 22Добавляются в силу особенностей функционирования типа frame-relay point-to-multipoint, для нормального функционирования маршрутизации
R1(config-router)#no auto-summary
R1(config-router)#network 10.0.0.0
R1(config-router)#network 192.168.0.0 0.0.255.255
R1(config)#int Tun1
R1(config-if)#no ip next-hop-self eigrp 22
R1(config-if)#no ip split-horizon eigrp 22
R3(config)#router eigrp 22
R3(config-router)#no auto-summary
R3(config-router)#network 10.0.0.0
R3(config-router)#net 192.168.0.0 0.0.255.255
R3(config-router)#
R3(config-router)#
*Mar 1 03:44:22.071: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 22: Neighbor 192.168.0.1 (Tunnel1) is up: new adjacency
R3(config-router)#
R3(config-router)#exit
R3(config)#int Tunnel 1
R3(config-if)#no ip next-hop-self eigrp 22
*Mar 1 03:45:20.987: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 22: Neighbor 192.168.0.1 (Tunnel1) is down: next_hop_self value changed
*Mar 1 03:45:23.343: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 22: Neighbor 192.168.0.1 (Tunnel1) is up: new adjacency
R3(config-if)#no ip split
R3(config-if)#no ip split-horizon eigrp 22
R3(config-if)#
*Mar 1 03:45:32.259: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 22: Neighbor 192.168.0.1 (Tunnel1) is resync: split horizon changed
R4(config)#router eigrp 22
R4(config-router)#no auto-summary
R4(config-router)#network 10.0.0.0
R4(config-router)#network 192.168.0.0 0.0.255.255
R4(config)#int Tun1
R4(config-if)#no ip next-hop-self eigrp 22
R4(config-if)#no ip split-horizon eigrp 22
R4(config-if)#
---------------------------------------------------------------
6) Далее проверяем таблицы маршрутизации и хождение трафика
R1# show ip route
100.0.0.0/24 is subnetted, 1 subnets
C 100.0.0.0 is directly connected, FastEthernet0/0
O 200.1.1.0/24 [110/2] via 100.0.0.1, 00:01:25, FastEthernet0/0
O 200.2.2.0/24 [110/2] via 100.0.0.1, 00:01:25, FastEthernet0/0
10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
D 10.0.2.0/24 [90/297246976] via 192.168.0.101, 00:01:19, Tunnel1
D 10.0.0.2/32 [90/297372416] via 192.168.0.101, 00:01:19, Tunnel1
D 10.0.3.0/24 [90/297246976] via 192.168.0.102, 00:01:19, Tunnel1
D 10.0.0.3/32 [90/297372416] via 192.168.0.102, 00:01:20, Tunnel1
C 10.0.0.1/32 is directly connected, Loopback1
C 192.168.0.0/24 is directly connected, Tunnel1
R3#sh ip ro
100.0.0.0/24 is subnetted, 1 subnets
O 100.0.0.0 [110/2] via 200.1.1.1, 00:03:05, FastEthernet0/0
C 200.1.1.0/24 is directly connected, FastEthernet0/0
O 200.2.2.0/24 [110/2] via 200.1.1.1, 00:03:05, FastEthernet0/0
10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C 10.0.2.0/24 is directly connected, FastEthernet0/1
C 10.0.0.2/32 is directly connected, Loopback1
D 10.0.3.0/24 [90/310046976] via 192.168.0.102, 00:02:53, Tunnel1
D 10.0.0.3/32 [90/310172416] via 192.168.0.102, 00:02:54, Tunnel1
D 10.0.0.1/32 [90/297372416] via 192.168.0.1, 00:02:57, Tunnel1
C 192.168.0.0/24 is directly connected, Tunnel1
R4#sh ip ro
100.0.0.0/24 is subnetted, 1 subnets
O 100.0.0.0 [110/2] via 200.2.2.1, 00:04:36, FastEthernet0/0
O 200.1.1.0/24 [110/2] via 200.2.2.1, 00:04:36, FastEthernet0/0
C 200.2.2.0/24 is directly connected, FastEthernet0/0
10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
D 10.0.2.0/24 [90/310046976] via 192.168.0.101, 00:04:28, Tunnel1
D 10.0.0.2/32 [90/310172416] via 192.168.0.101, 00:04:28, Tunnel1
C 10.0.3.0/24 is directly connected, FastEthernet0/1
C 10.0.0.3/32 is directly connected, Loopback1
D 10.0.0.1/32 [90/297372416] via 192.168.0.1, 00:04:29, Tunnel1
C 192.168.0.0/24 is directly connected, Tunnel1
Трафик из Регионального офиса 1 идёт в Региональный офис 2 минуя центральный офис, а значит динамические туннели функционируют правильно.
7) Хорошие маны на которых строилось первое изучение, это было давно :)
http://www.cisco.com/en/US/docs/solutions/Enterprise/WAN_and_MAN/DMVPDG.html
http://www.cisco.com/en/US/docs/ios/security/configuration/guide/sec_per_tunnel_qos.pdf
http://www.cisco.com/en/US/docs/ios/12_4t/12_4t11/ht_trsel.html
Дальше я разберу несколько более сложных топологий.
Комментариев нет:
Отправить комментарий