Last updated on December 4, 2021
Blog ITA - Post 4
Premessa
Ad alcuni di voi sara’ sicuramente capitato – durante la configurazione del NAT su un router Cisco – di incappare in un output di questo tipo:
Router#
*Nov 28 16:10:30.445: %LINEPROTO-5-UPDOWN: Line protocol on Interface NVI0, changed state to up
Router#show ip interface brief | i NVI0
NVI0 198.51.100.1 YES unset up up
Interface NVI0: da dove salta fuori?
Fughiamo ogni dubbio attraverso la lettura del post.
L'avvento della NVI nel mondo IPv4
A partire dalla IOS Software Release 12.3(14)T, Cisco ha introdotto una nuova feature che va sotto il nome di NAT Virtual Interface ( NVI ).
Questa interfaccia virtuale:
- compare nel momento in cui si abilita NAT (Legacy o meno) all’interno del router
- viene utilizzata solo quando si lancia il comando ip nat enable sotto le interfacce su cui si intende abilitare il NAT
- non supporta Stateful NAT
- viene utilizzata nel caso in cui serva effettuare il NAT in presenza di VRF
Caratteristiche distintive di una NVI
Punto 1
Con le NVI, scompaiono i concetti di inside interface ed outside interface. Il comando ” ip nat enable “, come si puo’ osservare, non fa alcun riferimento ai concetti di inside/outside.
Punto 2
Con le NVI, la classificazione (pre e post traduzione) degli indirizzi IPv4 subisce un cambiamento:
- inside local DIVENTA source local
- inside global DIVENTA source global
- outside local DIVENTA destination local
- outside global DIVENTA destination global
(vien da se’ che le definizioni restano immutate)
Punto 3
Il NAT Order of Operation – in presenza di NVI – si discosta da quanto visto durante la trattazione del Legacy NAT (per maggiori dettagli sul Legacy NAT, si rimanda il lettore alla lettura dei post ” NAT per IPv4 (prima parte) ” e ” NAT per IPv4 (seconda parte) “. Il processo di traduzione adottato da una NVI (contrariamente a quanto visto nel caso Legacy) e’ simmetrico, indipendentemente dalla direzione del flusso dati.
Configurazione del NAT in presenza di NVI
Creazione della NVI
Abilitiamo la NVI feature:
!
interface GigabitEthernet0/0
ip nat enable
!
interface GigabitEthernet0/1
ip nat enable
!
R1#show ip interface brief | i up
GigabitEthernet0/0 198.51.100.1 YES manual up up
GigabitEthernet0/1 192.0.2.1 YES manual up up
NVI0 198.51.100.1 YES unset up up
Ricordiamo che la NVI performa due routing operation: quando un NAT router riceve un pacchetto su una NAT-enabled interface, il router confronta gli indirizzi sorgente/destinazione del pacchetto con le entry presenti in NAT Table. Se il router trova un match:
- il pacchetto viene inviato alla interfaccia NVI0 (routing # 1 + forwarding)
- la traduzione ha luogo (NAT)
- il pacchetto viene trasmesso sulla exit interface (routing # 2 + forwarding)
Come si evince dall’output dello show command, il NAT router assegna un indirizzo IP alla interfaccia NVI0 (per uso interno). Tale IP non ha alcun effetto sul processo NAT; viene semplicemente ricopiato dalla prima interfaccia fisica disponibile (Gi0/0) oppure dalla prima interfaccia su cui e’ stato abilitato il NAT.
CASO 1: Static NAT
Supponiamo di voler tradurre l’indirizzo 192.0.2.1 nell’ indirizzo 203.0.113.100.
La static NAT entry sara’ definita in questo modo:
R1(config)#ip nat source static 192.0.2.1 203.0.113.100
CASO 2: Dynamic NAT
Supponiamo di voler tradurre la rete 192.0.2.0/29 nel NAT pool 203.0.113.1/29-203.0.113.6/29.
Riportiamo qui in basso i comandi da utilizzare:
R1(config)#ip nat pool NAT_POOL 203.0.113.1 203.0.113.6 prefix-length 29
R1(config)#ip access-list standard CLIENT_LIST
R1(config-std-nacl)#permit 192.0.2.0 0.0.0.7
R1(config)#ip nat source list CLIENT_LIST pool NAT_POOL
CASO 3: PAT
Supponiamo di voler tradurre la rete 192.0.2.0/24 nell’indirizzo IP assegnato alla interfaccia Gi0/0 del NAT router (198.51.100.1/30).
Riportiamo qui in basso i comandi da utilizzare:
R1(config)#ip access-list standard CLIENT_LIST
R1(config-std-nacl)#permit 192.0.2.0 0.0.0.255
R1(config)#ip nat source list CLIENT_LIST interface Gi0/0 overload
Comandi di show
I due show command di riferimento sono:
- show ip nat nvi translations
- show ip nat nvi statistics
NVI all'opera
Dimostriamo le funzionalita’ della NVI con un piccolo laboratorio.
Andremo ad utilizzare la seguente topologia:
Configurazione iniziale di R1:
interface GigabitEthernet0/0
ip nat enable
!
interface GigabitEthernet0/1
ip nat enable
!
interface GigabitEthernet0/3
ip nat enable
!
ip nat source static 10.10.11.1 192.0.2.254
ip nat source static 10.10.7.1 203.0.113.254
!
ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/1 192.0.2.2
ip route 10.10.11.0 255.255.255.0 GigabitEthernet0/0 10.10.1.2
R1#show ip route | b Gate
Gateway of last resort is 192.0.2.2 to network 0.0.0.0
S* 0.0.0.0/0 [1/0] via 192.0.2.2, GigabitEthernet0/1
10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
C 10.10.1.0/24 is directly connected, GigabitEthernet0/0
L 10.10.1.1/32 is directly connected, GigabitEthernet0/0
S 10.10.11.0/24 [1/0] via 10.10.1.2, GigabitEthernet0/0
192.0.2.0/24 is variably subnetted, 4 subnets, 3 masks
C 192.0.2.0/30 is directly connected, GigabitEthernet0/1
L 192.0.2.1/32 is directly connected, GigabitEthernet0/1
C 192.0.2.32/29 is directly connected, GigabitEthernet0/3
L 192.0.2.33/32 is directly connected, GigabitEthernet0/3
R1#show ip interface brief | i up
GigabitEthernet0/0 10.10.1.1 YES NVRAM up up
GigabitEthernet0/1 192.0.2.1 YES NVRAM up up
GigabitEthernet0/3 192.0.2.33 YES NVRAM up up
NVI0 10.10.1.1 YES unset up up
R1#show ip nat nvi translations
Pro Source global Source local Destin local Destin global
--- 203.0.113.254 10.10.7.1 --- ---
--- 192.0.2.254 10.10.11.1 --- ---
Analizzando il contenuto della RIB, risulta evidente che, al momento, il router R1 non dispone di una rotta verso la subnet 10.10.7.0/24.
Il ping test effettuato da PC1 [Source Local 10.10.11.1] verso il PC7 [Destination Local 203.0.113.254] non va a buon fine.
Come mai?
Per rispondere alla domanda dobbiamo ricordare il NVI Order of Operation.
Quando R1 riceve l’echo request sull’interfaccia Gi0/0:
- il pacchetto viene inviato alla interfaccia NVI0
- la traduzione ha luogo (NAT: s=192.0.2.254, d=10.10.7.1)
- il pacchetto viene trasmesso sull’interfaccia Gi0/1 (match della default static route verso l’ISP)
E’ possibile risolvere il problema attraverso l’uso di una semplice static route:
R1(config)#ip route 10.10.7.0 255.255.255.0 GigabitEthernet0/3 192.0.2.34
R1(config)#
*Dec 1 11:19:17.380: NAT*: i: icmp (10.10.11.1, 8) -> (203.0.113.254, 8) [12]
*Dec 1 11:19:17.380: NAT*: s=10.10.11.1->192.0.2.254, d=203.0.113.254 [12]
*Dec 1 11:19:17.380: NAT*: s=192.0.2.254, d=203.0.113.254->10.10.7.1 [12]
*Dec 1 11:19:17.384: NAT*: i: icmp (10.10.7.1, 8) -> (192.0.2.254, 8) [12]
*Dec 1 11:19:17.384: NAT*: s=10.10.7.1->203.0.113.254, d=192.0.2.254 [12]
*Dec 1 11:19:17.384: NAT*: s=203.0.113.254, d=192.0.2.254->10.10.11.1 [12]
R1#show ip nat nvi translations
Pro Source global Source local Destin local Destin global
--- 203.0.113.254 10.10.7.1 --- ---
icmp 192.0.2.254:9 10.10.11.1:9 203.0.113.254:9 10.10.7.1:9
--- 192.0.2.254 10.10.11.1 --- ---
Ora il ping test e’ successful !!!