Mikrotik - Balanceamento de Mikrotik com failover 

Page / - última modificação por Jean Franco em 2023/06/28 17:29 

Balanceamento de Mikrotik com failover 
última modificação por Jean Franco
em 2023/06/28 17:29

Índice

Motivo:
Prover um balanceamento entre os links e certamente redundância.
Tipos de Balanceamento:
- Bonding
- Policy Route
- PCC
- Por banda
Bonding:
•	Utiliza a tecnologia 802.3ad LACP e ambos os lados necessitam utilizar o mesmo tipo de equipamento para evitar compatibilidades.
Policy Routing:
•	Uma lista de IPs internos utiliza uma rota e uma outra lista utiliza a segunda rota.
•	Não é dinâmico
PCC (Per Connection Classifier):
•	Escalável e estável, mas não faz balanceamento.
Por banda:
•	Escalável
•	Utiliza o link status como gatilho
•	Controle sobre as conexões
•	Pode usar links com diferentes velocidades

Definido o tipo de balanceamento, vamos trabalhar. 
Conexão:
Um pacote originado de uma origem precisa retornar para esta origem. Chamamos de Stream.
No caso de uma conexão UDP, UDP stream.
Mangle:
Uma facilidade do ROS que permite que as conexões sejam "marcadas" e então ser utilizadas para um propósito.
Essas marcas não saem do roteador, ficam localmente.
Rotas:
Tabelas para onde o roteador encaminha os pacotes.
Por padrão todos os pacotes no Mikrotik são direcionadas para a tabela "main".
Podemos criar nossas tabelas manualmente e direcionar os pacotes para essas novas rotas.
Topologia:
Internet - ISP 1                                    Internet - ISP 2
                  --------------                -----------------
                                 -----------------
                                         | |
                                   Roteador
/interface ethernet 
set 0 name=LAN 
set 3 name=ISP_1 set 4 name=ISP_2 
/ip address add address=192.168.22.1/24 interface=LAN 
add address=1.1.1.2/24 interface=ISP_1 
add address=2.2.2.3/24 interface=ISP_2 
/ip firewall nat 
add action=masquerade chain=srcnat out-interface=ISP_1 
add action=masquerade chain=srcnat out-interface=ISP_2
Neste exemplo, estamos configurando o ISP_1 e ISP_2 com IPs estáticos. Criamos as regras de mascaramento de cada um. 
Agora para a parte de Roteamento:
/ip route
add gateway=1.1.1.1 distance=1
add gateway=2.2.2.1 distance=2
add gateway=1.1.1.1 routing-mark=ISP1_Route distance=1
add gateway=2.2.2.1 routing-mark=ISP2_Route distance=1
Adicionamos ambos os gateways, com pesos diferentes e também criamos distâncias diferentes para o failover.
/ip firewall address-list
add address=1.1.1.0/24 list=Conectado
add address=2.2.2.0/24 list=Conectado
add address=192.168.22.0/24 list=Conectado
add address=192.168.22.0/24 list=LAN
Para evitar a perda de contato entre as redes, precisamos criar listas de conexões. Criamos portanto a lista Conectado
/ip firewall mangle
add chain=prerouting src-address-list=Conectado
dst-address-list=Connected action=accept
Deste modo temos a conexão do roteador para fora, a conexão da WAN para LAN e da LAN para WAN.
Quando a conexão vier da WAN precisamos certificar de que o pacote irá sair pela mesma interface que entrou.
Vamos marcar os pacotes:
/ip firewall mangle
add chain=input connection-mark=no-mark in-interface=ISP_1
action=mark-connection new-connection-mark=ISP_1-LAN
add chain=input connection-mark=no-mark in-interface=ISP_2
action=mark-connection new-connection-mark=ISP2-LAN
Agora adicionamos na tabela:
add chain=output connection-mark=ISP_1-LAN
action=mark-routing new-routing-mark=ISP1_Route
add chain=output connection-mark=ISP_2-LAN
action=mark-routing new-routing-mark=ISP2_Route
O mesmo para a LAN:
/ip firewall mangle
add chain=forward connection-mark=no-mark in-interface=ISP_1
action=mark-connection new-connection-mark=WAN1->LANs
add chain=forward connection-mark=no-mark in-interface=ISP_2
action=mark-connection new-connection-mark=WAN2->LANs
add chain=prerouting connection-mark=WAN1->LANs src-address-list=LAN
action=mark-routing new-routing-mark=ISP1_Route
add chain=prerouting connection-mark=WAN2->LANs src-address-list=LAN
action=mark-routing new-routing-mark=ISP2_Route
Entrada pronta, agora a parte da LAN.
/ip firewall mangle
add chain=prerouting connection-mark=no-mark src-address-list=LAN dst-addresslist=!Conectado dst-address-type=!local action=mark-connection
new-connection-mark=LAN->WAN
add chain=prerouting connection-mark=LAN->WAN src-address-list=LAN
action=mark-routing new-routing-mark=ISP1_Route
comment="Load-Balance" 
Precisamos desta regra pois quando trocarmos de link, vai trocar também por onde saem os links.
add chain=prerouting connection-mark=LAN->WAN routing-mark=ISP1_Route
action=mark-connection new-connection-mark=Sticky_ISP1
add chain=prerouting connection-mark=LAN->WAN routing-mark=ISP2_Route
action=mark-connection new-connection-mark=Sticky_ISP2
add chain=prerouting connection-mark=Sticky_ISP1 src-address-list=LAN
action=mark-routing new-routing-mark=ISP1_Route
add chain=prerouting connection-mark=Sticky_ISP2 src-address-list=LAN
action=mark-routing new-routing-mark=ISP2_Route
Estas regras resolvem o problema de iniciar a conexão por um provedor e tentar usar outro provedor depois, muito importante especialmente para acesso a bancos.