Estructura guía para NAT en Mikrotik

La traducción de direcciones de red, también llamado enmascaramiento de IP o NAT (del inglés Network Address Translation), es un mecanismo utilizado por routers IP para cambiar paquetes entre dos redes que asignan mutuamente direcciones incompatibles. Consiste en convertir, en tiempo real, las direcciones utilizadas en los paquetes transportados. También es necesario editar los paquetes para permitir la operación de protocolos que incluyen información de direcciones dentro de la conversación del protocolo.

Su uso más común es permitir utilizar direcciones privadas (definidas en el RFC 1918) para acceder a Internet. Existen rangos de direcciones privadas que pueden usarse libremente y en la cantidad que se quiera dentro de una red privada. Si el número de direcciones privadas es muy grande puede usarse solo una parte de direcciones públicas para salir a Internet desde la red privada. De esta manera simultáneamente sólo pueden salir a Internet con una dirección IP tantos equipos como direcciones públicas se hayan contratado. Esto es necesario debido al progresivo agotamiento de las direcciones IPv4.

Fuente: Wikipedia

Estandarización de la configuración

Como siempre, en Crenein, buscamos construir configuraciones que sean armónicas, escalables y de amplia aplicación.
Esto nos permite mejorar la productividad a la hora de configurar nuevos equipos y resolver problemas de forma más rápida.

A continuación, dejaremos un script que permite crear una configuración genérica de NAT sobre routers Mikroitk.

La configuración cuenta con cuatro partes.

Aceptación de comunicaciones sin NAT

Para aplicar bien el concepto de NAT es importante traducir lo mínimo e indispensable. Por ejemplo, una comunicación entre dos routers de nuestra misma red debería no ser intervenida por NAT. Que no se aplique NAT a éste tipo de tráfico nos permite mejorar el rendimiento y la seguridad de la red.

/ip firewall address-list
add address=10.0.0.0/8 list=FNM_RedesQueNoEntranAReglas
add address=172.16.0.0/12 list=FNM_RedesQueNoEntranAReglas
add address=192.168.0.0/16 list=FNM_RedesQueNoEntranAReglas
add address=100.64.0.0/10 list=FNM_RedesQueNoEntranAReglas
add address=192.0.0.0/24 list=FNM_RedesQueNoEntranAReglas
add address=203.0.113.0/24 list=FNM_RedesQueNoEntranAReglas
add address=192.0.2.0/24 list=FNM_RedesQueNoEntranAReglas
/ip firewall nat
add action=accept chain=srcnat comment=RedesQueNoEntranAReglas \
dst-address-list=FNM_RedesQueNoEntranAReglas src-address-list=\
FNM_RedesQueNoEntranAReglas
add action=accept chain=dstnat comment=RedesQueNoEntranAReglas \
dst-address-list=FNM_RedesQueNoEntranAReglas src-address-list=\
FNM_RedesQueNoEntranAReglas
add action=accept chain=srcnat comment=FN_RedesPublicasPropias \
src-address-list=FN_RedesPublicasPropias

Definición de proveedores

En el siguiente segmento de configuración, creamos un arreglo de proveedores. Esto permite listar los proveedores a los cuales tenemos que pasarle redes nateadas. Es posible definir un unico proveedor o varios. En simples palabras es nuestra salida a Internet.

:global proveedores {"P1_IZ-Mayorista"; "P2-TECO"}

Pueden copiar ésta linea de código y pegarla directamente en una terminal de Mikrotik y antes de presionar enter, cambiar los valores acorde a su escenario.

Contrucción de las reglas de NAT

Esta parte, construye un set de reglas para cada proveedor que hayamos declarado en el arreglo que creamos anteriormente.

/ip firewall nat
#Jumps destinos especificos
:foreach j in=[$proveedores] do={
add action=jump chain=srcnat comment=("DestinosPor-".$j) \
dst-address-list=("N-DestinosPor-".$j) jump-target=$j
}
#Jumps clientes especificos
:foreach j in=[$proveedores] do={
add action=jump chain=srcnat comment=("ClientesPor-".$j) jump-target=$j \
src-address-list=("N-ClientesPor-".$j)
}
#Jumps redes generales
:foreach j in=[$proveedores] do={
add action=jump chain=srcnat comment=("RedesPor-".$j) jump-target=$j \
src-address-list=("N-RedesPor-".$j)
}
#Jumps redes generales
:foreach j in=[$proveedores] do={
add disabled=yes action=jump chain=srcnat comment=("InterfacesPor-".$j) jump-target=$j \
out-interface=ether1
}
#Reglas para cada proveedor
:foreach j in=[$proveedores] do={
add action=passthrough chain=$j comment=("-------------".$j."-------------")
add action=src-nat chain=$j comment=SMTP disabled=yes dst-port=25,110,465,587,995,143,993 protocol=tcp to-addresses=198.51.100.5
add action=src-nat chain=$j comment=DestinosQueNecesitanPublicaLimpia disabled=yes dst-address-list=N-DestinosQueNecesitanPublicaLimpia to-addresses=198.51.100.5
add action=src-nat chain=$j comment=DestinosQueNecesitanPublicaFija disabled=yes dst-address-list=N-DestinosQueNecesitanPublicaFija to-addresses=198.51.100.5
add action=src-nat chain=$j comment=ClientesConPlayStation disabled=yes src-address-list=N-ClientesConPlayStation to-addresses=198.51.100.5
add action=src-nat chain=$j comment=OrigenesQueNecesitanPublicaLimpia disabled=yes src-address-list=N-OrigenesQueNecesitanPublicaLimpia to-addresses=198.51.100.5
add action=src-nat chain=$j comment=OrigenesConIPPublicaFija disabled=yes src-address-list=N-OrigenesConIPPublicaFija to-addresses=198.51.100.5
add action=src-nat chain=$j comment=NAT_General to-addresses=198.51.100.5-198.51.100.5
}

Luego de aplicar esto, debemos cambiar los to-address de las reglas que usaremos, usando las IPs públicas que les fueron asignadas.

Para el caso de la salida por interfaces, es necesario que configuren la interfaz correcta en out-interface y luego habiliten la regla.

Si quieren aplicar la misma regla de NAT en varias interfaces, por ejemplo en el caso que tengamos Internet y CDNs en interfaces distintas, puede duplicar el jump de interfaces.

Apertura de puertos

Para utilizar mejor las IPs públicas es importante mantenerlas ordenadas. Las aperturas de puertos suelen causar bastante caos en nuestra tabla NAT.
Para este caso, definimos una pública que pasamos a un jump y dentro de él listamos los puertos que son redirigiros. Esto nos da una mejor visual de qué puertos están siendo usados para x IP pública.

/ip firewall nat
add action=jump chain=dstnat comment=AperturaPuertos_198.51.100.30 dst-address=198.51.100.30 in-interface=\
sfp-sfpplus1 jump-target=AperturaPuertos_198.51.100.30
add action=dst-nat chain=AperturaPuertos_198.51.100.30 comment="ISPbrain" dst-port=8728,8729,443 protocol=\
tcp to-addresses=10.220.1.2
add action=dst-nat chain=AperturaPuertos_198.51.100.30 comment="ISPbrain" dst-port=8738,8739,453 protocol=\
tcp to-addresses=10.220.10.254
add action=dst-nat chain=AperturaPuertos_198.51.100.30 dst-port=3478,3479 protocol=udp to-addresses=10.12.87.7 comment="Cliente CosmeFulano"

Conclusión

El objetivo de ésta publicación, es compartir nuestra forma de configurar. Puede haber formas más cómodas o eficientes sin duda, y a lo largo del tiempo iremos actualizando nuestro blog y configuraciones.

Si te gustó éste blog o tenés una duda podes mandar un whatsapp a +5493725409044.

También puede gustarle...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.