El enrutamiento es el proceso de encontrar la ruta óptima para la transmisión de paquetes en redes TCP / IP. Cualquier dispositivo conectado a una red IPv4 contiene un proceso y tablas de enrutamiento.
Este artículo no es un CÓMO, describe el enrutamiento estático en RouterOS como un ejemplo, omití intencionalmente el resto de las configuraciones (por ejemplo, srcnat para acceder a Internet), por lo que comprender este material requiere un cierto nivel de conocimiento de redes y RouterOS.
Conmutación y enrutamiento

La conmutación es el proceso de intercambio de paquetes dentro de un segmento de capa 2 (Ethernet, ppp, ...). Si el dispositivo ve que el destinatario del paquete se encuentra en la misma subred de Ethernet que él, reconoce la dirección mac mediante el protocolo arp y envía el paquete directamente, sin pasar por el enrutador. Una conexión ppp (punto a punto) puede tener solo dos miembros y el paquete siempre se envía a la misma dirección 0xff.
El enrutamiento es el proceso de transmisión de paquetes entre segmentos de capa 2. Si el dispositivo desea enviar un paquete, cuyo destinatario está fuera del segmento de Ethernet, mira su tabla de enrutamiento y pasa el paquete a una puerta de enlace que sabe dónde enviar el paquete más adelante (o tal vez no lo sabe, el remitente original del paquete no lo sabe).
La forma más fácil de considerar un enrutador es como un dispositivo conectado a dos o más segmentos de Capa 2 y capaz de transferir paquetes entre ellos, determinando la ruta óptima desde la tabla de enrutamiento.
Si todo está claro para ti o si ya lo sabías, sigue leyendo. Recomiendo encarecidamente que otros lean un artículo pequeño pero muy completo.
Enrutamiento en RouterOS y PacketFlow
Casi toda la funcionalidad relacionada con el enrutamiento estático está en el paquete del sistema . El paquete de enrutamiento agrega soporte para algoritmos de enrutamiento dinámico (RIP, OSPF, BGP, MME), filtros de enrutamiento y BFD.
El menú principal para configurar el enrutamiento: [IP]->[Route]
. Los esquemas complejos pueden requerir el etiquetado preliminar de los paquetes con una etiqueta de enrutamiento en: [IP]->[Firewall]->[Mangle]
(cadenas PREROUTING
y OUTPUT
).
Hay tres lugares en PacketFlow donde se toman decisiones sobre el enrutamiento de paquetes IP:

- Enrutamiento de paquetes recibidos por el enrutador. En esta etapa, se decide que el paquete irá al proceso local o se enviará más a la red. Los paquetes de tránsito reciben una interfaz de salida
- Enrutamiento de paquetes salientes locales. Los paquetes salientes reciben una interfaz de salida
- Un paso de enrutamiento adicional para los paquetes salientes le permite cambiar la decisión de enrutamiento en
[Output|Mangle]
- La ruta del paquete en los bloques 1, 2 depende de las reglas en
[IP]->[Route]
- La ruta del paquete en los pasos 1, 2 y 3 depende de las reglas en
[IP]->[Route]->[Rules]
- La ruta del paquete en los bloques 1, 3 puede verse afectada usando
[IP]->[Firewall]->[Mangle]
RIB, FIB, caché de enrutamiento

Base de información de enrutamiento
La base en la que se recopilan las rutas de los protocolos de enrutamiento dinámico, rutas de ppp y dhcp, rutas estáticas y conectadas. Esta base de datos contiene todas las rutas excepto las filtradas por el administrador.
Por convención , podemos suponer que [IP]->[Route]
muestra RIB.
Base de información de reenvío

La base donde van las mejores rutas desde RIB. Todas las rutas en la FIB están activas y se utilizan para reenviar paquetes. Si la ruta se vuelve inactiva (desactivada por el administrador (sistema), o la interfaz a través de la cual se debe enviar el paquete está inactiva), la ruta se elimina de la FIB.
Para tomar una decisión sobre el enrutamiento, se utilizan los siguientes datos del paquete IP en la tabla FIB:
- Dirección de origen
- Dirección de destino
- Interfaz fuente
- Marca de enrutamiento
- ToS (DSCP)
Entrar en el paquete FIB pasa por las siguientes etapas:
- ¿El paquete está diseñado para el proceso del enrutador local?
- ¿El paquete cae bajo el sistema PBR o las reglas del usuario?
- Si es así, el paquete se envía a la tabla de enrutamiento especificada.
- El paquete se envía a la tabla principal.
Por convención , podemos suponer que [IP]->[Route Active=yes]
muestra FIB.
Enrutamiento de caché
El mecanismo para el almacenamiento en caché de rutas. El enrutador recuerda a dónde se enviaron los paquetes, y si hay otros similares (presumiblemente de la misma conexión), los inicia a lo largo de la misma ruta, sin registrar el FIB. La caché de ruta se borra periódicamente.
Para los administradores, RouterOS no tenía los medios para ver y administrar el caché de enrutamiento, pero con él puede deshabilitarlo en [IP]->[Settings]
.
Este mecanismo se ha eliminado del núcleo Linux 3.6, pero el núcleo 3.3.5 todavía se utiliza en RouterOS, posiblemente el enrutamiento de caché es una de las razones.
Cuadro de diálogo Agregar ruta
[IP]->[Route]->[+]

- La subred para la que desea crear una ruta (valor predeterminado: 0.0.0.0/0)
- Puerta de enlace IP o interfaz a la que se enviará el paquete (puede haber varias, consulte ECMP a continuación)
- Comprobación de disponibilidad de puerta de enlace
- Tipo de registro
- Distancia (métrica) para la ruta
- Tabla de enrutamiento
- IP para paquetes salientes locales a través de esta ruta
- El propósito de Scope y Target Scope está escrito al final del artículo.
Banderas de ruta

- X: el administrador
disabled=yes
ruta ( disabled=yes
) - A - La ruta se usa para transmitir paquetes.
- D - Ruta agregada dinámicamente (BGP, OSPF, RIP, MME, PPP, DHCP, Conectado)
- C - La subred está conectada directamente al enrutador
- S - Ruta estática
- r, b, o, m: la ruta se agregó mediante uno de los protocolos de enrutamiento dinámico
- B, U, P: ruta de filtrado (descarta paquetes en lugar de transmitir)
¿Qué especificar en la puerta de enlace: dirección IP o interfaz?
El sistema le permite especificarlos a ambos, mientras que no jura ni da pistas si hizo algo mal.
Dirección IP
La dirección de la puerta de enlace debe ser accesible a través de Layer2. Para Ethernet, esto significa que el enrutador debe tener una dirección IP de la misma subred en una de las interfaces activas, para ppp, que la dirección de la puerta de enlace aparece en una de las interfaces activas como la dirección de subred.
Si no se cumple la condición de disponibilidad para Layer2, la ruta se considera inactiva y no cae en la FIB.
Interfaz
Todo es más complicado y el comportamiento del enrutador depende del tipo de interfaz:
- PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *) la conexión asume que solo hay dos participantes y el paquete siempre se enviará a la puerta de enlace para la transmisión, si la puerta de enlace detecta que es el propio destinatario, transferirá el paquete a su proceso local.

- Ethernet asume que hay muchos participantes y enviará solicitudes a la interfaz arp con la dirección del receptor de paquetes, este es el comportamiento esperado y bastante normal para las rutas conectadas.
Pero cuando intenta utilizar la interfaz como una ruta para una subred remota, obtiene la siguiente situación: la ruta está activa, el ping pasa a la puerta de enlace, pero no llega al destinatario desde la subred especificada. Si observa la interfaz a través de un sniffer, verá solicitudes arp con direcciones de una subred remota.


Intente especificar la dirección IP como puerta de enlace siempre que sea posible. Las excepciones son las rutas conectadas (creadas automáticamente) y las interfaces PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *).
OpenVPN no contiene un encabezado PPP, pero puede usar el nombre de la interfaz OpenVPN para crear la ruta.
Ruta más específica
La regla básica de enrutamiento. Una ruta que describe una subred más pequeña (con la máscara de subred más grande) tiene una mayor prioridad al decidir el enrutamiento de paquetes. La posición de las entradas en la tabla de enrutamiento no está relacionada con la selección: la regla básica es más específica.

Todas las rutas del esquema especificado están activas (ubicadas en la FIB), porque apuntan a diferentes subredes y no entren en conflicto entre sí.
Si una de las puertas de enlace no está disponible, la ruta asociada se considerará inactiva (eliminada de la FIB) y se buscarán paquetes de las rutas restantes.
Una ruta con una subred de 0.0.0.0/0 a veces tiene un significado especial y se denomina "Ruta predeterminada" o "puerta de enlace de último recurso". De hecho, no hay nada mágico en él y simplemente incluye todas las direcciones IPv4 posibles, pero estos nombres describen bien su propósito: indica una puerta de enlace donde reenviar paquetes para los que no hay otras rutas más precisas.
La máscara de subred máxima posible para IPv4 es / 32; esta ruta apunta a un host específico y se puede usar en la tabla de enrutamiento.
Comprender la ruta más específica es fundamental para cualquier dispositivo TCP / IP.
Distancia
Las distancias (o métricas) son necesarias para el filtrado administrativo de rutas a una subred accesible a través de varias puertas de enlace. Una ruta con una métrica más baja se considera una prioridad y estará en la FIB. Si una ruta con una métrica más baja deja de estar activa, entonces en la FIB será reemplazada por una ruta con una métrica más alta.

Si hay varias rutas a la misma subred con la misma métrica, el enrutador agregará solo una de ellas a la tabla FIB, guiado por su lógica interna.
La métrica puede tomar un valor de 0 a 255:

- 0: métrica para rutas conectadas. El administrador no puede establecer la distancia 0
- 1-254: métricas disponibles para el administrador para configurar rutas. Las métricas con un valor más bajo tienen prioridad.
- 255 - Métrica disponible para el administrador para configurar rutas. A diferencia de 1-254, una ruta con una métrica de 255 siempre permanece inactiva y no cae en la FIB
- Métricas especiales. Las rutas recibidas de los protocolos de enrutamiento dinámico tienen valores métricos estándar
Comprobar puerta de enlace
Comprobar puerta de enlace: extensión MikroTik RoutesOS para verificar la disponibilidad de la puerta de enlace a través de icmp o arp. Una vez cada 10 segundos (no se puede cambiar), se envía una solicitud a la puerta de enlace, si la respuesta no llega dos veces, la ruta se considera no disponible y se elimina de la FIB. Si la pasarela de verificación ha deshabilitado la ruta de verificación, continúa y la ruta se activa nuevamente después de una verificación exitosa.

Comprobar puerta de enlace deshabilita la entrada en la que está configurada y todas las demás entradas (en todas las tablas de enrutamiento y rutas ecmp) con la puerta de enlace especificada.
En general, comprobar la puerta de enlace funciona bien si no hay ningún problema con la pérdida de paquetes en la puerta de enlace. Check Gateway no sabe qué sucede con la comunicación fuera de la puerta de enlace comprobada, para esto se necesitan herramientas adicionales: scripts, enrutamiento recursivo, protocolos de enrutamiento dinámico.
La mayoría de las VPN y los protocolos de túnel contienen herramientas integradas para verificar la actividad de conexión, lo que permite verificar las puertas de enlace para ellos es una carga adicional (pero muy pequeña) en la red y el rendimiento del dispositivo.
Rutas de ECMP
Ruta múltiple de igual costo: envío de paquetes al destinatario utilizando varias puertas de enlace al mismo tiempo con el algoritmo Round Robin.
El administrador crea una ruta ECMP especificando múltiples puertas de enlace para una subred (o automática, si hay dos rutas equivalentes OSPF).

El ECMP se usa para equilibrar la carga entre dos canales, en teoría, si hay dos canales en una ruta ecmp, entonces, para cada paquete, el canal saliente debe ser diferente. Pero el mecanismo de enrutamiento de caché envía paquetes desde la conexión a lo largo de la ruta a la que fue el primer paquete, como resultado, obtenemos una especie de equilibrio de carga por conexión.
Si deshabilita la caché de enrutamiento, los paquetes en la ruta ECMP se dividirán correctamente, pero hay un problema con NAT. La regla NAT procesa solo el primer paquete de la conexión (el resto se procesa automáticamente) y la situación es que los paquetes con una dirección de origen van desde diferentes interfaces.

Comprobar puerta de enlace (error RouterOS) no funciona en rutas ECMP. Pero puede evitar esta limitación si crea rutas adicionales para la verificación, lo que deshabilitará las entradas en ECMP.
Filtrado de enrutamiento
La opción Tipo determina qué hacer con el paquete:
- unicast: enviar a la puerta de enlace especificada (interfaz)
- agujero negro - soltar el paquete
- prohibir, inalcanzable: descarte el paquete y envíe un mensaje icmp al remitente
El filtrado generalmente se usa cuando necesita asegurar el envío de paquetes de manera incorrecta, por supuesto, puede filtrar esto a través de un firewall.
Un par de ejemplos
Para arreglar cosas básicas sobre el enrutamiento.
Enrutador casero típico

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1
- Ruta estática a 0.0.0.0/0 (ruta predeterminada)
- Ruta conectada en la interfaz con el proveedor
- Ruta conectada en la interfaz LAN
Enrutador casero PPPoE típico

- Ruta estática a ruta predeterminada, agregada automáticamente desde esto se indica en las propiedades de conexión
- Ruta conectada para conexión PPP
- Ruta conectada en la interfaz LAN
Enrutador doméstico típico con dos proveedores y redundancia

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
- Ruta estática a la ruta predeterminada a través del primer proveedor con métrica 1 y verificar la disponibilidad de la puerta de enlace
- Ruta estática a ruta predeterminada a través del segundo proveedor con métrica 2
- Rutas conectadas
El tráfico a 0.0.0.0/0 pasa por 10.10.10.1, mientras esta puerta de enlace está disponible, de lo contrario cambia a 10.20.20.1
Tal esquema puede considerarse reserva de canal, pero no está exento de inconvenientes. Si se produce una interrupción fuera de la puerta de enlace del proveedor (por ejemplo, dentro de la red del operador), su enrutador no lo sabrá y seguirá considerando la ruta activa.
Enrutador doméstico típico con dos proveedores, redundancia y ECMP

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1,10.20.20.1 distance=1
- Rutas estáticas para verificar chack gateway
- Ruta ECMP
- Rutas conectadas
Rutas para verificar el azul (el color de las rutas inactivas), pero esto no interfiere con el funcionamiento de la puerta de enlace de verificación. En la versión actual (6.44) RoS, se da prioridad automática a la ruta ECMP, pero es mejor agregar rutas de prueba a otras tablas de enrutamiento (opción routing-mark
)
No habrá aumento de velocidad en Speedtest y otros sitios similares (ECMP divide el tráfico por conexiones, no por paquetes), pero las aplicaciones p2p deberían cargarse más rápido.
Filtrando a través del enrutamiento

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 add dst-address=192.168.200.0/24 gateway=10.30.30.1 distance=1 add dst-address=192.168.200.0/24 gateway=10.10.10.1 distance=2 type=blackhole
- Ruta estática a ruta predeterminada
- Ruta estática a 192.168.200.0/24 a través del túnel ipip
- Prohibir la ruta estática a 192.168.200.0/24 a través del enrutador del proveedor
Una opción de filtrado en la que el tráfico del túnel no va al enrutador del proveedor cuando la interfaz ipip está desactivada. Tales esquemas rara vez se requieren, porque Es posible implementar el bloqueo a través del firewall.
Bucle de enrutamiento
Un bucle de enrutamiento es una situación en la que un paquete se ejecuta entre enrutadores antes de que ttl caduque. Por lo general, es una consecuencia de un error de configuración, en redes grandes se trata mediante la implementación de protocolos de enrutamiento dinámico, en redes pequeñas, con cuidado.
Se parece a esto:

Ejemplo (más simple) de cómo obtener un resultado similar:

El ejemplo del bucle de enrutamiento no tiene un uso práctico, pero muestra que los enrutadores no tienen idea de la tabla de enrutamiento de sus vecinos.
Enrutamiento base de políticas y tablas de enrutamiento adicionales
Al elegir una ruta, el enrutador usa solo un campo del encabezado del paquete (Dirección Dst.): Esta es la ruta básica. El enrutamiento basado en otras condiciones, como la dirección de origen, el tipo de tráfico (ToS), el equilibrio sin ECMP, se refiere al enrutamiento base de políticas (PBR) y utiliza tablas de enrutamiento adicionales.

Una ruta más específica es la regla básica para elegir una ruta dentro de una tabla de enrutamiento.
Por defecto, todas las reglas de enrutamiento se agregan a la tabla principal. Un administrador puede crear un número arbitrario de tablas de enrutamiento adicionales y enrutarles paquetes. Las reglas en diferentes tablas no entran en conflicto entre sí. Si el paquete no encuentra una regla adecuada en la tabla especificada, irá a la tabla principal.
Ejemplo de distribución a través de Firewall:

- 192.168.100.10 -> 8.8.8.8
- El tráfico de 192.168.100.10 recibe la etiqueta via-isp1 en
[Prerouting|Mangle]
- En la etapa de enrutamiento, en la tabla via-isp1, se busca una ruta hasta 8.8.8.8
- Se encuentra la ruta, el tráfico se envía a la puerta de enlace 10.10.10.1
- 192.168.200.20 -> 8.8.8.8
- El tráfico de 192.168.200.20 recibe la etiqueta via-isp2 en
[Prerouting|Mangle]
- En la etapa de enrutamiento, la tabla via-isp2 busca una ruta de hasta 8.8.8.8
- Se encuentra la ruta, el tráfico se envía a la puerta de enlace 10.20.20.1
- Si una de las puertas de enlace (10.10.10.1 o 10.20.20.1) no está disponible, entonces el paquete irá a la tabla principal y buscará una ruta adecuada allí
Problemas terminológicos
RouterOS tiene ciertos problemas de terminología.
Al trabajar con reglas en [IP]->[Routes]
se indica la tabla de enrutamiento, aunque dice que la etiqueta:

En [IP]->[Routes]->[Rule]
todo es correcto, en la etiqueta de condición en la acción de la tabla:

Cómo enviar un paquete a una tabla de enrutamiento específica
RouterOS proporciona varias herramientas:
- Reglas en
[IP]->[Routes]->[Rules]
- Etiquetas de ruta (
action=mark-routing
) en [IP]->[Firewall]->[Mangle]
- VRF
Reglas [IP]->[Route]->[Rules]
Las reglas se procesan secuencialmente, si el paquete coincide con las condiciones de la regla, no va más allá.
Las reglas de enrutamiento le permiten ampliar las capacidades de enrutamiento, confiando no solo en la dirección del destinatario, sino también en la dirección de origen y la interfaz a la que se recibió el paquete.

Las reglas consisten en condiciones y acciones:
- Condiciones. Prácticamente repiten la lista de signos por los cuales se verifica el paquete en la FIB; solo falta ToS.
- Acciones
- buscar: enviar un paquete a una mesa
- buscar solo en la tabla: bloquee el paquete en la tabla; si no se encuentra la ruta, el paquete no irá a la tabla principal
- soltar - soltar el paquete
- inalcanzable: descarte el paquete de notificación del remitente
En la FIB, el tráfico a los procesos locales se procesa sin pasar por las reglas [IP]->[Route]->[Rules]
:

Marcado [IP]->[Firewall]->[Mangle]
Las etiquetas de ruta le permiten configurar la puerta de enlace para el paquete utilizando casi cualquier condición de firewall:

Prácticamente, porque no todos tienen sentido, y algunos pueden funcionar de manera inestable.

Hay dos formas de marcar un paquete:
- Establecer marca de enrutamiento inmediatamente
- Primero establezca la marca de conexión , luego basándose en la marca de conexión establezca la marca de enrutamiento
En un artículo sobre firewall, escribí que la segunda opción es preferible porque reduce la carga en la CPU, en el caso de marcar rutas, esto no es del todo cierto. Estos métodos de marcado no siempre son equivalentes y generalmente se usan para resolver varios problemas.
Ejemplos de uso
Pasamos a ejemplos de uso de enrutamiento de base de políticas, es mucho más fácil mostrarles por qué se necesita todo esto.
MultiWAN y tráfico saliente de respuesta (salida)
Un problema común con la configuración de MultiWAN: Mikrotik es accesible desde Internet solo a través del proveedor "activo".

No importa al enrutador a qué IP llegó la solicitud; al generar una respuesta, buscará una ruta en la tabla de enrutamiento, donde la ruta a través de isp1 está activa. Además, dicho paquete probablemente se filtrará en el camino hacia el destinatario.
Otro punto interesante. Si la fuente "simple" nat está configurada en la interfaz ether1: /ip fi nat add out-interface=ether1 action=masquerade
paquete irá a la red con src. address = 10.10.10.100, lo que agravará aún más la situación.
Hay varias formas de solucionar el problema, pero cualquiera de ellas requerirá tablas de enrutamiento adicionales:

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping distance=1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping distance=2 add dst-address=0.0.0.0/0 gateway=10.10.10.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 routing-mark=over-isp2
Uso de [IP]->[Route]->[Rules]
Especifique la tabla de enrutamiento que se utilizará para los paquetes con la IP de origen especificada.

/ip route rule add src-address=10.10.10.100/32 action=lookup-only-in-table table=over-isp1 add src-address=10.20.20.200/32 action=lookup-only-in-table table=over-isp2
Puede usar action=lookup
, pero para el tráfico saliente local, esta opción excluye completamente las conexiones de la interfaz incorrecta.
- El sistema genera un paquete de respuesta con Src. Dirección: 10.20.20.200
- En la etapa de Decisión de enrutamiento (2),
[IP]->[Routes]->[Rules]
se verifica y el paquete se envía a la tabla de enrutamiento sobre-isp2 - De acuerdo con la tabla de enrutamiento, el paquete debe enviarse a la puerta de enlace 10.20.20.1 a través de la interfaz ether2

Este método no requiere un Rastreador de conexiones que funcione, a diferencia del uso de la tabla Mangle.
Uso de [IP]->[Firewall]->[Mangle]
La conexión comienza con el paquete entrante, por lo que lo marcamos ( action=mark-connection
), para los paquetes salientes de la conexión marcada establecemos la etiqueta de ruta ( action=mark-routing
).

/ip firewall mangle # add chain=input in-interface=ether1 connection-state=new action=mark-connection new-connection-mark=from-isp1 add chain=input in-interface=ether2 connection-state=new action=mark-connection new-connection-mark=from-isp2 # add chain=output connection-mark=from-isp1 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=output connection-mark=from-isp2 action=mark-routing new-routing-mark=over-isp2 passthrough=no
ip, dst-address
.
- ether2 .
[INPUT|Mangle]
from-isp2 - Src. Address: 10.20.20.200
- Routing Decision(2) 10.20.20.1 ether1.
[OUTPUT|Filter]
[OUTPUT|Mangle]
from-isp2 over-isp2- Routing Adjusment(3)
- 10.20.20.1 ether2

MultiWAN dst-nat
, ( web) .
/ip firewall nat add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether1 action=dst-nat to-address=192.168.100.100 add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether2 action=dst-nat to-address=192.168.100.100
, Firewall Mangle, :

/ip firewall mangle add chain=prerouting connection-state=new in-interface=ether1 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp1 add chain=prerouting connection-state=new in-interface=ether2 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp2 add chain=prerouting connection-mark=web-input-isp1 in-interface=ether3 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting connection-mark=web-input-isp2 in-interface=ether3 action=mark-routing new-routing-mark=over-isp2 passthrough=no

NAT, .
MultiWAN
PBR vpn ( SSTP) .

:
/ip route add dst-address=0.0.0.0/0 gateway=192.168.100.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 routing-mark=over-isp3 add dst-address=0.0.0.0/0 gateway=192.168.100.1 distance=1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 distance=2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 distance=3
:
/ip firewall mangle add chain=output dst-address=10.10.10.100 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp1 passtrough=no add chain=output dst-address=10.10.10.101 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp2 passtrough=no add chain=output dst-address=10.10.10.102 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp3 passtrough=no
NAT, Src. Address:
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade add chain=srcnat out-interface=ether2 action=masquerade add chain=srcnat out-interface=ether3 action=masquerade
:
- SSTP
- Routing Decision (2) , main. Src. Address ether1
[Output|Mangle]
- Routing Adjusment
- Src. Address ether1,
[Nat|Srcnat]
, :

Connection Tracker [Mangle]
[Srcnat]
, , Replay Dst. Address
NAT:

VPN ( ) :

, :
/ip route add dst-address=10.10.10.100 gateway=192.168.100.1 add dst-address=10.10.10.101 gateway=192.168.200.1 add dst-address=10.10.10.102 gateway=192.168.0.1
. , vpn , 6 [IP]->[Routes]
type=blackhole
. — 3 [IP]->[Route]->[Rules]
.
, . :
/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2
[IP]->[Route]->[Rules]

/ip route rules add src-address=192.168.100.0/25 action=lookup-only-in-table table=over-isp1 add src-address=192.168.100.128/25 action=lookup-only-in-table table=over-isp2
action=lookup
, main . — .
[IP]->[Firewall]->[Mangle]
ip . . layer7, , , .

/ip firewall mangle add chain=prerouting src-address-list=users-over-isp1 dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 add chain=prerouting src-address-list=users-over-isp2 dst-address-type=!local action=mark-routing new-routing-mark=over-isp2
"" [IP]->[Route]->[Rules]
:
/ip route rules add routing-mark=over-isp1 action=lookup-only-in-table table=over-isp1 add routing-mark=over-isp2 action=lookup-only-in-table table=over-isp2
[IP]->[Firewall]->[Filter]
:
/ip firewall filter add chain=forward routing-mark=over-isp1 out-interface=!ether1 action=reject add chain=forward routing-mark=over-isp2 out-interface=!ether2 action=reject
dst-address-type=!local
dst-address-type=!local
(dns, winbox, ssh, ...). , , dst-address-table
.
[IP]->[Route]->[Rules]
, . , FIB [PREROUTING|Mangle]
main, . Routing Rules, User PBR .
[IP]->[Firewall]->[Mangle action=route]
[Prerouting|Mangle]
, :
/ip firewall mangle add chain=prerouting src-address=192.168.100.0/25 action=route gateway=10.10.10.1 add chain=prerouting src-address=192.168.128.0/25 action=route gateway=10.20.20.1
route
( [IP]->[Route]->[Rules]
). , action=route
action=mark-route
, ( passtrough
), .
wiki , .
PPC
Per Connection Classificator — ECMP. ECMP (ECMP , Routing Cache ).
PCC ip , 32- . , . . , .

:
192.168.100.10: 192+168+100+10 = 470 % 3 = 2 192.168.100.11: 192+168+100+11 = 471 % 3 = 0 192.168.100.12: 192+168+100+12 = 472 % 3 = 1
src.address :

# /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=3 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=1 routing-mark=over-isp3 # /ip firewall mangle add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/0 action=mark-connection new-connection-mark=conn-over-isp1 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/1 action=mark-connection new-connection-mark=conn-over-isp2 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/2 action=mark-connection new-connection-mark=conn-over-isp3 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp1 action=mark-routing new-routing-mark=over-isp1 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp2 action=mark-routing new-routing-mark=over-isp2 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp3 action=mark-routing new-routing-mark=over-isp3
: in-interface=br-lan
, action=mark-routing
.
Check ping — , IP , , , check ping .
BGP, .
, ip , , google dns: 8.8.8.8. 8.8.4.4. Mikrotik .
Multihop BGP MikroTik, check gateway .
scope/target scope :

- scope main target scope
- ,
- connected
, :

- 1-3 connected ,
- 4-6 connected ""
RIB, FIB : 0.0.0.0/0 via 10.10.10.1 on ether1
.

:

/ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 check-gateway=ping distance=1 target-scope=10 add dst-address=8.8.8.8 gateway=10.10.10.1 scope=10 add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
, 10.10.10.1:

Check gateway ping' 8.8.8.8, ( main) 10.10.10.1.
10.10.10.1 8.8.8.8, , ( ping) 8.8.8.8 10.10.10.1:

ether1, , 8.8.8.8 :

, NetWatch 8.8.8.8. NetWatch . :
/ip route add dst-address=8.8.8.8 gateway=10.20.20.1 distance=100 type=blackhole

, NetWatch .
, 8.8.8.8 , dns .
Virtual Routing and Forwarding (VRF)
VRF , ( MPLS) L3VPN :

VRF Mikrotik , ip VRF, .
vrf:

/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.200.1/24 interface=ether2 network=192.168.200.0
ether2 , ping vrf ( ), ping :

main ( vrf route leaking):

/ip route add distance=1 gateway=172.17.0.1@main routing-mark=vrf1 add distance=1 gateway=172.17.0.1%wlan1 routing-mark=vrf2
route leaking: : 172.17.0.1@main
: 172.17.0.1%wlan1
.
[PREROUTING|Mangle]
:

/ip firewall mangle add chain=prerouting in-interface=ether1 action=mark-connection new-connection-mark=from-vrf1 passthrough=no add chain=prerouting connection-mark=from-vrf1 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting in-interface=ether2 action=mark-connection new-connection-mark=from-vrf2 passthrough=no add chain=prerouting connection-mark=from-vrf2 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf2 passthrough=no

VRF netmap:

:
/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.100.1/24 interface=ether2 network=192.168.100.0 add address=192.168.0.1/24 interface=ether3 network=192.168.0.0
firewall:
# /ip firewall mangle add chain=prerouting dst-address=192.168.101.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting dst-address=192.168.102.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf2 passthrough=no # netmap "" /ip firewall nat add chain=dstnat dst-address=192.168.101.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24 add chain=dstnat dst-address=192.168.102.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24
:
# route leaking, connected /ip route add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf1 add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf2
dhcp
VRF , ( dhcp client) .
vrf:
/ip route vrf add interface=ether1 routing-mark=over-isp1
( ) over-isp1 :
/ip firewall mangle add chain=output out-interface=!br-lan action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting in-interface=br-lan dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 passthrough=no
, :
/interface bridge add name=bare /ip route add dst-address=0.0.0.0/0 gateway=bare
Routing decision (2) [OUTPUT|Mangle]
, 0.0.0.0/0 main .

connected-in
dynamic-in
[Routing] -> [Filters]
( ) — ( routing ), :
- connected-in — connected
- dynamic-in — PPP DCHP
, : distance, routing-mark, comment, scope, target scope, ...
- Routing Filters ( ), Routing Filters, . Routing Filters .
Routing Mark
. VPN . - :
# vpn default route /interface pptp-client add connect-to=XXXX add-default-route=yes default-route-distance=101 ... add connect-to=YYYY add-default-route=yes default-route-distance=100 ... # /routing filter add chain=dynamic-in distance=100 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn1 add chain=dynamic-in distance=101 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn2
, , vrf ppp , 0.0.0.0/0 main. .
Connected
:
/route filter add chain=connected-in prefix=192.168.100.0/24 action=reject
RouterOS :
[Tool]->[Torch]
—/ip route check
— ,/ping routing-table=<name>
/tool traceroute routing-table=<name>
— pingaction=log
[IP]->[Firewall]
— , packet flow,