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).
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.
Es genial, como no he descubierto esto antes !!!!!
ResponderEliminar