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