NAT Virtual Interface

Last updated on December 4, 2021

Blog ITA - Post 4

Complexity [ scale of 1 to 5 ]
2.5/5

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:

  1. il pacchetto viene inviato alla interfaccia NVI0 (routing # 1 + forwarding)
  2. la traduzione ha luogo (NAT)
  3. 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:

  1. il pacchetto viene inviato alla interfaccia NVI0
  2. la traduzione ha luogo (NAT: s=192.0.2.254, d=10.10.7.1)
  3. 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 !!!