Balanceamento de Mikrotik com failover

Last modified by Jean Franco on 2023/06/28 17:52

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.

Tags:
    

Tips

Press the x+x+x+a key combo to toggle the Advanced mode and x+x+x+h to toggle the display of hidden pages.

Maila Networks