Cand utilizam doua routere intr-o locatie este necesar, in functie de dorinta clientului pentru redundanta, sa folosim protocolul HSRP (hot-standby-router-protocol). Acesta presupune un ip virtual considerat de LAN ca gateway si utilizarea unui router principal/secundar in functie de prioritate. HSRP apartine de routerele Cisco (pentru alti vendori recomand VRRP).

Cand exista un singur provider de internet si ne ofera un subnet redus de adrese publice (de exemplu un /29) pentru acces in internet pot aparea probleme. In acest articol vom analiza situatia in care avem un singur ip public pentru iesire in WAN si HSRP configurat cu 2 routere (main si backup). Cand facem NAT overload providerul, care este nevoit sa returneze traficul, poate intampina instabilitate in tabela arp, deoarece va modifica constant adresa mac asociata ip-ului public care mascheaza LAN-ul. Va observa mac-ul routerului principal si apoi mac-ul celui secundar. Laboratorul arata astfel:

Traficul catre internet va fi mascat folosind adresa 80.0.0.1/29. Grupul HSRP va contine 2 routere main si backup folosind ip-ul 172.16.0.3/24 pentru routerul virtual vazut ca gateway de catre LAN. Vom folosi rutare statica, iar ca destinatii in internet vom folosi simbolic interfete loopback la Provider. Pentru HSRP si NAT Overload configuram astfel:

PRINCIPAL (adresare, rutare si HSRP):

interface FastEthernet1/0
description WAN
ip address 80.0.0.3 255.255.255.248
duplex auto
speed auto

interface FastEthernet0/0
description LAN
ip address 172.16.0.1 255.255.255.0
duplex auto
speed auto
standby version 2
standby ip 172.16.0.3
 (ip-ul routerul virtual)
standby priority 110 (by default prioritatea este 100 in HSRP, iar dupa principiul ”higher is better” va fi preferat acest router)
standby name HSRP (atribuirea unui nume ajuta NAT sa tina cont de routerul activ in HSRP atunci cand face translatarea)
standby track 1 decrement 90 ( aceasta setare tine cont de un obiect monitorizat, in cazul nostru 80.0.0.2, deoarece atunci cand nu mai raspunde la ping consideram link-ul prin routerul principal down facand trecerea la routerul secundar) Setarea pentru track este urmatoarea:

ip sla monitor 1
type pathEcho protocol ipIcmpEcho 80.0.0.2 source-ipaddr 80.0.0.3
tag HSRP-TRIGGER
frequency 10

ip sla monitor schedule 1 start-time now life forever (folosind comanda schedule activam comanda ping catre ip-ul specificat in sla. In cazul nostru monitorizarea este ”forever”)

track 1 rtr 1 reachability
ip route 0.0.0.0 0.0.0.0 FastEthernet1/0 80.0.0.2

Prin ip sla + track specificam ip-ul destinatie pentru ping. Punem tag pentru a identifica mai usor rolul acestui ip sla, dupa care il aplicam la un track ce verifica ”reachability”, daca ajunge la destinatia respectiva. Dupa ce configuram track object-ul il aplicam la HSRP. Cand destinatia nu mai raspunde la ping HSRP va scadea cu 90 prioritatea Principalului, calificand astfel Secundarul la calitatea de router Activ.

SECUNDAR (adresare, rutare și HSRP)

interface FastEthernet0/0
description LAN
ip address 172.16.0.2 255.255.255.0
ip virtual-reassembly
duplex auto
speed auto

#in acest caz lasam prioritate default 100, deoarece la PRINCIPAL avem deja 110.
standby version 2
standby ip 172.16.0.3
standby name HSRP

interface FastEthernet1/0
description WAN
ip address 80.0.0.4 255.255.255.248
ip virtual-reassembly
duplex auto
speed auto

ip route 0.0.0.0 0.0.0.0 FastEthernet1/0 80.0.0.2

PROVIDER (configurăm adresarea):

La routerul providerului o sa configuram interfata direct conectata la client si interfata loopback care o sa joace rolul unui server in internet.

interface Loopback1
description SERVER-TEST
ip address 1.1.1.1 255.255.255.255

interface FastEthernet0/0
description CLIENT
ip address 80.0.0.2 255.255.255.248
duplex auto
speed auto

Daca testam conectivitatea vom observa ca ajunge la ip-urile interfetelor WAN (PRINCIPAL&SECUNDAR):

Acum o sa configuram LAN-PC cu ip-ul 172.16.0.254 pentru a avea conectivitate in LAN, iar ca si gateway vom seta ip-ul virtual 172.16.0.3/24 (specificat in HSRP). Logica este aceea ca host-ul nu este interesat de routerul care o sa fie principal, ci doar de ip-ul mereu reachable al routerului virtual HSRP, rutand tot traficul prin cel Activ in grup:

Dupa cum putem observa traficul ajunge de la PC la echipamentele de retea si routerul HSRP:

Acum vom configura NAT Redundancy Overload folosind functia Stateful NAT responsabila cu sincronizarea tabelei NAT intre routerele din grupul HSRP. Aici aflandu-se cheia. Daca am configura NAT Overload clasic, acelasi pe ambele routere, am intampina urmatoarele erori:

  1. Deoarece mascam traficul cu acelasi ip public pe ambele routere vom primi eroare de ip duplicat.
  2. Routerul providerului, dupa ce Secundarul devine activ in HSRP, nu mai returneaza traficul inapoi, deoarece ramane in tabela arp mac-ul routerului principal dinainte.

In momentul de fata pe ambele routere avem configuratia:

ip access-list standard NAT
permit 172.16.0.0 0.0.0.255
 (ACL pentru a identifica subnetul destinat maparii NAT)

route-map NAT permit 10
match ip address NAT
 (route-map-urile sunt folosite pentru traffic engineering in general si ajuta in stabilirea mai multor crieterii pentru NAT sau rutare, in cazul nostru pentru selectarea subnetului permis in procesul de mapare NAT)

ip nat inside source route-map NAT pool NAT overload ( NAT overload inseamna mascarea mai multor ip-uri private in unul sau mai multe ip-uri publice, dar si translatarea porturilor sursa folosite in headerul de layer 4, pentru a nu exista conflicte)

Am pus in admin. shut. interfata fa1/0 a routerului Principal pentru a face failover. S-a facut trecerea si acum Secundarul este Activ:

Am lasat un ping continuu de pe LAN-PC in ip-ul Serverului din Internet si putem observa problema:

Incepe sa nu raspunda la ping, deoarece in tabela arp a providerului a ramas mac-ul routerului principal care nu mai are link cu acesta.
Tabela arp a Providerului:

Dupa cum se poate observa 80.0.0.1 (NAT IP) este asociat adresei mac cc01 (PRINCIPALUL), nu cc02 (SECUNDARUL), chiar daca acesta este cel care acum face translatarea:

Cum putem rezolva acest impas? Cum putem ajuta Providerul sa schimbe automat adresa mac asociata ip-ului, numai atunci cand se face failover prin HSRP? Din fericire exista o solutie, si anume Stateful NAT.

In HSRP se face gratuitous arp de fiecare data cand se schimba routerul activ. Din perspectiva pc-ului el va primi un gratuitous arp atunci cand 172.16.0.3 foloseste un alt router ca activ. Astfel, daca Principalul este activ in tabela arp a PC-ului vom avea asociat cc01, iar cand Secundarul devine activ vom avea cc02, totul datorita functiei gratuitous arp trimisa de routerul activ. Putem vedea asta cu un debug arp:

Tot cu gratuitous arp in urma configurarii Stateful NAT va fi modificata si tabela arp a Providerului. Routerul activ va informa Providerul ca 80.0.0.1 este asociat mac-ului sau si va exista astfel continuitate in trafic din perspectiva LAN-PC-ului. Sa vedem cum arata configuratia:

PRINCIPAL:

ip nat Stateful id 1
redundancy HSRP (identificam aceast setaare cu grupul HSRP creat)
mapping-id 100 (cream un mapping id pentru a lega setarea de NAT Overload cu aceasta)

ip nat pool NAT 80.0.0.1 80.0.0.1 prefix-length 29
ip nat inside source route-map NAT pool NAT mapping-id 100 overload

SECUNDAR:

ip nat Stateful id 2 (acelasi lucru in oglinda facem si pentru routerul Secundar)
redundancy HSRP
mapping-id 100
ip nat pool NAT 80.0.0.1 80.0.0.1 prefix-length 29
ip nat inside source route-map NAT pool NAT mapping-id 100 overload

Odata configurat o sa observam cum se sincronizeaza tabela nat intre cele 2 routere:

Am lasat un ping continuu catre 1.1.1.1 de pe LAN-PC, pentru a vedea daca intampinam aceeasi situatie din tabela arp a providerului atunci cand fortez un failover:

Momentan in tabela arp a Providerului avem asociat cu 80.0.0.1 mac-ul routerului principal care este Activ in HSRP:

Sa fortam trecerea in Standby printr-un shut pe interfata cu Providerul:

Dupa ce trece in Standby cel Principal, routerul Secundar odata devenit activ trimite un gratuitous arp catre Provider cu propriul mac asociat ip-ului 80.0.0.1. In timpul tranzactiei ping de pe LAN-PC da ”Destination Unreachable”, dar in timp isi revine:

In tabela arp a Providerului se modifica entry-ul de la cc01 la cc02:

Astfel, obtinem redundanta NAT in HSRP prin sincronizarea si convergenta tabelei NAT intre cele 2 routere plus functia gratuitous arp care ajuta echipamentele conectate sa cunoasca adresa mac a routerului activ.

Articol scris de Bogdan Curduban – Network Engineer