Skip to: Site menu | Main content

Balanceamento entre links com Mikrotik


Existem duas técnicas bastante utilizadas para balancemanetos entre links, o ECMP (Equal Cost Multi-Path) e o PCC (per-connection-classifier), em se tratando de mikrotik. No PCC ocorre a divisão em igual fluxo a partir de parâmetros pré-definidos, como src-address, src-port, dst-address, dst-port. Ou seja, o PCC torna-se ótimo para balanceamento e alta disponibilidade em cenários onde há preocupação em manter sessões a partir de origem, como msn e tráfego SSL. Para esta técnica, disponível apenas a partir da versa 3.24 do RouterOs, os pacotes tem de retornar pela wan onde entraram, fazendo assim necessário a classificação do tráfego nas wan’s a partir das critérios definidos, forçando a sair pelo gateways onde as sessões estão persistentes. No ECMP os pacotes podem sair por wan’s diferentes das que entraram, apesar de mascarar uma única saída, a entrega dos pacotes continuará sendo a partir de diferentes gateways, não forçando que a entrega seja feito a partir de sua origem quando se estabeleceu a sessão. O ECMP possibilita a escabilidade de carga entre links, podendo definir que o maior link participe mais do balanceamento que outro, ou seja, entre 1 link com taxas de 3Mb/s e outro de 1Mb/s podemos definir o que o link 1 atue com 2/3 no balanceamento e o outro com 1/3 .

Cenário:

Dois links de igual tamanho:

Link1 : 192.168.1.254
Link2 : 192.168.2.254

Interfaces Wan Mikrotik:

ether2: 192.168.1.250
ether3: 192.168.2.250

Interface local Mikrotik :

ether1: 192.168.0.1

Técnicas:

ECMP
PCC

ECMP

;Definição de interfaces

/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=ether1
add address=192.168.1.250/24 network=192.168.1.0 broadcast=192.168.1.255 interface=ether2
add address=192.168.2.250/24 network=192.168.2.0 broadcast=192.168.2.255 interface=ether3

;Failover e definição de balanceamento 1:1 . Caso o check-gateway aponte falha em um gateway ele irá remover o gateway da listagem

/ ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.254,192.168.2.254 check-gateway=ping

;Saídas dos pacotes pelas interfaces Nateado para os ip’s de respectivos

/ ip firewall nat
add chain=srcnat out-interface=ether2 action=masquerade
add chain=srcnat out-interface=ether3 action=masquerade

; Marcação de conexões e rotas para mascaramento da saída independente da origem, quem entra pela wan1 pode sair pela wan2

/ ip firewall mangle
add chain=input in-interface=ether2 action=mark-connection new-connection-mark=wlan1_conn
add chain=input in-interface=ether3 action=mark-connection new-connection-mark=wlan2_conn
add chain=output connection-mark=wlan1_conn action=mark-routing new-routing-mark=to_wla1
add chain=output connection-mark=wlan2_conn action=mark-routing new-routing-mark=to_wla2

/ ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.254 routing-mark=to_wla1
add dst-address=0.0.0.0/0 gateway=192.168.2.254 routing-mark=to_wla2

PCC

;Definição de interfaces

/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=ether1
add address=192.168.1.250/24 network=192.168.1.0 broadcast=192.168.1.255 interface=ether2
add address=192.168.2.250/24 network=192.168.2.0 broadcast=192.168.2.255 interface=ether3

;Marcar as conexões de entrada para que saiam pela interface que entrou

/ Ip firewall mangle
add chain=input in-interface=ether2 action=mark-connection new-connection-mark=wlan1_conn add chain=input in-interface=ether2 action=mark-connection new-connection-mark=wlan1_conn
add chain=input in-interface=ether3 action=mark-connection new-connection-mark=wlan2_conn add chain = input in-interface=ether3 action=mark-connection new-connection-mark=wlan2_conn

; Marcação de saída no roteador para encaminhamento adequado

add chain=output connection-mark=wlan1_conn action=mark-routing new-routing-mark=to_wlan1
add chain=output connection-mark=wlan2_conn action=mark-routing new-routing-mark=to_wlan2

; Através da política de roteamento forçaremos as saídas pelos respectivos gateways.

add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=ether1
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=ether1

; Iremos dividir em dois grupos para marcação de rotas para Internet a partir da política de roteamento, excluindo o tráfego local, já que o prerounting, na marcação, captura todo tráfego. Usaremos como critério de balanceamento e distinção entre sessões de rotas “source and destination addressees”

add chain=prerouting dst-address-type=!local in-interface=ether1 per-connection-classifier=both-addresses:2/0 \
action=mark-connection new-connection-mark=wlan1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=ether1 per-connection-classifier=both-addresses:2/1 \
action=mark-connection new-connection-mark=wlan2_conn passthrough=yes

; Marcação dos pacotes oriundas das conexões já marcadas

add chain=prerouting connection-mark=wlan1_conn in-interface=ether1 action=mark-routing new-routing-mark=to_wlan1
add chain=prerouting connection-mark=wlan2_conn in-interface=ether1 action=mark-routing new-routing-mark=to_wlan2

; Criando rota para cada marcação

/ ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.254 routing-mark=to_wlan1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.254 routing-mark=to_wlan2 check-gateway=ping

; Habilitando Failover

add dst-address=0.0.0.0/0 gateway=192.168.1.254 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.254 distance=2 check-gateway=ping

; Mascararemos o tráfego para saída a partir das devidas interfaces, de acordo o ip de origem

/ ip firewall nat
add chain=srcnat out-interface=ether2 action=masquerade
add chain=srcnat out-interface=ether3 action=masquerade

2 Responses to “Balanceamento entre links com Mikrotik”

  1. Tenório Says:

    Olá Tiago. Estudo Redes em meu estado e penso em falar em um trabalho sobre este balanceamento PCC. Lendo seu tuo, que por sinal é excelente, me ocorreu uma duvida: como o balanceamento divide os clientes? Penso se poderia ser assim: o primeiro q entrar vai pro link1 e o segundo pro link 2, o terceiro pro link 1 o quarto pro link2 … seria isto? ou como faria isso respeitando o failover e sites https (bancos etc? Obrigado.

  2. sergio Says:

    Ola tiago, parabéns pela iniciativa!
    aproveitando o ensejo, eu estou montando um sevidor com o mikrotik, porem tenho tido dificuldade de impelementar o balanceamento de carga com o hotspot, voce tem ideia como pode ser a configuração? desde já obrigado.

Leave a Reply