воскресенье, 13 июля 2014 г.

DMVPN DualHUB(Dual_ISP) Spoke1(Dual_ISP)



Данное продакш решение демонстрирует возможности построения логических модулей и является одним из фундаментальных блоков для решения множества задач. Написано уже давно лично мной без чьей-либо помощи, и является моей привычной средой уровня работы.
Все элементарные-базовые концептуальные решения заимствованы из гугла, и цисковких манов. Спасибо так же более "старшим" неизвестным мне коллегам, у которых можно было увидеть базовые применения по EEM в пределах одного оператора.
Надеюсь, что и мои записи так же помогут неизвестным мне начинающим коллегам.

В данном рассмотрении уделено особое внимание связке HUB1-Spoke1, как выделения его в модуль решения. Всё остальные связки делают по аналогии пользуясь этим же решением или комплектом более простых.

1) Задаём IP адреса на интерфейсы(пропущено) и прописываем маршрутизацию
ПоказатьСкрыть
HUB1
ip route 0.0.0.0 0.0.0.0 100.1.1.1
ip route 0.0.0.0 0.0.0.0 100.1.2.1

Spoke1
Снимем маршрутизацию с физических интерфейсов в VRF-ы ( в моём концептном решении это было необходимо в силу глобальной задачи, но рассмотрению самой изюминки это не мешает )
ip vrf R1C1
 rd 101:11

ip vrf R2C1
 rd 101:12

ip route vrf R1C1 0.0.0.0 0.0.0.0 200.1.1.1
ip route vrf R2C1 0.0.0.0 0.0.0.0 200.1.2.1

2) Настраиваем mGRE и маршрутизацию
ПоказатьСкрыть
HUB1
interface Tunnel1
 ip address 192.168.101.1 255.255.255.0
 no ip redirects
 ip mtu 1400
 no ip next-hop-self eigrp 77
 ip nhrp authentication cisco711
 ip nhrp map multicast dynamic
 ip nhrp network-id 1
 ip tcp adjust-mss 1360
 no ip split-horizon eigrp 77
 tunnel source FastEthernet2/1
 tunnel mode gre multipoint
 tunnel key 2011
 tunnel route-via FastEthernet2/1 mandatory
 tunnel path-mtu-discovery

interface Tunnel2
 ip address 192.168.102.1 255.255.255.0
 no ip redirects
 ip mtu 1400
 no ip next-hop-self eigrp 77
 ip nhrp authentication cisco712
 ip nhrp map multicast dynamic
 ip nhrp network-id 2
 ip tcp adjust-mss 1360
 no ip split-horizon eigrp 77
 tunnel source FastEthernet1/0
 tunnel mode gre multipoint
 tunnel key 2012
 tunnel route-via FastEthernet1/0 mandatory
 tunnel path-mtu-discovery

Spoke1
interface Tunnel111
 ip address 192.168.101.101 255.255.255.0
 no ip redirects
 ip mtu 1400
 no ip next-hop-self eigrp 77
 ip nhrp authentication cisco711
 ip nhrp map 192.168.101.1 100.1.1.2
 ip nhrp map multicast 100.1.1.2
 ip nhrp network-id 1
 ip nhrp holdtime 1800
 ip nhrp nhs 192.168.101.1
 ip nhrp registration no-unique
 no ip split-horizon eigrp 77
 tunnel source FastEthernet1/0
 tunnel mode gre multipoint
 tunnel key 2011
 tunnel route-via FastEthernet1/0 mandatory
 tunnel path-mtu-discovery
 tunnel vrf R1C1
!
interface Tunnel112
 ip address 192.168.101.101 255.255.255.0
 no ip redirects
 ip mtu 1400
 no ip next-hop-self eigrp 77
 ip nhrp authentication cisco711
 ip nhrp map 192.168.101.1 100.1.1.2
 ip nhrp map multicast 100.1.1.2
 ip nhrp network-id 1
 ip nhrp holdtime 1800
 ip nhrp nhs 192.168.101.1
 ip nhrp registration no-unique
 no ip split-horizon eigrp 77
 shutdown
 tunnel source FastEthernet2/1
 tunnel mode gre multipoint
 tunnel key 2011
 tunnel route-via FastEthernet2/1 mandatory
 tunnel path-mtu-discovery
 tunnel vrf R2C1
!
interface Tunnel121
 ip address 192.168.102.101 255.255.255.0
 no ip redirects
 ip mtu 1400
 no ip next-hop-self eigrp 77
 ip nhrp authentication cisco712
 ip nhrp map multicast 100.1.2.2
 ip nhrp map 192.168.102.1 100.1.2.2
 ip nhrp network-id 2
 ip nhrp holdtime 1800
 ip nhrp nhs 192.168.102.1
 ip nhrp registration no-unique
 no ip split-horizon eigrp 77
 shutdown
 tunnel source FastEthernet1/0
 tunnel mode gre multipoint
 tunnel key 2012
 tunnel route-via FastEthernet1/0 mandatory
 tunnel path-mtu-discovery
 tunnel vrf R1C1
!
interface Tunnel122
 ip address 192.168.102.101 255.255.255.0
 no ip redirects
 ip mtu 1400
 no ip next-hop-self eigrp 77
 ip nhrp authentication cisco712
 ip nhrp map multicast 100.1.2.2
 ip nhrp map 192.168.102.1 100.1.2.2
 ip nhrp network-id 2
 ip nhrp holdtime 1800
 ip nhrp nhs 192.168.102.1
 ip nhrp registration no-unique
 no ip split-horizon eigrp 77
 shutdown
 tunnel source FastEthernet2/1
 tunnel mode gre multipoint
 tunnel key 2012
 tunnel route-via FastEthernet2/1 mandatory
 tunnel path-mtu-discovery
 tunnel vrf R2C1


уже прописано на туннельных интерфейсах
 no ip next-hop-self eigrp 77
 no ip split-horizon eigrp 77

и поднимаем eigrp на HUB и Spoke роутерах
router eigrp 77
 network 10.0.0.0
 network 192.168.0.0 0.0.255.255

3) На данном этапе надо решить задачку по экономии трафика подключив логический модуль
ПоказатьСкрыть
Условия и ситуации данной задачи сводятся к решению простого концепта указанного на картинке которую я сделал.

Приоритет использования туннелей в порядке убывания в данных условиях будет такой: Tunnel 111, Tunnel 112, Tunnel 121, Tunnel 122
А так же приведена блок-схема логического модуля.


Приступим к анализу ситуаций и выработке стратегии
Spoke1

а) Задаём SLA и треки следящие за SLA
ip sla 111
 icmp-echo 100.1.1.2 source-interface FastEthernet1/0
 vrf R1C1
 threshold 3
 timeout 2000
 frequency 5
ip sla schedule 111 life forever start-time now
track 111 ip sla 111 reachability
 delay down 10 up 20

ip sla 112
 icmp-echo 100.1.1.2 source-interface FastEthernet2/1
 vrf R2C1
 threshold 3
 timeout 2000
 frequency 5
ip sla schedule 112 life forever start-time now
track 112 ip sla 112 reachability
 delay down 15 up 25

ip sla 121
 icmp-echo 100.1.2.2 source-interface FastEthernet1/0
 vrf R1C1
 threshold 3
 timeout 2000
 frequency 5
ip sla schedule 121 life forever start-time now
track 121 ip sla 121 reachability
 delay down 20 up 30

ip sla 122
 icmp-echo 100.1.2.2 source-interface FastEthernet2/1
 vrf R2C1
 threshold 3
 timeout 2000
 frequency 5
ip sla schedule 122 life forever start-time now
track 122 ip sla 122 reachability
 delay down 25 up 35

б) Задаём stub-треки для снятия информации о текущем состоянии SLA
track 911 stub-object
 default-state down

track 912 stub-object
 default-state down

track 921 stub-object
 default-state down

track 922 stub-object
 default-state down

в) Задаём stub-треки для снятия информации о текущем состоянии Tunnel интерфейсов
track 811 stub-object
 default-state down

track 812 stub-object
 default-state down

track 821 stub-object
 default-state down

track 822 stub-object
 default-state down

г) Прописываем обработку срабатываний SLA-Track в STUB-Track и старт основного логического блока
event manager applet TRACK111UP
 event track 111 state up
 action 100  track set 911 state up
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"
  
event manager applet TRACK111DOWN
 event track 111 state down
 action 100  track set 911 state down
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"

event manager applet TRACK112UP
 event track 112 state up
 action 100  track set 912 state up
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"
 
event manager applet TRACK112DOWN
 event track 112 state down
 action 100  track set 912 state down
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"

event manager applet TRACK121UP
 event track 121 state up
 action 100  track set 921 state up
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"

 event manager applet TRACK121DOWN
 event track 121 state down
 action 100  track set 921 state down
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"
 
event manager applet TRACK122UP
 event track 122 state up
 action 100  track set 922 state up
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"
 
event manager applet TRACK122DOWN
 event track 122 state down
 action 100  track set 922 state down
 action 101  cli command "enable"
 action 102  cli command "event manager run CO1SLT"

д) Создаём основной логический блок (Central Office 1 Service Logic Tunnels)

Срабатывает на изменение STUB-Track'ов принудительно через run
action 110-141 -- считываем данные с STUB-Track'ов из SLA в переменные $_track_state_1ХХ
action 150-181 -- считываем данные с STUB-Track'ов из Tunnel в переменные $_track_state_1ХХ
action 201-215 -- Вывод данных в лог для визуализации
action 301-399 -- Логический блок
event manager applet CO1SLT
 event none
 action 110  track read 911
 action 111  set track_state_911 "$_track_state"
 action 120  track read 912
 action 121  set track_state_912 "$_track_state"
 action 130  track read 921
 action 131  set track_state_921 "$_track_state"
 action 140  track read 922
 action 141  set track_state_922 "$_track_state"
 action 150  track read 811
 action 151  set track_state_811 "$_track_state"
 action 160  track read 812
 action 161  set track_state_812 "$_track_state"
 action 170  track read 821
 action 171  set track_state_821 "$_track_state"
 action 180  track read 822
 action 181  set track_state_822 "$_track_state"
 action 201  syslog msg "======================================================"
 action 202  syslog msg "--- Central Office 1 Service Logic Tunnels started ---"
 action 203  set eq_up "up"
 action 204  set eq_down "down"
 action 207  syslog msg "Status track911 is $track_state_911"
 action 208  syslog msg "Status track912 is $track_state_912"
 action 209  syslog msg "Status track921 is $track_state_921"
 action 210  syslog msg "Status track922 is $track_state_922"
 action 211  syslog msg "Status track811 is $track_state_811"
 action 212  syslog msg "Status track812 is $track_state_812"
 action 213  syslog msg "Status track821 is $track_state_821"
 action 214  syslog msg "Status track822 is $track_state_822"
 action 215  syslog msg "------------------------------------------------------"
 action 301  if $track_state_911 eq $eq_up 
 action 301.0 syslog msg "Logical module CO1SLT: Track911-UP-confirmed"
 action 301.1 if $track_state_911 ne $track_state_811
 action 301.1.0 syslog msg "Logical module CO1SLT: Track911 ne Track811 confirmed. Tunnel 111 must be UPPED"
 action 301.1.11  cli command "enable"
 action 301.1.12  cli command "configure terminal"
 action 301.1.13  cli command "interface range tunnel 111-112, tunnel 121-122"
 action 301.1.14  cli command "shutdown"
 action 301.1.15  track set 811 state down
 action 301.1.16  track set 812 state down
 action 301.1.17  track set 821 state down
 action 301.1.18  track set 822 state down
 action 301.1.21  cli command "do clear crypto isa"
 action 301.1.22  cli command "do clear crypto sa"
 action 301.1.23  wait 1
 action 301.1.31  cli command "interface tunnel 111"
 action 301.1.31a cli command "no ip add"
 action 301.1.31b cli command "ip add 192.168.101.101 255.255.255.0"
 action 301.1.32  cli command "no shutdown"
 action 301.1.41  track set 811 state up
 action 301.1.98  syslog msg "Logical module CO1SLT: Operation to UP the Tunnel 111 completed. Track811 --> UP. Exit 301.1.99"
 action 301.1.98a syslog msg "======================================================"
 action 301.1.99 exit 301.1.99_Normal_Exit
 action 301.2 else 
 action 301.2.1  syslog msg "Logical module CO1SLT: Current optimal Tunnel 111. And he already UP. Exit 301.2.2"
 action 301.2.1a syslog msg "======================================================"
 action 301.2.2  exit 301.2.2_Normal_Exit
 action 301.3 end 
 action 302 else
  action 303 if $track_state_912 eq $eq_up 
  action 303.0 syslog msg "Logical module CO1SLT: Track912-UP-confirmed"
  action 303.1 if $track_state_912 ne $track_state_812
  action 303.1.0 syslog msg "Logical module CO1SLT: Track912 ne Track812 confirmed. Tunnel 112 must be UPPED"
  action 303.1.11  cli command "enable"
  action 303.1.12  cli command "configure terminal"
  action 303.1.13  cli command "interface range tunnel 111-112, tunnel 121-122"
  action 303.1.14  cli command "shutdown"
  action 303.1.15  track set 811 state down
  action 303.1.16  track set 812 state down
  action 303.1.17  track set 821 state down
  action 303.1.18  track set 822 state down
  action 303.1.21  cli command "do clear crypto isa"
  action 303.1.22  cli command "do clear crypto sa"
  action 303.1.23  wait 1
  action 303.1.31  cli command "interface tunnel 112"
  action 303.1.31a cli command "no ip add"
  action 303.1.31b cli command "ip add 192.168.101.101 255.255.255.0"
  action 303.1.32  cli command "no shutdown"
  action 303.1.41  track set 812 state up
  action 303.1.98  syslog msg "Logical module CO1SLT: Operation to UP the Tunnel 112 completed. Track812 --> UP. Exit 303.1.99"
  action 303.1.98a syslog msg "======================================================"
  action 303.1.99 exit 303.1.99_Normal_Exit
  action 303.2 else 
  action 303.2.1 syslog msg "Logical module CO1SLT: Current optimal Tunnel 112. And he already UP. Exit 303.2.2"
  action 303.2.1a syslog msg "======================================================"
  action 303.2.2 exit 303.2.2_Normal_Exit
  action 303.3 end 
  action 304 else
   action 305 if $track_state_921 eq $eq_up 
   action 305.0 syslog msg "Logical module CO1SLT: Track921-UP-confirmed"
   action 305.1 if $track_state_921 ne $track_state_821
   action 305.1.0 syslog msg "Logical module CO1SLT: Track921 ne Track821 confirmed. Tunnel 121 must be UPPED"
   action 305.1.11  cli command "enable"
   action 305.1.12  cli command "configure terminal"
   action 305.1.13  cli command "interface range tunnel 111-112, tunnel 121-122"
   action 305.1.14  cli command "shutdown"
   action 305.1.15  track set 811 state down
   action 305.1.16  track set 812 state down
   action 305.1.17  track set 821 state down
   action 305.1.18  track set 822 state down
   action 305.1.21  cli command "do clear crypto isa"
   action 305.1.22  cli command "do clear crypto sa"
   action 305.1.23  wait 1
   action 305.1.31  cli command "interface tunnel 121" 
   action 305.1.31a cli command "no ip add"
   action 305.1.31b cli command "ip add 192.168.102.101 255.255.255.0"
   action 305.1.32  cli command "no shutdown"
   action 305.1.41  track set 821 state up
   action 305.1.98  syslog msg "Logical module CO1SLT: Operation to UP the Tunnel 121 completed. Track821 --> UP. Exit 305.1.99"
   action 305.1.98a syslog msg "======================================================"
   action 305.1.99 exit 305.1.99_Normal_Exit
   action 305.2 else 
   action 305.2.1 syslog msg "Logical module CO1SLT: Current optimal Tunnel 121. And he already UP. Exit 305.2.2"
   action 305.2.1a syslog msg "======================================================"
   action 305.2.2 exit 305.2.2_Normal_Exit
   action 305.3 end 
   action 306 else
    action 307 if $track_state_922 eq $eq_up 
    action 307.0 syslog msg "Logical module CO1SLT: Track922-UP-confirmed"
    action 307.1 if $track_state_922 ne $track_state_822
    action 307.1.0 syslog msg "Logical module CO1SLT: Track922 ne Track822 confirmed. Tunnel 122 must be UPPED"
    action 307.1.11  cli command "enable"
    action 307.1.12  cli command "configure terminal"
    action 307.1.13  cli command "interface range tunnel 111-112, tunnel 121-122"
    action 307.1.14  cli command "shutdown"
    action 307.1.15  track set 811 state down
    action 307.1.16  track set 812 state down
    action 307.1.17  track set 821 state down
    action 307.1.18  track set 822 state down
    action 307.1.21  cli command "do clear crypto isa"
    action 307.1.22  cli command "do clear crypto sa"
    action 307.1.23  wait 1
    action 307.1.31  cli command "interface tunnel 122"
 action 307.1.31a cli command "no ip add"
    action 307.1.31b cli command "ip add 192.168.102.101 255.255.255.0"
    action 307.1.32  cli command "no shutdown"
    action 307.1.41  track set 822 state up
    action 307.1.98  syslog msg "Logical module CO1SLT: Operation to UP the Tunnel 122 completed. Track822 --> UP. Exit 307.1.99"
 action 307.1.98a syslog msg "======================================================"
    action 307.1.99 exit 307.1.99_Normal_Exit
    action 307.2 else 
    action 307.2.1 syslog msg "Logical module CO1SLT: Current optimal Tunnel 122. And he already UP. Exit 307.2.2"
 action 307.2.1a syslog msg "======================================================"
    action 307.2.2 exit 307.2.2_Normal_Exit
    action 307.3 end 
    action 308 else
 action 309.10  syslog msg "Logical module CO1SLT: WARNING ALL PROVIDERS ARE DOWN. Administrator has been notified. Type of communication: SMS."
 action 301.10.a syslog msg "======================================================"
    action 309.11  cli command "enable"
    action 309.12  cli command "configure terminal"
    action 309.13  cli command "interface range tunnel 111-112, tunnel 121-122"
    action 309.14  cli command "shutdown"
    action 309.15  track set 811 state down
    action 309.16  track set 812 state down
    action 309.17  track set 821 state down
    action 309.18  track set 822 state down
    action 309.19  cli command "do clear crypto isa"
    action 309.20  cli command "do clear crypto sa"


    action 396 end
   action 397 end
  action 398 end
 action 399 end

4) И дошлифуем шифрованием
ПоказатьСкрыть
HUB1

а) Создаём две ключницы -- по одной на каждое облако и строго определяем интерфейс использования
 crypto keyring DMVPN-CLOUD1
  local-address fa 2/1
  pre-shared-key address 0.0.0.0 0.0.0.0 key cisco123

 crypto keyring DMVPN-CLOUD2
   local-address fa 1/0
   pre-shared-key address 0.0.0.0 0.0.0.0 key cisco123

б) Создаём политику служебного туннеля ( можно создать и два, если это требует регламент безопасности )
crypto isakmp policy 10
 encryption 3des
 authentication pre-share
 group 2

в) Создаём профиль isakmp для создания служебного тоннеля, по одному на каждое облако
crypto isakmp profile DMVPN-CLOUD1
 keyring DMVPN-CLOUD1
 match identity address 0.0.0.0
 local-address fa 2/1

 crypto isakmp profile DMVPN-CLOUD2
 keyring DMVPN-CLOUD2
 match identity address 0.0.0.0
 local-address fa 1/0

г) Задаём трансформу-шифрование основного туннеля
 crypto ipsec transform-set ESP-DES-MD5-HMAC esp-des esp-md5-hmac

д) Создаём профили ipsec на каждое облако
crypto ipsec profile DMVPN-CLOUD1
 set transform-set ESP-DES-MD5-HMAC
 set isakmp-profile DMVPN-CLOUD1

crypto ipsec profile DMVPN-CLOUD2
 set transform-set ESP-DES-MD5-HMAC
 set isakmp-profile DMVPN-CLOUD2


е) И променяем профили к тоннелям
interface Tunnel 1
 tunnel protection ipsec profile DMVPN-CLOUD1

interface Tunnel 2
 tunnel protection ipsec profile DMVPN-CLOUD2


------------------------------------------- Spoke1

а) Создаём две ключницы -- по одной на каждое облако и строго определяем интерфейс использования
crypto keyring D-CLOUD1 vrf R1C1
 pre-shared-key address 0.0.0.0 0.0.0.0 key cisco123

crypto keyring D-CLOUD2 vrf R2C1
 pre-shared-key address 0.0.0.0 0.0.0.0 key cisco123

б) Создаём политику служебного туннеля ( можно создать и два, если это требует регламент безопасности )
crypto isakmp policy 10
 encryption 3des
 authentication pre-share
 group 2

в) Создаём профиль isakmp для создания служебного тоннеля, по одному на каждый туннель
crypto isakmp profile D-CLOUD11
 vrf R1C1
 keyring D-CLOUD1
 match identity address 0.0.0.0 R1C1
 local-address fa 1/0
crypto isakmp profile D-CLOUD12
 vrf R2C1
 keyring D-CLOUD2
 match identity address 0.0.0.0 R2C1
 local-address fa 2/1

crypto isakmp profile D-CLOUD21
 vrf R1C1
 keyring D-CLOUD1
 match identity address 0.0.0.0 R1C1
 local-address fa 1/0
crypto isakmp profile D-CLOUD22
 vrf R2C1
 keyring D-CLOUD2
 match identity address 0.0.0.0 R2C1
 local-address fa 2/1

г) Задаём трансформу-шифрование основного туннеля
 crypto ipsec transform-set ESP-DES-MD5-HMAC esp-des esp-md5-hmac

д) Создаём профили ipsec на каждый туннель
crypto ipsec profile D-CLOUD11
 set transform-set ESP-DES-MD5-HMAC
 set isakmp-profile D-CLOUD11
crypto ipsec profile D-CLOUD12
 set transform-set ESP-DES-MD5-HMAC
 set isakmp-profile D-CLOUD12

crypto ipsec profile D-CLOUD21
 set transform-set ESP-DES-MD5-HMAC
 set isakmp-profile D-CLOUD21
crypto ipsec profile D-CLOUD22
 set transform-set ESP-DES-MD5-HMAC
 set isakmp-profile D-CLOUD22

е) И променяем профили к тоннелям
interface Tunnel 111
 tunnel protection ipsec profile D-CLOUD11
interface Tunnel 112
 tunnel protection ipsec profile D-CLOUD12

interface Tunnel 121
 tunnel protection ipsec profile D-CLOUD21
interface Tunnel 122
 tunnel protection ipsec profile D-CLOUD22

5) "Пилите, Шура, пилите! Они золотые!"
ПоказатьСкрыть

В продакшне при внедрении выловлено немало косяков, главная трудность в том что железка имеет свойство:
а) Перезагружаться при потере питания, значит внедрённое решение должно быть саморегулирущимся.
б) Поскольку конфиги меняются и сохраняются в процессе работы, то могут сохраниться и поднятые туннели и прочее атрибуты решения
Значит внедрённое решение должно быть саморегулирущимся из любой точки и из любого состояния


Пункты 1 и 2 в сумме налагают приличное количество ограничений на конструирование. Рабочее решение я подобрал только на 8-мом варианте переписывания, меняя как идеи с концептами, так и общесистемную логику.


Например был выловлен такой косяк на поднятых туннелях при загрузке циски, крайне неприятное сообщение:
% 192.168.101.0 overlaps with Tunnel111
% 192.168.102.0 overlaps with Tunnel121

после чего ip адреса пропадут с опущенных туннелей в избежании Overlaps.
action 30Х.1.31a,b решают эту проблему.


Так же это решение не будет работать, если не решить вопрос маршрутизации на HUB1 потому что, sla 22 будет всегда проседать из-за роутинга, решается простым применнием концептного модуля ip sla (искать по метке).
Кстати ip sla модуль был описан как раз составляющий элемент данного решения.


И конечно в каждом внедрении нужно чётко шлифовать таймеры в зависимости от нагрузки на железку. Словом масса нюансов в каждом конкретном случае будет иметь место быть. Но все они решаемы.

Комментариев нет:

Отправить комментарий