Pruebas de NAT en layer 2

Fecha: 3 de octubre del 2018

 

Escenario

 

Este escenario se ideó a partir de una conexión de Fibercorp y la necesidad de conectar diferentes equipos utilizando la misma conexión.

Las conexiones de Fibercorp se venden con IP fija pero en realidad es con IP dinámica y fijada mediante la MAC (reserva DHCP), también

se ofrece con varias direcciones IP, siempre vi las conexiones con un rango /29, pero todas se utilizan “nateando” en un único router o

firewall, por lo que se utiliza una sola MAC para varias direcciones IP, esto es técnicamente correcto, pero la necesidad de tener dos

equipos diferentes fuerza a que tengamos dos direcciones MAC para mostrarle al proveedor (que acepta una), por lo que necesitamos

engañarlo de alguna manera y eso es con NAT de capa 2.

 

 

Lo que realizamos en este lab es enmascarar la dirección MAC de un equipo con otra ya aprendida por el ISP, algo así como el MAC clone

pero utilizando dos IP y dos equipos diferentes en vez de un router solo.

 

Estas pruebas se realizaron con un equipo Mikrotik, todavía no encontré un equipo Cisco que me permita hacerlo.

 

Verificación preliminar:

 

Router-ISP#sh arp

Protocol  Address          Age (min)  Hardware Addr   Type    Interface

Internet  200.0.0.1               -          000d.658f.85ee   ARPA   FastEthernet0/0

Internet  200.0.0.2               0          001b.387e.f171 ARPA   FastEthernet0/0

Internet  200.0.0.3               0          001b.38fe.8ac7  ARPA   FastEthernet0/0

Router-ISP#

 

Verificación de los puertos en el bridge del equipo Mikrotik:

 

 

Se crearon las reglas de MAC NAT:

 

 

Se forzó la tabla ARP del router que simula el ISP para que sólo vea una MAC:

 

Esto también podría implementarse en un switch con port-security maximum 1.

 

Router-ISP#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

Router-ISP(config)#arp 200.0.0.3 001b.387e.f171 arpa

Router-ISP(config)#end

Router-ISP#

 

Verificación:

 

Router-ISP#sh arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  200.0.0.1               -            000d.658f.85ee  ARPA   FastEthernet0/0

Internet  200.0.0.2               0           001b.387e.f171  ARPA   FastEthernet0/0

Internet  200.0.0.3               -            001b.387e.f171  ARPA

Router-ISP#

 

Router-ISP#ping 200.0.0.3

 

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 200.0.0.3, timeout is 2 seconds:

.!!!!

Success rate is 80 percent (4/5), round-trip min/avg/max = 1/1/4 ms

Router-ISP#

 

Verificación en CPE (200.0.0.2):

 

Se utilizaron PCs en lugar de routers para poder realizar capturas en Wireshark, podemos ver que en la tabla

ARP la MAC es la real y no la nateada, ya que solamente tenemos que engañar al router del ISP.

 

C:\>arp -a

 

Interfaz: 200.0.0.2 --- 0xb

  Dirección de Internet      Dirección física          Tipo

  200.0.0.1                            00-0d-65-8f-85-ee   dinámico

  200.0.0.3                           00-1b-38-fe-8a-c7    dinámico

  255.255.255.255              ff-ff-ff-ff-ff-ff              estático

 

C:\>

 

Pruebas con el router sin el ARP estático:

 

Quitamos la entrada estática en el router y permitimos la resolución ARP para intentar natear las tramas

ARP, debiendo traducir no solamente la MAC de origen sino el payload.

 

Router-ISP#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

Router-ISP(config)#no arp 200.0.0.3 001b.387e.f171 arpa

Router-ISP(config)#end

Router-ISP#

 

Verificación:

 

Router-ISP#sh arp

Protocol  Address          Age (min)  Hardware Addr     Type    Interface

Internet  200.0.0.1               -            000d.658f.85ee   ARPA   FastEthernet0/0

Internet  200.0.0.2               0           001b.387e.f171  ARPA   FastEthernet0/0

Internet  200.0.0.3               0           001b.38fe.8ac7   ARPA   FastEthernet0/0

Router-ISP#

 

Creamos una regla en el Mikrotik:

 

El argumento dst-mac-address=00:0D:65:8F:85:EE indica que sólo las respuestas al router ISP deberán ser

traducidas, la conversación ARP 200.0.0.2 y 200.0.0.3 no se traduce (natea).

 

/interface bridge nat

add action=arp-reply arp-dst-address=200.0.0.1/32 arp-opcode=reply \

    arp-src-address=200.0.0.3/32 chain=dstnat comment="" disabled=no \

    dst-mac-address=00:0D:65:8F:85:EE/FF:FF:FF:FF:FF:FF in-interface=ether3 \

    mac-protocol=arp src-mac-address=00:1B:38:FE:8A:C7/FF:FF:FF:FF:FF:FF \

    to-arp-reply-mac-address=00:1B:38:7E:F1:71

    |

    (según Mikrotik este argumento traduce la MAC de origen y el payload)

 

Fuente: https://wiki.mikrotik.com/wiki/Manual:Interface/Bridge#Bridge_NAT

 

Podemos ver que la regla matchea pero no aplica el NAT de la MAC origen y payload configurado en Action.

 

 

Router-ISP#debug ip arp

ARP packet debugging is on

Router-ISP#

 

*Mar  1 00:37:57.899: IP ARP: rcvd rep src 200.0.0.3 001b.38fe.8ac7, dst 200.0.0.1 FastEthernet0/0

*Mar  1 00:37:57.899: IP ARP: creating entry for IP address: 200.0.0.3, hw: 001b.38fe.8ac7

                                                                                                                                          |

Router-ISP#                                                                                                                     (no se traduce)

 

 

Al no poder lograr la traducción del payload ARP, y como había utilizado un Mikrotik viejo, para ganar tiempo realicé

el escenario nuevamente en un equipo con la versón actualizada a 6.43 (la última), y con esta versión el MAC NAT no

funcionó en absoluto, por lo que volví a insistir con el equipo viejo sin obtener resultados.

 

Por lo que el escenario definitivo queda con el ARP estático en el router ISP.

 

Configuración empleada:

 

En router Mikrotik:

 

/interface bridge nat

add action=dst-nat chain=dstnat comment="" disabled=no dst-address=\

    200.0.0.3/32 dst-mac-address=00:1B:38:7E:F1:71/FF:FF:FF:FF:FF:FF \

    in-interface=ether1 mac-protocol=ip src-address=200.0.0.1/32 \

    to-dst-mac-address=00:1B:38:FE:8A:C7

add action=src-nat chain=srcnat comment="" disabled=no dst-address=\

    200.0.0.1/32 mac-protocol=ip out-interface=ether1 src-address=\

    200.0.0.3/32 src-mac-address=00:1B:38:FE:8A:C7/FF:FF:FF:FF:FF:FF \

    to-src-mac-address=00:1B:38:7E:F1:71

 

En router ISP:

 

Router-ISP#sh runn (sólo lo mas relevante)

Building configuration...

 

Current configuration : 893 bytes

!

hostname Router-ISP

!

interface FastEthernet0/0

 ip address 200.0.0.1 255.255.255.248

!

arp 200.0.0.3 001b.387e.f171 ARPA

!

!

end

 

Router-ISP#

 

 

 

(2018) The kingdom of mutant frames

Rosario, Argentina