Roteamento recursivo no MikroTik através de gateways atribuídos pelo DHCP

A pergunta mais freqüente sobre o uso do roteamento recursivo é: "O que devo fazer se o provedor principal nos atribuir um endereço IP por meio de dhcp e o gateway padrão mudar com frequência?"

imagem

Atenção! os materiais e esquemas deste artigo são simplificados para o primitivismo, a fim de fornecer uma idéia geral do método para resolver o problema. Sem aprofundamento em particular.

Para que serve o roteamento recursivo? Monitorar a disponibilidade da Internet atrás do gateway do provedor . Afinal, muitas vezes acontece que o roteador do provedor responde perfeitamente às solicitações de eco, mas o link do provedor à rede global desapareceu por algum motivo.

O roteamento recursivo permite avaliar a disponibilidade do acesso à Internet através de um provedor selecionado e decidir sobre o roteamento do tráfego.

No entanto, o fato é que o uso do roteamento recursivo pressupõe a presença de uma indicação explícita direta do endereço IP do gateway pregado com pregos entre os parâmetros da rota criada. A especificação do nome da interface de transmissão como um gateway está incorreta e, em muitos casos, simplesmente não funciona, porque requer proxy-arp do provedor. E, no entanto, em vez do provedor, o proxy-arp pode ativar seu vizinho sobre a opção de provedor e tentar interceptar seu tráfego dessa maneira, organizando o MITM clássico!

A mágica do roteamento recursivo está oculta por trás dos parâmetros "escopo" e "destino-escopo" . Para que uma rota funcione como recursiva, seu "escopo de destino" deve ser maior ou igual ao valor de "escopo" da rota estática à qual se refere recursivamente, e o gateway especificado na rota estava fora do alcance direto por uma das interfaces.

Considere o esquema mais simples de ativo / backup. Nosso roteador executa NAT e está conectado a dois provedores pelas interfaces Ether1-isp1 e Ether2-isp2. O provedor principal (ISP-1) distribui endereços IP para seus clientes usando o protocolo DHCP e nada mais. O segundo provedor nos fornece um endereço IP estático, mas com velocidade muito menor.
A mudança para o backup (ISP-2) deve ocorrer quando o acesso à Internet através do provedor principal se tornar impossível.

imagem

O destaque do provedor para esse esquema é a alteração arbitrária periódica, não apenas do endereço IP do cliente, mas também do gateway padrão.

Antes da versão 6.39, eu tinha que ver muletas muito sofisticadas em várias combinações de sheduler , netwatch e mecanismos semelhantes.

A partir da versão 6.39, os desenvolvedores do RouterOS passaram a conhecer esses usuários e criaram a capacidade de chamar um script especial quando o cliente dhcp é acionado no dispositivo.

Na verdade, a solução consiste em duas partes:

  1. precisa obter o protocolo dhcp a partir do endereço IP do provedor e do endereço do gateway para uso em rotas recursivas
  2. se possível, exclua o endereço de gateway recebido do provedor do uso automático.

Então, vamos começar do final.

Criaremos uma rota de backup através do ISP-2 com um valor de distância maior que o do futuro principal. Neste exemplo, usei "distance = 2":

Backup via ISP-2
/ip route add dst-address=0.0.0.0/0 gateway=192.0.2.1 distance=2

Além disso, para receber uma rota padrão do provedor ISP-1, mas não para usá-la diretamente, existe um valor especial "distance = 255". Uma rota com esse valor de distância irá para a tabela de roteamento do sistema, mas nunca ficará ativa .

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

Precisamos dessa rota apenas para ler os parâmetros enviados pelo provedor e implementá-los nas configurações de rotas recursivas por meio de um script.

A partir dos parâmetros recebidos, estamos mais interessados ​​na variável $ gateway-address. Como o nome sugere, ele contém o endereço do gateway padrão na rede do provedor. Vamos usá-lo para atualizar as rotas recursivas.
As próprias rotas recursivas devem ser reconhecidas corretamente a partir do script. Para fazer isso, no estágio de sua criação, indicaremos um “comentário” único, que será usado para encontrá-los dentro da tabela. Código para criar um par de rotas recursivas:

Crie um par de rotas
/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


A primeira linha deve (e será!) Apontar para um gateway real na rede do provedor somente depois que o provedor emitir os parâmetros via dhcp e eles serão processados ​​usando o script dhcp-client:

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

Opção mais avançada
:if ($bound=1) do={ /ip route set [find comment=" isp1route "] gateway=($"gateway-address")disabled=no; :log warning ("New ISP1 gateway: ".($"gateway-address")) }

Agora, após o recebimento de um endereço IP do provedor ISP-1 para uso como gateway padrão, ele será incluído no par de rotas em vez de 127.0.0.1.
A segunda linha, onde a rota para 0.0.0.0/0 é indicada, na verdade realiza toda a mágica. O nó 8.8.4.4 especificado lá como gateway será verificado quanto à resposta com a opção "check-gateway = ping" precisamente através da rede ISP-1. Se o nó 8.8.4.4 não responder duas vezes às solicitações de eco dentro de 20 segundos, o roteador considerará a conexão com a Internet por esta rota (ISP-1) indisponível. Nesse caso, novas conexões serão roteadas através do provedor de backup ISP-2.

Se tudo for feito corretamente, na janela winbox / ip-> routes, próximo à rota até 8.8.4.4, as palavras "resursive via ..." estarão visíveis. Isso significa que a rota foi construída exatamente como recursiva.

No final, apenas por exemplo - winbox da tela da janela:

imagem

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


All Articles