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: IP198.51.100.2/30, gateway198.51.100.1. - Link 2 em
ether2: IP192.0.2.2/30, gateway192.0.2.1. - LAN:
192.168.10.0/24nabridge.
- Link 1 em
- As duas interfaces na lista
WANe 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
-
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.53e203.0.113.54apenas como marcadores: troque pelos seus. -
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" -
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-scopeda rota recursiva precisa ser maior que oscopeda rota que resolve o gateway (11 > 10). Se esses valores não baterem, a rota fica inativa. -
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.
-
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 -
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=2A tabela
maincontinua com as rotas recursivas da Parte 1 e atende o tráfego do próprio roteador e o que não for marcado. -
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=noboth-addressesmantém o mesmo par origem/destino sempre no mesmo link; é a escolha mais segura para sites com sessão.both-addresses-and-portsdistribui melhor, mas pode trocar de link entre conexões do mesmo site.- As regras de
in-interface=ether1/ether2garantem 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/0e3/1para o link maior e3/2para o menor.
-
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
/ip route print where dst-address=0.0.0.0/0: a rota de distância 1 aparece ativa (flagA) e a de distância 2 inativa.- 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.99passa a sair pelo gateway do link 2. - Para o PCC:
/ip firewall connection print where connection-mark=con-link2mostra conexões distribuídas, e/interface monitor-traffic ether1,ether2mostra tráfego nos dois links. - 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-scopetrocados ou o host de teste não responde a ping. - Failover demora muito: o
check-gatewayprecisa 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-addressesem 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-keepaliveele 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_balanceare 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.
