Cisco NVI (NAT Virtual Interface)

     En este laboratorio vamos a ver la utilización del Interfaz Virtual de NAT (NVI). Esta facilidad elimina el requerimiento de configurar dominios de NAT, es decir, un interface como NAT interno y otro como NAT externo. Simplemente definimos los interfaces en los que queremos utilizar NAT.

     Cuando configurarmos el NAT tradicional necesitamos tener al menos un interface como 'NAT outside' y otro interface como 'NAT inside' y configurar una serie de reglas de traducción. Para configurar Nat Virtual Interface (NVI) necesitamos al menos un interface con NAT habilitado y la misma serie de reglas de traducción.


     El NAT-NVI es la facilidad que implementó Cisco para realizar traducciones entre VRFs dentro de un mismo PE. Para traducciones entre interfaces dentro de una misma VRF se puede utilizar NAT tradicional. A pesar de que la documentación de Cisco únicamente parece dar uso a NVI como nateo inter-VRF lo podemos utilizar en cualquier escenario, como veremos en este lab.

     La facilidad de interface virtual de NAT permite que todo el tráfico nateado pase a través del interface virtual, eliminando la necesidad de especificar dominios inside y outside. Cuando se especifica un dominio las reglas de traducción son aplicadas antes (outside-to-inside) o después (inside-to-inside) de tomar las decisión de enrutamiento. Cuando utilizamos NVI las reglas de traducción son aplicadas únicamente después de tomar la decisión de enrutamiento. Es el siguiente esuqema podemos ver el orden de las operaciones cuando utilizamos NAT-NVI:



     Para el laboratorio tenemos un router con 4 interfaces. Dos de ellas tienen configurado el NAT tradicional (diferenciando dominios) y las otras dos trabajan mediante Nat Virtual Interface. Asimismo tenemos reglas de traducción estáticas y dinámicas. Vamos a realizarlo en 2 partes, primero con las reglas estáticas viendo las diferencias entre NAT tradicional y NAT-NVI y posteriormente, trabajando sólo con NAT-NVI veremos la utilización de los pooles.

     Veamos el esquema del laboratorio:


Pruebas con NAT estático


     Configuración del router Cisco para las pruebas con NAT estático:

version 12.4
!
hostname PruebaNVI
!
interface GigabitEthernet0/0
 ip address 10.10.7.1 255.255.255.0
 ip nat inside
-- Definimos este interface como perteneciente al dominio inside --
 duplex auto
 speed auto
 media-type rj45
 no cdp enable
!
interface GigabitEthernet0/1
 ip address 10.10.2.1 255.255.255.0
 ip nat enable
-- Habilitamos NAT para el interface (NVI) --
 duplex auto
 speed auto
 media-type rj45
!
interface FastEthernet1/0
 ip address 10.10.3.1 255.255.255.0
 ip nat outside
-- Definimos este interface como perteneciente al dominio outside --
 duplex auto
 speed auto
!
interface FastEthernet2/0
 ip address 10.10.4.1 255.255.255.0
 ip nat enable
-- Habilitamos NAT para el interface (NVI) --
 duplex auto
 speed auto
!      
ip route 10.10.1.0 255.255.255.0 10.10.7.2
ip route 10.10.6.0 255.255.255.0 10.10.4.2
ip route 10.10.10.0 255.255.255.0 10.10.2.2
!
ip nat source static tcp 10.10.10.34 80 10.10.10.34 81 extendable
-- Regla de traducción para el NAT sin dominio (NVI) --
ip nat inside source static tcp 10.10.1.5 23 10.10.1.5 28 extendable
-- Regla de traducción para el NAT por dominios --
------------------------------------------------------------------------


     Dentro de las pruebas con nateo estático tenemos la siguiente tabla de rutas:


PruebaNVI#sh ip route 
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route


Gateway of last resort is not set


     10.0.0.0/24 is subnetted, 7 subnets
S       10.10.1.0 [1/0] via 10.10.7.2
C       10.10.2.0 is directly connected, GigabitEthernet0/1
C       10.10.3.0 is directly connected, FastEthernet1/0
C       10.10.4.0 is directly connected, FastEthernet2/0
S       10.10.6.0 [1/0] via 10.10.4.2
C       10.10.7.0 is directly connected, GigabitEthernet0/0
S       10.10.10.0 [1/0] via 10.10.2.2


  • Primera prueba. En la que utilizamos NVI. Teniendo levantado un servidor web en la dirección 10.10.10.34 alcanzarle desde el equipo con dirección IP 10.10.6.6 por el puerto 81.
     En la log tras habilitar el debug para NAT-NVI vemos el tráfico y la traducción del puerto:

*Feb 23 11:52:50.305: NAT*: i: tcp (10.10.6.6, 54997) -> (10.10.10.34, 81) [5364]
*Feb 23 11:52:50.305: NAT*: TCP s=54997, d=81->80
*Feb 23 11:52:50.325: NAT*: i: tcp (10.10.10.34, 80) -> (10.10.6.6, 54997) [0]
*Feb 23 11:52:50.325: NAT*: TCP s=80->81, d=54997

     En la tabla de traducciones de NAT-NVI vemos:
PruebaNVI#sh ip nat nvi translations 
Pro Source global      Source local       Destin  local      Destin  global
tcp 10.10.6.6:54997    10.10.6.6:54997    10.10.10.34:81     10.10.10.34:80
tcp 10.10.10.34:81     10.10.10.34:80
  • Segunda prueba. En esta se utilizan los interfaces de NAT tradicional (dominios). Teniendo un servidor telnet en la dirección 10.10.1.6 alcanzarle desde el equipo con dirección IP 10.10.3.6 por el puerto 28.
     En la log tras habilitar el debug para NAT vemos el tráfico y la traducción del puerto:

*Feb 23 11:51:39.261: NAT*: o: tcp (10.10.3.6, 49184) -> (10.10.1.5, 28) [623]
*Feb 23 11:51:39.261: NAT*: TCP s=49184, d=28->23
*Feb 23 11:51:39.261: NAT*: i: tcp (10.10.1.5, 23) -> (10.10.3.6, 49184) [45661]
*Feb 23 11:51:39.265: NAT*: TCP s=23->28, d=49184

     En la tabla de traducciones de NAT tradicional:
PruebaNVI#sh ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
tcp 10.10.1.5:28       10.10.1.5:23       10.10.3.6:49184    10.10.3.6:49184
tcp 10.10.1.5:28       10.10.1.5:23


Pruebas con NAT dinámico

Configuración del router Cisco para las pruebas con NAT-NVI dinámico:

version 12.4
!
hostname PruebaNVI
!
no ip cef
!
no ip domain lookup
!
interface GigabitEthernet0/0
 ip address 10.10.4.1 255.255.255.0
 ip nat enable
-- Habilitamos NAT para el interface (NVI) --
 duplex full
 speed 10
 media-type rj45
!
interface GigabitEthernet0/1
 ip address 10.10.2.1 255.255.255.0
 ip nat enable
-- Habilitamos NAT para el interface (NVI) --
 duplex full
 speed 10
 media-type rj45
!
interface FastEthernet1/0
 ip address 10.10.3.1 255.255.255.0
 duplex auto
 speed auto
!
ip route 10.10.6.0 255.255.255.0 10.10.4.2
ip route 10.10.10.0 255.255.255.0 10.10.2.2
!
ip nat pool testnvi 10.10.20.40 10.10.20.50 netmask 255.255.255.0 add-route
-- Definimos el pool de NAT. El add-route indica que se añade una ruta sobre el interface NVI para la dirección global --
ip nat source list NAT pool testnvi overload
-- Configuramos un NVI e indicamos que los paquetes cuya dirección origen pase la lista de acceso serán traducidos dinámicamente utilizando las direcciones globales del pool indicado. Con overload permitimos que el router utilice una dirección global para varias locales. Cuando se configura overload el número de puerto TCP o UDP de cada host interno diferencia a las múltiples conversaciones que están utilizando la misma dirección IP local.  --
!
ip access-list extended NAT
-- Definimos la lista de acceso que indicará las direcciones que queremos que sean traducidas --
 permit ip 10.10.6.0 0.0.0.255 any log
 deny   ip any any log
---------------------------------------------------------------------------------------------------

     La tabla de rutas que tenemos para estas pruebas es la siguiente:

PruebaNVI#sh ip route 
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route


Gateway of last resort is not set


     10.0.0.0/24 is subnetted, 6 subnets
C       10.10.2.0 is directly connected, GigabitEthernet0/1
C       10.10.3.0 is directly connected, FastEthernet1/0
C       10.10.4.0 is directly connected, GigabitEthernet0/0
S       10.10.6.0 [1/0] via 10.10.4.2
S       10.10.10.0 [1/0] via 10.10.2.2
S       10.10.20.0 [0/0] via 0.0.0.0, NVI0

     En esta tabla podemos ver la ruta por el interface virtual (NVI0).

   
     Aquí tenemos un display del interface virtual:

NVI0 is up, line protocol is up 
  Hardware is NVI
  Interface is unnumbered. Using address of GigabitEthernet0/0 (10.10.4.1)
  MTU 1514 bytes, BW 56 Kbit/sec, DLY 5000 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation UNKNOWN, loopback not set
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 unknown protocol drops
     0 output buffer failures, 0 output buffers swapped out

     En esta parte del laboratorio vamos a intentar alcanzar el servidor web que se encuentra en 10.10.10.34 desde el equipo con dirección IP 10.10.6.6 pero obteniendo un IP global del pool definido.

     Veamos el resultado a través del debug que hemos habilitado:

*Mar  9 12:42:21.731: %SEC-6-IPACCESSLOGP: list NAT permitted tcp 10.10.6.6(0) -> 10.10.10.34(0), 1 packet  
*Mar  9 12:42:21.731: NAT: creating portlist proto 6 globaladdr 10.10.20.40
*Mar  9 12:42:21.731: NAT: [0] Allocated Port for 10.10.6.6 -> 10.10.20.40: wanted 1935 got 1935
*Mar  9 12:42:21.731: NAT: i: tcp (10.10.6.6, 1935) -> (10.10.10.34, 80) [7747]     
*Mar  9 12:42:21.731: NAT: s=10.10.6.6->10.10.20.40, d=10.10.10.34 [7747]
*Mar  9 12:42:21.731: NAT-FRAG: tcpmss value :0
*Mar  9 12:42:21.731: NAT-NVI: IP route found: s=10.10.20.40, d=10.10.10.34
*Mar  9 12:42:21.731: NAT: i: tcp (10.10.10.34, 80) -> (10.10.20.40, 1935) [0]     
*Mar  9 12:42:21.731: NAT: s=10.10.10.34, d=10.10.20.40->10.10.6.6 [0]
*Mar  9 12:42:21.731: NAT-FRAG: tcpmss value :0
*Mar  9 12:42:21.731: NAT-NVI: IP route found: s=10.10.10.34, d=10.10.6.6

     En la tabla de traducciones de NAT-NVI vemos dos entradas: una para un ping que hemos hecho previamente para comprobar conectividad y otra para el acceso al servidor web:

PruebaNVI#sh ip nat nvi translations 
Pro Source global         Source local          Destin  local         Destin  global
icmp 10.10.20.40:512      10.10.6.6:512         10.10.10.34:512       10.10.10.34:512
tcp 10.10.20.40:1935      10.10.6.6:1935        10.10.10.34:80        10.10.10.34:80




     En resumen el NAT-NVI nos amplia las posibilidades de NAT, pudiendo tener configurado en un mismo router el NAT tradicional para un tráfico y el NVI para otro. Además se puede utilizar en cualquier escenario no sólo en traducciones inter-vrf.

1 comentario:

Nota: solo los miembros de este blog pueden publicar comentarios.