Failover com dois links no MikroTik RouterOS 7 usando rota recursiva, e balanceamento PCC com routing tables, mangle e NAT. Exemplos comentados.

Para que serve

Ter dois provedores de internet no escritório só ajuda se o roteador souber trocar de um para o outro sozinho. Este artigo mostra como configurar failover de dois links no MikroTik com RouterOS 7 de duas formas: (1) rota recursiva, em que um link é principal e o outro só entra quando o primeiro realmente perde a internet; e (2) balanceamento PCC, em que as conexões são distribuídas entre os dois links, mantendo o failover. Para escritórios que acessam VMs no servidor dedicado por VPN, um link reserva bem configurado é o que mantém o ERP e o RDP de pé quando a fibra principal cai.

Pré-requisitos

  • RouterOS 7 e firewall base aplicado (artigo «Firewall do MikroTik: regras base de filter e raw comentadas (RouterOS 7)»).
  • Dados dos dois links. Exemplo (substitua pelos seus):
    • Link 1 em ether1: IP 198.51.100.2/30, gateway 198.51.100.1.
    • Link 2 em ether2: IP 192.0.2.2/30, gateway 192.0.2.1.
    • LAN: 192.168.10.0/24 na bridge.
  • As duas interfaces na lista WAN e o NAT de saída usando a lista: /ip firewall nat add chain=srcnat out-interface-list=WAN action=masquerade.
  • Acesso local ao roteador: mexer na rota padrão pode cortar o acesso remoto. Ative o Safe Mode (Ctrl+X).

Por que não basta check-gateway no gateway da operadora

A forma ingênua (duas rotas padrão com distâncias diferentes e check-gateway=ping no gateway do provedor) só detecta quando o equipamento da operadora para de responder. Na prática, a falha mais comum é outra: o gateway responde, mas a internet depois dele está fora. A rota recursiva resolve isso testando um endereço na internet, alcançável apenas por um dos links.

Parte 1: failover com rota recursiva

  1. Escolha dois hosts de teste, um para cada link. Devem ser IPs públicos estáveis, que respondem a ping e que os usuários da LAN não precisam acessar (por exemplo, resolvedores DNS públicos de empresas diferentes). Nos exemplos usamos 203.0.113.53 e 203.0.113.54 apenas como marcadores: troque pelos seus.

  2. Crie rotas de host que forçam cada teste a sair por um link específico:

    /ip route
    add dst-address=203.0.113.53/32 gateway=198.51.100.1 scope=10 comment="teste link1"
    add dst-address=203.0.113.54/32 gateway=192.0.2.1 scope=10 comment="teste link2"
  3. Crie as rotas padrão apontando para os hosts de teste (recursivas):

    /ip route
    add dst-address=0.0.0.0/0 gateway=203.0.113.53 target-scope=11 check-gateway=ping distance=1 comment="padrao via link1"
    add dst-address=0.0.0.0/0 gateway=203.0.113.54 target-scope=11 check-gateway=ping distance=2 comment="padrao via link2"

    No RouterOS 7, o target-scope da rota recursiva precisa ser maior que o scope da rota que resolve o gateway (11 > 10). Se esses valores não baterem, a rota fica inativa.

  4. Remova ou desative as rotas padrão antigas (inclusive as criadas pelo cliente DHCP: /ip dhcp-client set [find] add-default-route=no). Caso contrário elas competem com as recursivas.

Link via PPPoE ou DHCP? Se o gateway muda, use o nome da interface na rota de host: gateway=pppoe-out1. Para DHCP, há a opção de usar um script no cliente DHCP que atualiza o gateway da rota de teste quando o IP renova.

Parte 2: balanceamento de carga com PCC

O PCC (Per Connection Classifier) divide as conexões entre os links usando um hash. Cada conexão inteira sai sempre pelo mesmo link, o que evita quebrar sessões de bancos e sistemas que validam o IP de origem. Não espere que um único download use os dois links ao mesmo tempo.

  1. Crie as tabelas de roteamento (obrigatório no RouterOS 7, diferente do 6):

    /routing table
    add name=via-link1 fib
    add name=via-link2 fib
  2. Crie as rotas de cada tabela, cada uma com o outro link como reserva:

    /ip route
    add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-table=via-link1 check-gateway=ping distance=1
    add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-table=via-link1 distance=2
    add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-table=via-link2 check-gateway=ping distance=1
    add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-table=via-link2 distance=2

    A tabela main continua com as rotas recursivas da Parte 1 e atende o tráfego do próprio roteador e o que não for marcado.

  3. Marque as conexões no mangle:

    /ip firewall address-list
    add list=nao_balancear address=192.168.0.0/16
    add list=nao_balancear address=10.0.0.0/8
    /ip firewall mangle
    add chain=prerouting action=accept dst-address-list=nao_balancear comment="PCC: trafego interno nao e balanceado"
    add chain=prerouting action=mark-connection new-connection-mark=con-link1 in-interface=ether1 connection-mark=no-mark comment="entrou pelo link1, responde pelo link1"
    add chain=prerouting action=mark-connection new-connection-mark=con-link2 in-interface=ether2 connection-mark=no-mark
    add chain=prerouting action=mark-connection new-connection-mark=con-link1 in-interface-list=LAN connection-mark=no-mark \
        dst-address-type=!local per-connection-classifier=both-addresses:2/0 comment="PCC metade 1"
    add chain=prerouting action=mark-connection new-connection-mark=con-link2 in-interface-list=LAN connection-mark=no-mark \
        dst-address-type=!local per-connection-classifier=both-addresses:2/1 comment="PCC metade 2"
    add chain=prerouting action=mark-routing new-routing-mark=via-link1 connection-mark=con-link1 in-interface-list=LAN passthrough=no
    add chain=prerouting action=mark-routing new-routing-mark=via-link2 connection-mark=con-link2 in-interface-list=LAN passthrough=no
    add chain=output action=mark-routing new-routing-mark=via-link1 connection-mark=con-link1 passthrough=no
    add chain=output action=mark-routing new-routing-mark=via-link2 connection-mark=con-link2 passthrough=no
    • both-addresses mantém o mesmo par origem/destino sempre no mesmo link; é a escolha mais segura para sites com sessão. both-addresses-and-ports distribui melhor, mas pode trocar de link entre conexões do mesmo site.
    • As regras de in-interface=ether1/ether2 garantem que um acesso vindo de fora (WireGuard, porta publicada) seja respondido pelo mesmo link por onde chegou.
    • Para links de velocidades diferentes, divida em mais partes: 3/0 e 3/1 para o link maior e 3/2 para o menor.
  4. Confira o FastTrack. A regra de fasttrack do firewall base tem connection-mark=no-mark; assim as conexões balanceadas não são aceleradas e continuam respeitando as marcas. Sem esse filtro, o balanceamento se comporta de forma errática.

Como saber se funcionou

  1. /ip route print where dst-address=0.0.0.0/0: a rota de distância 1 aparece ativa (flag A) e a de distância 2 inativa.
  2. Simule a falha: desconecte o cabo do link 1 depois do modem, ou bloqueie o host de teste no modem. Em até cerca de 30 segundos a rota via link 2 fica ativa, e /tool traceroute 203.0.113.99 passa a sair pelo gateway do link 2.
  3. Para o PCC: /ip firewall connection print where connection-mark=con-link2 mostra conexões distribuídas, e /interface monitor-traffic ether1,ether2 mostra tráfego nos dois links.
  4. Abra um site do tipo "qual é meu IP" em navegadores diferentes: devem aparecer os dois IPs públicos ao longo do tempo.

Problemas comuns

  • Rota recursiva sempre inativa: scope/target-scope trocados ou o host de teste não responde a ping.
  • Failover demora muito: o check-gateway precisa de alguns pings perdidos seguidos (cerca de 10 segundos de intervalo) antes de desativar a rota. É o comportamento esperado.
  • Sites de banco deslogando: use both-addresses em vez de incluir portas no classificador.
  • VPN com o datacenter caindo ao trocar de link: o túnel WireGuard sai pelo link que estiver ativo; com persistent-keepalive ele se restabelece sozinho pelo outro link em segundos. Se o servidor filtra por IP de origem, libere os IPs dos dois links.
  • Acesso pela LAN às VMs pela VPN parou com PCC: a rede das VMs não está em nao_balancear e foi balanceada para a internet. Inclua a faixa.

Perguntas frequentes

PCC soma a velocidade dos dois links?

Soma a capacidade total para muitas conexões simultâneas, mas uma conexão individual nunca passa da velocidade do link em que caiu.

Posso usar recursive routing com link 4G?

Sim. Normalmente o 4G fica como reserva (distância 2) e só entra quando o link principal perde a internet.

Preciso de script para failover no RouterOS 7?

Não. A rota recursiva com check-gateway resolve sem scripts. Scripts só são necessários para casos como gateway DHCP que muda.

Leitura complementar

Precisa de ajuda?

Se o túnel do escritório com o seu servidor dedicado oscila quando o link troca, abra um ticket com os IPs dos dois links e a saída de /ip route print detail where dst-address=0.0.0.0/0.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também