// DevOps
MikroTik: devolver el tráfico por la misma puerta de enlace por la que llegó
Publicado el 24.06.2026
Hay un router MikroTik que mira a Internet a través de WAN1. Mientras el gateway sea uno — todo funciona. Cuando aparece un segundo WAN, un túnel VPN con rutas BGP o simplemente prefijos /32 específicos en la tabla main — empieza la clásica situación: la petición llegó por WAN1 pero la respuesta sale por WAN2 o por la VPN. El cliente ve RST o espera al timeout.
Cliente → [WAN1] → MikroTik --dstnat--> 192.168.1.10
↓
Cliente ← [WAN2] ← MikroTik <----------- respuestaEsto es enrutamiento asimétrico. Se manifiesta en dos escenarios distintos, y cada uno requiere su propio enfoque.
Por qué RouterOS hace esto
Cuando necesita enviar un paquete, RouterOS mira la tabla de enrutamiento main y elige la mejor ruta al destino. Si en main hay varias rutas por defecto o BGP ha inyectado sus prefijos — el router legítimamente elegirá otra interfaz. No está obligado a “recordar” por dónde llegó la petición original. Este es el comportamiento normal de un router L3, que en este caso resulta problemático.
Dos escenarios
Escenario 1 — port forwarding (dstnat). La petición que entra por WAN1 se reenvía a un servidor interno mediante dstnat. La respuesta del servidor sale de nuevo por el router, y el router elige la interfaz según la tabla main. Si allí hay una ruta específica hacia la dirección origen — la respuesta no irá por donde llegó la petición.
Escenario 2 — conexiones directas al router. SSH, ICMP, API, Winbox — todo lo dirigido al propio router. La petición llegó por WAN1, el router genera la respuesta y vuelve a mirar en main. Si existe una ruta BGP hacia la dirección origen — la respuesta saldrá por la VPN o por WAN2.
Ambos escenarios se solucionan mediante una tabla de enrutamiento aislada, pero las reglas mangle para cada uno son distintas.
Preparación: tabla de enrutamiento separada
Creamos una tabla aislada con una única ruta — la ruta por defecto a través de WAN1:
/routing table add name=via-wan1 fib
/ip route add \
dst-address=0.0.0.0/0 \
gateway=<WAN1_GATEWAY> \
routing-table=via-wan1Listo. No hace falta añadir nada más a esa tabla.
Reglas mangle
Se necesitan cuatro reglas. El orden es importante — deben ir exactamente en esta secuencia.
Regla 1 — marcar conexiones dstnat
Se dispara en entrada por WAN1 solo para paquetes que pasaron por dstnat. Pone una marca en toda la conexión:
/ip firewall mangle add \
chain=prerouting \
in-interface=<WAN1_INTERFACE> \
connection-nat-state=dstnat \
action=mark-connection \
new-connection-mark=from-wan1-dstnat \
passthrough=yes \
comment="Marcar conexiones dstnat desde WAN1"Regla 2 — routing-mark para conexiones dstnat
Captura todos los paquetes de la conexión dstnat marcada, incluidos los de respuesta desde LAN, y les pone routing-mark:
/ip firewall mangle add \
chain=prerouting \
connection-mark=from-wan1-dstnat \
action=mark-routing \
new-routing-mark=via-wan1 \
passthrough=no \
comment="Encaminar respuestas dstnat por WAN1"Regla 3 — marcar conexiones directas al router
Mismas condiciones que la regla 1, pero para tráfico no-dstnat — SSH, ICMP y todo lo que vaya directamente al router:
/ip firewall mangle add \
chain=prerouting \
in-interface=<WAN1_INTERFACE> \
connection-nat-state=!dstnat \
action=mark-connection \
new-connection-mark=from-wan1 \
passthrough=yes \
comment="Marcar conexiones no dstnat desde WAN1"Regla 4 — routing-mark para respuestas del router
Y aquí un detalle crítico: la cadena output, no prerouting.
/ip firewall mangle add \
chain=output \
connection-mark=from-wan1 \
action=mark-routing \
new-routing-mark=via-wan1 \
passthrough=no \
comment="Encaminar respuestas del router a conexiones desde WAN1 vía WAN1"Por qué la regla 4 va en output y no en prerouting
Esta es la trampa principal. El primer instinto es poner mark-routing en prerouting por analogía con la regla 2. Parece lógico, pero rompe el router.
mark-routing en prerouting afecta la decisión de enrutamiento para el paquete actual. Para paquetes encaminados (forwarded) a través del router esto funciona correctamente. Pero para paquetes dirigidos al propio router, RouterOS también aplica ese routing-mark. El router busca su propia dirección (94.102.124.79) en la tabla via-wan1, encuentra solo la ruta por defecto 0.0.0.0/0 → <WAN1_GATEWAY> e intenta reenviar el paquete hacia el gateway en lugar de aceptarlo localmente. SSH cae instantáneamente, el router queda inaccesible.
# Cómo se ve el error:
# Paquete SSH entrante → mark-connection from-wan1 → mark-routing via-wan1 →
# RouterOS busca 94.102.124.79 en via-wan1 →
# encuentra solo 0.0.0.0/0 → gateway →
# lo reenvía al proveedor en lugar de procesarlo localmente →
# la conexión caeLa cadena output procesa únicamente los paquetes que el propio router genera en respuesta. Es ahí donde hay que poner el routing-mark — cuando el router ya ha aceptado el paquete y está formando la respuesta.
Cómo funciona internamente
Conexión dstnat (port forwarding):
- El paquete entra por WAN1
- Connection tracking ve que la conexión pasó por dstnat
- Regla 1:
connection-mark=from-wan1-dstnat - Regla 2:
routing-mark=via-wan1 - dstnat cambia la dst a 192.168.1.10
- El servidor recibe la petición y forma la respuesta
- La respuesta entra por la interfaz LAN → prerouting
- Regla 2 se vuelve a disparar por la marca de la conexión →
routing-mark=via-wan1 - La respuesta sale por WAN1
Conexión directa al router (SSH, ping):
- El paquete entra por WAN1
- Regla 3:
connection-mark=from-wan1 - El router acepta el paquete (input chain)
- El router genera la respuesta (output chain)
- Regla 4:
routing-mark=via-wan1 - La respuesta sale por WAN1, evitando rutas específicas en
main
Aspectos a tener en cuenta
Fasttrack. Si está configurado fasttrack (connection-state=established,related), éste elude mangle para conexiones establecidas. En configuraciones típicas fasttrack viene activado por defecto. La regla con passthrough=no debe ir antes de fasttrack, de lo contrario las conexiones tras el handshake pasarán de largo.
BGP. En entornos BGP el problema se nota aún más — BGP puede inyectar miles de prefijos específicos, y para cualquiera de ellos la tabla main elegirá la interfaz equivocada. La tabla aislada via-wan1 no reacciona a eso — ahí solo hay la ruta por defecto.
Varios WAN. El esquema es escalable: para WAN2 creas la tabla via-wan2, la ruta por defecto vía el segundo gateway, y cuatro reglas análogas. Las tablas no se interfieren entre sí.
Comprobación
Contadores de reglas en mangle — se puede ver que las reglas realmente se disparan:
/ip firewall mangle print statsConexiones activas con las marcas necesarias:
/ip firewall connection print where connection-mark=from-wan1-dstnat
/ip firewall connection print where connection-mark=from-wan1Ruta en la tabla aislada:
/ip route print where routing-table=via-wan1Resumen
| Regla | Cadena | Qué hace |
|---|---|---|
| mark-connection (dstnat) | prerouting | Marca conexiones con port-forwarding desde WAN1 |
| mark-routing (dstnat) | prerouting | Encamina respuestas dstnat por via-wan1 |
| mark-connection (!dstnat) | prerouting | Marca conexiones directas al router desde WAN1 |
| mark-routing (!dstnat) | output | Encamina las respuestas del router por via-wan1 |
La tabla de enrutamiento es la misma para ambos escenarios. Las reglas para dstnat y las conexiones directas funcionan de forma independiente, sin interferir entre sí ni afectar al resto del tráfico.
// Reviews
Reseñas relacionadas
Muchísimas gracias a Mijaíl por su trabajo, estoy muy satisfecho con el resultado. Agradezco especialmente las recomendaciones durante la configuración: a partir de un pliego de requisitos bastante confuso por mi parte (y yo entiendo poco de servidores), Mijaíl, con preguntas aclaratorias y propuestas, formuló una comprensión clara de qué tareas resolvería la configuración final y cómo organizarlo todo de la mejor manera. ¡Lo recomiendo!
Muchísimas gracias a Mijaíl por el trabajo, estoy muy satisfecho con el resultado. Agradezco especialmente las recomendaciones durante el proceso de configuración; a partir de mi especificación bastante confusa (y yo sé …
Configuración de Mikrotik hAP. Configuraré su router Wi‑Fi Mikrotik.
21.07.2025 · ★ 5/5
Excelente profesional, experto y persona maravillosa. En una hora nos arregló lo que llevábamos días intentando solucionar. Estoy seguro de que no será la primera vez que recurramos a su excepcional profesionalismo.
Excelente especialista, un experto con mucha experiencia y una persona maravillosa. En una hora nos arregló aquello por lo que llevábamos días rompiéndonos la cabeza! Estoy seguro de que no será la primera vez que …
MikroTik hAP: configuración del router. Configuraré su router MikroTik Wi‑Fi.
28.05.2025 · ★ 5/5
¡Un enfoque profesional!
¡Enfoque profesional al asunto!
Configuración del router Mikrotik hAP. Configuraré su router Mikrotik Wi-Fi.
31.03.2025 · ★ 5/5
Sabe, puede, hace. Todo rápido y al grano; quedé satisfecho con la colaboración.
Sabe, puede, hace. Todo de forma rápida y al grano, quedé satisfecho con la colaboración.
Configuración de Mikrotik hAP. Configuraré el router Wi-Fi Mikrotik para usted.
14.03.2025 · ★ 5/5
¡Gracias! Configuraron el router según mi especificación técnica, con una explicación completa de lo que estamos haciendo.
¡Gracias! Configuraron el router según mi especificación técnica, con una explicación completa de lo que hacemos
Configuración del router MikroTik hAP. Configuraré un router MikroTik Wi‑Fi para usted.
09.03.2025 · ★ 5/5
¡Todo genial! ¡Gracias! Lo recomiendo
¡Todo genial! ¡Gracias! Lo recomiendo
// Contact
¿Necesitas ayuda?
Escríbeme y te ayudaré a resolver el problema
Respondo en un día laborable (03:00-13:00 GMT)
Или оставьте заявку здесь:
// Related