Você está na página 1de 6

PCC Load balance no Mikrotik | Blog Lcmm.info http://blog.lcmm.info/?

p=71

Load Balance no Mikrotik usando PCC, Detalhado e


Explicado
Luiz Claudio Martins Maia

Bacharel em Ciência da Computação, CESUPA – lcm@lcmm.info

Resumo: Este documento demonstra como configurar um balanceamento de carga (Load Balance) orientado ao
ip ou à porta, no mikrotik 3.30 através de dois ou mais links.

Abstract: This document demonstrates how to configure a load balancing (Load Balance), ip or port oriented
in mikrotik 3:30 through two or more links.

Palavras-chave: Mikrotik; Load Balance; PCC.

1. Introdução
O objetivo deste documento e demonstrar como configurar um balanceamento de carga entre múltiplos links,
utilizando PCC no mikrotik.

Existem algumas formas de balancear links, porém existem também algumas complicações com alguns deles, um
exemplo é o ECMP, no qual por padrão o kernel linux limpa a tabela de roteamento de 10 em 10 minutos em
média, forçando a perda de conexão em aplicações “keep_alive”.

O PCC ou “per connection classifier”, marca os pacotes para que os mesmos sejam direcionados para o gateway
certo, com isso a conexão ficará pertinente à certo gateway.

2. Cenário

Ether1 – Lan
10.10.10.0/24

Ether3 – Wan Embratel (router + 4 modems PPP) / Link 8 Mb/s

Ether4 – Wan OI (router+2modems PPP)/ Link 4 Mb/s

3. Regras para os Impacientes


/ip firewall mangle

add action=accept chain=output comment=”Sem Balance” disabled=no dst-address-


list=SemBalance

add action=accept chain=prerouting comment=”" disabled=no dst-address=200.200.200.200/29


in-interface=ether1

add action=accept chain=prerouting comment=”" disabled=no dst-address=222.222.222.222/28


in-interface=ether1

add action=mark-connection chain=input comment=”____________Inicio Conf PCC (Load


Balance) ————— Marca Conexoes de entrada para que voltem pelo mesmo link” disabled=no
1 de 6 in-interface=ether3 new-connection-mark=EBT_conn passthrough=yes 20/08/2014 23:09
PCC Load balance no Mikrotik | Blog Lcmm.info http://blog.lcmm.info/?p=71

add action=mark-connection chain=input comment=”____________Inicio Conf PCC (Load


Balance) ————— Marca Conexoes de entrada para que voltem pelo mesmo link” disabled=no
in-interface=ether3 new-connection-mark=EBT_conn passthrough=yes

add action=mark-connection chain=input comment=”" disabled=no in-interface=ether4


new-connection-mark=OI_conn passthrough=yes

add action=mark-connection chain=output comment=”Load Balance Proxy” connection-


state=new disabled=no dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn
passthrough=yes per-connection-classifier=both-addresses:3/0

add action=mark-connection chain=output comment=”" connection-state=new disabled=no


dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn passthrough=yes per-connection-
classifier=both-addresses:3/1

add action=mark-connection chain=output comment=”" connection-state=new disabled=no


dst-address=!10.10.10.0/24 new-connection-mark=OI_conn passthrough=yes per-connection-
classifier=both-addresses:3/2

add action=mark-routing chain=output comment=”Retorna as conexoes marcadas no inicio, pelo


mesmo link que entraram” connection-mark=EBT_conn disabled=no new-routing-
mark=EBT_traffic passthrough=yes

add action=mark-routing chain=output comment=”" connection-mark=OI_conn disabled=no


new-routing-mark=OI_traffic passthrough=yes

add action=mark-connection chain=prerouting comment=”Load Balance (PCC), para os dois links


(OI e EBT) sendo um peso maior o link da EBT por causa da velocidade maior” disabled=no
dst-address-type=!local in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes
per-connection-classifier=both-addresses:3/0

add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local


in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes per-connection-
classifier=both-addresses:3/1

add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local


in-interface=ether1 new-connection-mark=OI_conn passthrough=yes per-connection-
classifier=both-addresses:3/2

add action=mark-routing chain=prerouting comment=”Aponta as conexoes do load balance para


as novas tabelas de roteamento, possibilitando o Load Balance(PCC)” connection-
mark=EBT_conn disabled=no in-interface=ether1 new-routing-mark=EBT_traffic
passthrough=yes

add action=mark-routing chain=prerouting comment=”____________FIM Load Balance


(PCC)” connection-mark=OI_conn disabled=no in-interface=ether1 new-routing-mark=OI_traffic
passthrough=yes

/ip route

add comment=”Rota Saida Principal EBT sem Load Balance” disabled=no distance=2
dst-address=0.0.0.0/0 gateway=222.222.222.222 scope=30

target-scope=10
2 de 6 20/08/2014 23:09
PCC Load balance no Mikrotik | Blog Lcmm.info http://blog.lcmm.info/?p=71

target-scope=10

add comment=”Rota saida OI sem Load Balance” disabled=no distance=3 dst-address=0.0.0.0/0


gateway=200.200.200.200 scope=30

target-scope=10

add comment=”Rota saida OI para Load Balance” disabled=no distance=1 dst-address=0.0.0.0/0


gateway= 200.200.200.200 routing-mark=

OI_traffic scope=30 target-scope=10

add comment=”Rota Saida EBT para Load Balance” disabled=no distance=1


dst-address=0.0.0.0/0 gateway= 222.222.222.222 routing-mark=

EBT_traffic scope=30 target-scope=10

add comment=”Rota para Rede interna” disabled=no distance=1 dst-address=10.10.10.0/24


gateway=10.10.10.1 scope=30 target-scope=10

/ip firewall nat

add action=masquerade chain=srcnat comment=”Mascaramento Link EBT” disabled=no


out-interface=ether3
add action=masquerade chain=srcnat comment=”Mascaramento Link OI” disabled=no
out-interface=ether4

4. Explicação das Regras

/ip firewall mangle

add action=accept chain=output comment=”Sem Balance” disabled=no dst-address-


list=SemBalance

A regra acima cria uma address list para cadastrar ips que você queira que saia pela rota default e não pelo
balanceamento.

/ip firewall mangle

add action=accept chain=prerouting comment=”" disabled=no dst-address=200.200.200.200/29


in-interface=ether1

add action=accept chain=prerouting comment=”" disabled=no dst-address=222.222.222.222/28


in-interface=ether1

É necessário “remover” do balanceamento as redes que estão conectadas diretamente ao mikrotik, neste caso
meus dois links: 200.200.200.200/29 e 222.222.222.222/28, para que não sejam balanceados entre si!

/ip firewall mangle

add action=mark-connection chain=input comment=”____________Inicio Conf PCC (Load


Balance) ————— Marca Conexoes de entrada para que voltem pelo mesmo link” disabled=no
in-interface=ether3 new-connection-mark=EBT_conn passthrough=yes
3 de 6 20/08/2014 23:09
PCC Load balance no Mikrotik | Blog Lcmm.info http://blog.lcmm.info/?p=71

Balance) ————— Marca Conexoes de entrada para que voltem pelo mesmo link” disabled=no
in-interface=ether3 new-connection-mark=EBT_conn passthrough=yes

add action=mark-connection chain=input comment=”" disabled=no in-interface=ether4


new-connection-mark=OI_conn passthrough=yes

Esta regra serve para marcar os pacotes que estão entrando, para que os mesmos saiam pelo link que entraram,
ou seja, caso seja estabelecia uma conexão entrante no link da oi com destino, por exemplo, ao meu servidor web,
esta será marcada como “OI_conn”, e nas próximas regras será direcionado para a saída correta que é a interface
ether4.

/ip firewall mangle

add action=mark-connection chain=output comment=”Load Balance Proxy” connection-state=new


disabled=no dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn passthrough=yes
per-connection-classifier=both-addresses:3/0

add action=mark-connection chain=output comment=”" connection-state=new disabled=no


dst-address=!10.10.10.0/24 new-connection-mark=EBT_conn passthrough=yes per-connection-
classifier=both-addresses:3/1

add action=mark-connection chain=output comment=”" connection-state=new disabled=no


dst-address=!10.10.10.0/24 new-connection-mark=OI_conn passthrough=yes per-connection-
classifier=both-addresses:3/2

Essas 3 regras só se aplicam se você tiver na mesma maquina o PCC e o Web-Proxy ativado, é ai que a mágica
começa, a opção “per-connection-classifier” é o PCC, no qual você deve subdividir seu link, no meu caso tenho
um de 8 Mb e um de 4Mb, ou seja, para não subutilizar o meu link de 8 Mb, devo colocar 2 vezes para o de 8 Mb
(EBT_conn) e um para o de 4Mb (OI_conn).

/ip firewall mangle

add action=mark-routing chain=output comment=”Retorna as conexoes marcadas no inicio, pelo


mesmo link que entraram” connection-mark=EBT_conn disabled=no new-routing-
mark=EBT_traffic passthrough=yes

add action=mark-routing chain=output comment=”" connection-mark=OI_conn disabled=no


new-routing-mark=OI_traffic passthrough=yes

Nas duas regras acima, nos asseguramos que os pacotes que entraram pelos links OI e EBT e que foram marcados
como OI_conn e EBT_conn saiam pela interface correta, ou seja, a interface que eles entraram, para isso é
necessário criar uma tabela de roteamento para cada um dos links, descritos nas regras como OI_traffic e
EBT_traffic, logo abaixo adicionaremos as rotas para essas tabelas.

/ip firewall mangle

add action=mark-connection chain=prerouting comment=”Load Balance (PCC), para os dois links


(OI e EBT) sendo um peso maior o link da EBT por causa da velocidade maior” disabled=no
dst-address-type=!local in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes
per-connection-classifier=both-addresses:3/0

add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local


in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes per-connection-
4 de 6 classifier=both-addresses:3/1 20/08/2014 23:09
PCC Load balance no Mikrotik | Blog Lcmm.info http://blog.lcmm.info/?p=71

add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local


in-interface=ether1 new-connection-mark=EBT_conn passthrough=yes per-connection-
classifier=both-addresses:3/1

add action=mark-connection chain=prerouting comment=”" disabled=no dst-address-type=!local


in-interface=ether1 new-connection-mark=OI_conn passthrough=yes per-connection-
classifier=both-addresses:3/2

Essas 3 regras fazem o Load Balance das conexões que estão passando pelo mikrotik (FORWARD), funcionam da
mesma forma que as regras para o balanceamento do proxy, a diferença é o “chain”, pois as 3 primeiras que são do
proxy, especificamos como “OUTPUT” e neste caso pega o resto que nao se encaixam na primeira (FORWARD),
lembrando que para nao subutilizar um dos links, por causa da diferença de velocidade, coloquei 2 vezes o link
EBT por ter o dobro da velocidade do link OI.

/ip firewall mangle

add action=mark-routing chain=prerouting comment=”Aponta as conexoes do load balance para as


novas tabelas de roteamento, possibilitando o Load Balance(PCC)” connection-mark=EBT_conn
disabled=no in-interface=ether1 new-routing-mark=EBT_traffic passthrough=yes

add action=mark-routing chain=prerouting comment=”____________FIM Load Balance (PCC)”


connection-mark=OI_conn disabled=no in-interface=ether1 new-routing-mark=OI_traffic
passthrough=yes

Essas duas últimas regras encaminham o tráfego que foi marcado(balanceado) nas regras acima para suas tabelas
de roteamento correspondentes.

/ip route

add comment=”Rota Saida Principal EBT sem Load Balance” disabled=no distance=2
dst-address=0.0.0.0/0 gateway=222.222.222.222 scope=30 target-scope=10

add comment=”Rota saida OI sem Load Balance” disabled=no distance=3 dst-address=0.0.0.0/0


gateway=200.200.200.200 scope=30 target-scope=10

add comment=”Rota saida OI para Load Balance” disabled=no distance=1 dst-address=0.0.0.0/0


gateway= 200.200.200.200 routing-mark=OI_traffic scope=30 target-scope=10

add comment=”Rota Saida EBT para Load Balance” disabled=no distance=1 dst-address=0.0.0.0/0
gateway= 222.222.222.222 routing-mark=EBT_traffic scope=30 target-scope=10

add comment=”Rota para Rede interna” disabled=no distance=1 dst-address=10.10.10.0/24


gateway=10.10.10.1 scope=30 target-scope=10

As regras acima criam as tabelas de roteamento necessárias para o funcionamento do PCC Load Balance, as duas
primeiras são rotas estáticas para os ips que não irão utilizar o PCC, as duas seguintes dizem que os pacotes
marcados como OI_traffic e EBT_traffic devem sair pelo gateway do qual entraram para não ter perda de
conexão. A ultima é a rota para a rede interna.

add action=masquerade chain=srcnat comment=”Mascaramento Link EBT” disabled=no out-interface=ether3


add action=masquerade chain=srcnat comment=”Mascaramento Link OI” disabled=no out-interface=ether4
Essas regras são necessárioas para fazer o mascaramento para poder saira para internet.

Bom, espero com este artigo, ajudar as pessoas interessadas em implementar um bom balanceamento de carga no
5 de 6 20/08/2014 23:09
PCC Load balance no Mikrotik | Blog Lcmm.info http://blog.lcmm.info/?p=71

Bom, espero com este artigo, ajudar as pessoas interessadas em implementar um bom balanceamento de carga no
mikrotik. Este artigo ainda não está completo, existem informações importantes que quero colocar aqui, como o
funcionamento do PCC e algumas dicas, mas ficará para outra hora.

6 de 6 20/08/2014 23:09

Você também pode gostar