Enrutamiento recursivo en MikroTik a través de puertas de enlace asignadas por DHCP

La pregunta más frecuente sobre el uso del enrutamiento recursivo es: "¿Qué debo hacer si el proveedor principal nos asigna una dirección IP a través de dhcp, y la puerta de enlace predeterminada cambia con frecuencia?"

imagen

Advertencia Los materiales y esquemas de este artículo se simplifican al primitivismo para dar una idea general del método para resolver el problema. Sin profundizar en particular.

¿Para qué sirve el enrutamiento recursivo? Para controlar la disponibilidad de Internet detrás de la puerta de enlace del proveedor . Después de todo, a menudo sucede que el enrutador del proveedor responde perfectamente a las solicitudes de eco, pero el enlace [activo] del proveedor a la red global ha desaparecido por alguna razón.

El enrutamiento recursivo le permite evaluar la disponibilidad de acceso a Internet a través de un proveedor seleccionado y decidir el enrutamiento del tráfico.

Sin embargo, el hecho es que el uso del enrutamiento recursivo supone la presencia de una indicación explícita directa de la dirección IP de la puerta de enlace clavada con clavos entre los parámetros de la ruta creada. Especificar el nombre de la interfaz de difusión como puerta de enlace es incorrecto y, en muchos casos, simplemente no funciona, porque requiere proxy-arp del proveedor. Y, sin embargo, en lugar del proveedor, proxy-arp puede activar a su vecino sobre el cambio de proveedor e intentar interceptar su tráfico de esta manera organizando el clásico MITM.

La magia del enrutamiento recursivo se esconde detrás de los parámetros "alcance" y "alcance objetivo" . Para que una ruta funcione como recursiva, su "alcance objetivo" debe ser mayor o igual que el valor "alcance" de la ruta estática a la que se refiere recursivamente, y la puerta de enlace especificada en la ruta estaba fuera del alcance directo a través de una de las interfaces.

Considere el esquema más simple de Active / Backup. Nuestro enrutador realiza NAT y está conectado a dos proveedores a través de las interfaces Ether1-isp1 y Ether2-isp2. El proveedor principal (ISP-1) distribuye direcciones IP a sus clientes utilizando el protocolo DHCP y nada más. El segundo proveedor nos proporciona una dirección IP estática, pero una velocidad mucho menor.
El cambio a la copia de seguridad (ISP-2) debería ocurrir cuando el acceso a Internet a través del proveedor principal sea imposible.

imagen

Lo más destacado del proveedor para tal esquema es el cambio arbitrario periódico no solo de la dirección IP del cliente, sino también de la puerta de enlace predeterminada.

Antes de la versión 6.39, tenía que ver muletas muy sofisticadas en varias combinaciones de sheduler , netwatch y mecanismos similares.

A partir de la versión 6.39, los desarrolladores de RouterOS se reunieron con dichos usuarios y crearon la capacidad de llamar a un script especial cuando el cliente dhcp se activa en el dispositivo.

En realidad, la solución consta de dos partes:

  1. necesita obtener el protocolo dhcp de la dirección IP del proveedor y la dirección de la puerta de enlace para usar en rutas recursivas
  2. si es posible, excluya la dirección de puerta de enlace recibida del proveedor del uso automático.

Entonces, comencemos desde el final.

Crearemos una ruta de respaldo a través de ISP-2 con un valor de distancia mayor que el del futuro principal. En este ejemplo, usé "distancia = 2":

Copia de seguridad a través de ISP-2
/ip route add dst-address=0.0.0.0/0 gateway=192.0.2.1 distance=2

Además, para recibir la ruta predeterminada del proveedor ISP-1, pero no para usarla directamente, hay un valor especial "distancia = 255". Una ruta con este valor de distancia irá a la tabla de enrutamiento del sistema, pero nunca se activará .

Código
/ip dhcp-client add comment="ISP-1 dhcp" default-route-distance=255 dhcp-options=hostname,clientid interface=Ether1-isp1

Necesitamos dicha ruta solo para leer los parámetros enviados por el proveedor e implementarlos en la configuración de rutas recursivas a través de un script.

De los parámetros recibidos, estamos más interesados ​​en la variable $ gateway-address. Como su nombre indica, contiene la dirección de la puerta de enlace predeterminada en la red del proveedor. Lo usaremos para actualizar las rutas recursivas.
Las rutas recursivas mismas deben reconocerse correctamente del script. Para hacer esto, en la etapa de su creación, indicaremos un "comentario" único, que se utilizará para encontrarlos dentro de la tabla. Código para crear un par de rutas recursivas:

Crea un par de rutas
/ip route add dst-address=8.8.4.4 gateway=127.0.0.1 scope=30 target-scope=30 comment=" isp1route " disabled=yes
/ip route add dst-address=0.0.0.0/0 gateway=8.8.4.4 check-gateway=ping


La primera línea debería (¡y lo hará!) Apuntar a una puerta de enlace real en la red del proveedor solo después de que el proveedor emita los parámetros a través de dhcp y se procesen usando el script dhcp-client:

Script simplificado
/ip route set [find comment=" isp1route "] gateway=($"gateway-address") disabled=no

Opción más avanzada
:if ($bound=1) do={ /ip route set [find comment=" isp1route "] gateway=($"gateway-address")disabled=no; :log warning ("New ISP1 gateway: ".($"gateway-address")) }

Ahora, al recibir una dirección IP del proveedor ISP-1 para usar como puerta de enlace predeterminada, se incluirá en el par de rutas en lugar de 127.0.0.1.
La segunda línea, donde se indica la ruta a 0.0.0.0/0, en realidad lleva a cabo toda la magia. El nodo 8.8.4.4 especificado allí como puerta de enlace se verificará para la respuesta con la opción "check-gateway = ping" precisamente a través de la red ISP-1. Si el nodo 8.8.4.4 no responde dos veces a las solicitudes de eco en 20 segundos, el enrutador considerará que la conexión a Internet a través de esta ruta (ISP-1) no está disponible. En este caso, las nuevas conexiones se enrutarán a través del proveedor de respaldo ISP-2.

Si todo se hace correctamente, en la ventana de winbox / ip-> routes cerca de la ruta hasta 8.8.4.4 se verán las palabras "resursive via ...". Esto significa que la ruta se construyó exactamente como recursiva.

Al final, por ejemplo solo - winbox de pantalla de ventana:

imagen

Source: https://habr.com/ru/post/es428097/


All Articles