Load Balance PCC com Mikrotik RouterOS v6
O Load Balance PCC (Per Connection Classifier) é uma técnica utilizada em redes para dividir a carga de conexão entre múltiplos links de internet de maneira eficiente e equilibrada. No Mikrotik RouterOS, o PCC é amplamente utilizado devido à sua flexibilidade e simplicidade, permitindo o uso de múltiplos provedores de internet simultaneamente. Vamos abordar como configurá-lo de forma didática.
Índice
1. Topologia e Configuração dos Links Internet (WAN)
2. Configuração de Failover Avançado
3. Configuração do Load Balance PCC
4. Testes e Conclusão
1. Topologia e Configuração dos Links Internet (WAN)
Para viabilizar a utilização dessa poderosa ferramenta Load Balance PCC, é necessário no mínimo dois Links de Internet. Nesse artigo vamos abordar dois tipos de Links, sendo o Link 1 entregue em DHCP pelo Provedor A , e Link 2 entregue em PPPoE pelo Provedor B. Existem outros tipos de Links e caso tenha interesse veja esse artigo sobre Failover em Equipamentos Mikrotik.
Topologia de exemplo:

1.1 Configuração do Link 1 (DHCP)
Vamos configurar o Link 1, um método comum utilizado pelos provedores de internet. Geralmente, instalam um roteador (gateway) no local do cliente, configurado para fornecer DHCP via Wi-Fi e cabo de rede, garantindo acesso imediato à internet.
Alguns provedores permitem ao cliente personalizar o dispositivo, ajustando o nome da rede Wi-Fi e o intervalo de endereços IP. Caso o acesso ao roteador seja restrito, essa personalização pode ser solicitada diretamente ao suporte técnico, garantindo maior controle sobre as configurações da rede.
Acesse o Roteador Mikrotik “R1” utilizando Winbox.

Insira um comentário nas interfaces para identificar as conexões WAN e LAN, isso é uma boa prática e auxiliará em futuras manutenções. Em seguida vamos configurar o DHCP Client, olhando nossa Topologia a interface ether1 representa nosso Link 1.

Ao clicar no botão “+” no campo DHCP, selecione a interface ether1, que corresponde ao nosso Link 1. Observe que o comentário adicionado na interface facilita a identificação, especialmente em cenários com múltiplos links.
Em seguida, desative as demais opções que não serão necessárias para este cenário, garantindo uma configuração mais limpa e objetiva.
No campo Advanced, insira o script necessário para realizar ações automáticas. Esse script será essencial para o funcionamento correto do Failover Avançado, que será explicado detalhadamente no Capítulo 2. E claro! não podemos esquecer de inserir o comentário “WAN-LINK1” utilizando o botão “Comment”, ele é necessário para o funcionamento do script. Veja o artigo sobre Failover para entender melhor o funcionamento do script.

# Script para monitorar a conectividade do LINK1 # Defina o IP de destino (por exemplo, o DNS do Google) :local destino "192.203.230.10" # Defina o custo padrão e o custo alto :local custoNormal 1 :local custoAlto 50 # Remove a rota com o comentário ROTA-LINK1, se existir /ip route remove [find comment="ROTA-LINK1"] /ip route remove [find comment="MON-LINK1"] # Obtém o gateway atual do DHCP para WAN-LINK1 :local currentGateway [ /ip dhcp-client get [/ip dhcp-client find comment="WAN-LINK1"] gateway ] :log info ("Gateway atual: " . $currentGateway) # Adiciona a rota ROTA-LINK1 com o custo normal /ip route add dst-address=0.0.0.0/0 gateway=$currentGateway distance=$custoNormal comment="ROTA-LINK1" # Verifica se MON-LINK1 já existe antes de criar :if ([:len [/ip route find comment="MON-LINK1"]] = 0) do={ /ip route add dst-address=0.0.0.0/0 gateway=$currentGateway routing-mark=MON-LINK1 distance=$custoNormal comment="MON-LINK1" } # Verifica a conectividade com o IP de destino :if ([/ping $destino count=3] = 0) do={ # Se não houver conectividade, aumenta o custo para 50 :if ([:len [/ip route find comment="ROTA-LINK1" distance=$custoNormal]] > 0) do={ /ip route set [find comment="ROTA-LINK1" distance=$custoNormal] distance=$custoAlto :log warning "Sem conectividade com a internet no LINK1. Aumentando o custo do link para $custoAlto." } } else={ # Se houver conectividade, redefine o custo para o valor padrão :if ([:len [/ip route find comment="ROTA-LINK1" distance=$custoAlto]] > 0) do={ /ip route set [find comment="ROTA-LINK1" distance=$custoAlto] distance=$custoNormal :log info "Conectividade com a internet no LINK1 confirmada. Custo do link ajustado para $custoNormal." } }
Após concluir as configurações, observe que na tabela de rotas (Route List) foram criadas as rotas ROTA-LINK1 e MON-LINK1. Toda vez que a conexão é renovada, o script entra em ação, criando essas rotas e verificando a conectividade com a internet automaticamente. Para entender mais detalhes sobre esse processo, confira o artigo relacionado disponível no site.
1.2 Configuração do Link 2 (PPPoE)
Uma conexão entregue por PPPoE (Point-to-Point Protocol over Ethernet) é um tipo de conexão comumente usada para serviços de internet de banda larga. Neste modelo, o provedor de internet cria uma sessão PPP entre o cliente e o servidor, encapsulando os pacotes de dados dentro do protocolo Ethernet. Isso permite autenticação direta e atribuição dinâmica de IP, geralmente através de nome de usuário e senha.
Primeiro vamos no menu PPP, depois na aba Profiles, em seguida criaremos um novo clicando no botão +. No campo Name vou dar o nome de provedorB, mas vc pode dar o nome que preferir. Agora na aba Protocols precisamos desativar MPLS e Compression, e selecionar a opção required no campo Use Encryption.
Seguindo com as configurações precisamos inserir o script, na aba Scripts. Esse recurso realizará as mesmas funções utilizadas no método do DHCP abordado no Capitulo 1.1.


Não vou entrar em detalhes sobre as configurações, nesse artigo você pode obter maiores informações sobre esse método. Segue abaixo o script utilizado na figura acima.
# Script para monitorar a conectividade em uma conexão PPPoE no RouterOS v6 # Defina o IP de destino (por exemplo, o DNS do Google) :local destino "192.5.5.241" # Defina o custo padrão e o custo alto :local custoNormal 5 :local custoAlto 60 # Nome da interface PPPoE :local pppoeInterface "pppoe-out1" # Remove a rota com o comentário ROTA-LINK2, se existir :if ([:len [/ip route find where comment="ROTA-LINK2"]] > 0) do={ /ip route remove [find comment="ROTA-LINK2"] } # Remove a rota de monitoramento com o comentário MON-LINK2, se existir :if ([:len [/ip route find where comment="MON-LINK2"]] > 0) do={ /ip route remove [find comment="MON-LINK2"] } # Adiciona a rota ROTA-LINK2 com o custo normal usando a interface PPPoE como gateway /ip route add dst-address=0.0.0.0/0 gateway=$pppoeInterface distance=$custoNormal comment="ROTA-LINK2" # Adiciona a rota MON-LINK2 para monitoramento, se não existir :if ([:len [/ip route find comment="MON-LINK2"]] = 0) do={ /ip route add dst-address=0.0.0.0/0 gateway=$pppoeInterface routing-mark=MON-LINK2 distance=$custoNormal comment="MON-LINK2" } # Verifica a conectividade com o IP de destino :if ([/ping $destino count=3] = 0) do={ # Se não houver conectividade, aumenta o custo para custoAlto :if ([:len [/ip route find comment="ROTA-LINK2" distance=$custoNormal]] > 0) do={ /ip route set [find comment="ROTA-LINK2" distance=$custoNormal] distance=$custoAlto :log warning "Sem conectividade com a internet no LINK2 (PPPoE). Aumentando o custo do link para $custoAlto." } } else={ # Se houver conectividade, redefine o custo para o valor padrão :if ([:len [/ip route find comment="ROTA-LINK2" distance=$custoAlto]] > 0) do={ /ip route set [find comment="ROTA-LINK2" distance=$custoAlto] distance=$custoNormal :log info "Conectividade com a internet no LINK2 (PPPoE) confirmada. Custo do link ajustado para $custoNormal." } }
Para finalizar vamos voltar na aba Interface, clicamos no botão +, e selecionamos a opção PPPoE Client, na aba General no campo Interfaces selecionamos a interface ether2 que corresponde ao Link 2, seguindo nossa Topologia. Depois na aba Dial Out, inserimos no campo User o usuário fornecido pelo Provedor B, e no campo Password a senha. No campo Profile selecionamos o profile criado anteriormente no meu exemplo será “provedorB”. Depois desabilitamos campo Add Default Route e inserimos o comentário “WAN-LINK2“, e por ultimo clicamos no botão OK para confirmar as configurações.

Podemos notar que após as configurações também foi criado de forma automática as rotas ROTA-LINK2 e MON-LINK2, vamos ver a seguir como utilizar esses recursos no Failover Avançado.
2. Configuração de Failover Avançado
Nossa estrutura de Links de Internet já está configurada e otimizada para detecção de falhas de conectividade com a Internet. Agora precisamos configurar a lógica que será responsável por gerenciar e executar ações de acordo com o status de cada Link. Esse tema é melhor explicado nesse artigo, vale a pena conferir.
2.1 Política de Roteamento
Uma política de roteamento define regras claras para controlar como o tráfego circula na rede. Ela direciona os pacotes de dados pelos caminhos mais eficientes, garantindo desempenho otimizado e maior estabilidade na conexão. No contexto de failover e múltiplos links de internet, as políticas de roteamento permitem que o administrador force o tráfego a seguir um link específico (por exemplo, da operadora A ou B) para verificar sua conectividade.
Resumindo, essa configuração fixa a comunicação com os IPs dos Root Servers por um caminho específico. Por exemplo, direcionamos o IP 192.203.230.10 exclusivamente pelo link do Provedor A, garantindo que toda comunicação com esse endereço utilize apenas essa rota específica.Caso esse link apresente algum problema, a comunicação com esse IP ficará indisponível. Essa configuração permite monitorar o status real de cada link, já que o funcionamento da comunicação dependerá diretamente da disponibilidade do link especificado.
Para facilitar vou deixar abaixo o script para criar a politica que iremos utilizar:
# Script para criar a politica de roteamento do Failover /ip route rule add action=lookup-only-in-table comment=MON-LINK1 dst-address=192.203.230.10/32 table=MON-LINK1 /ip route rule add action=lookup-only-in-table comment=MON-LINK1 dst-address=208.67.222.222/32 table=MON-LINK1 /ip route rule add action=lookup-only-in-table comment=MON-LINK2 dst-address=192.5.5.241/32 table=MON-LINK2 /ip route rule add action=lookup-only-in-table comment=MON-LINK2 dst-address=198.97.190.53/32 table=MON-LINK2
Essa política pode ser verificada no campo “Rules” na tabela de roteamento (Route List) na versão 6 do RouterOS. Você pode confirmar a configuração e analisar como as rotas se aplicam, garantindo controle preciso sobre o tráfego de dados e a eficiência do roteamento.

2.2 Configuração de NAT dos Links
No nosso cenário, precisaremos aplicar regras de NAT tanto para o link recebido do Provedor A quanto para o link do Provedor B.
Na topologia definida, determinamos que a rede LAN usará o prefixo 172.16.0.0/24 (range de IP). Com isso, criaremos uma lista de IPs para simplificar a configuração das regras no NAT e no Mangle.
Clique no menu IP, em seguida na opção Firewall e, depois, na aba Address List. No botão “+”, preencha o campo Name com o nome da lista e insira o endereço IP no campo Address, conforme demonstrado no script e na imagem a seguir:
# Script para criar lista de IPs /ip firewall address-list add address=172.16.0.0/24 list=NAT /ip firewall address-list add address=172.16.0.0/24 list=REDE-LOCAL /ip firewall address-list add address=172.16.0.10 list=SEM-BALANCE

Para configurar o NAT para o nosso Link 1, basta voltar na aba NAT, clicar no botão +, e seguir os passos conforme as figuras abaixo:


E para configurar o NAT para o Link 2, o procedimento será o mesmo, ainda na aba NAT, clique no botão +, e siga a os passos da figura a seguir:

2.3 Configuração do Agendador (Scheduler)
Nesta etapa, vou explicar de forma resumida a lógica do Failover. Como mostram as configurações anteriores, o script nas interfaces DHCP e PPPoE executa uma rotina que verifica automaticamente a conectividade sempre que o estado da interface muda. Isso significa que, caso a conexão física caia, o script entra em ação e recria automaticamente as regras na tabela de roteamento, restaurando a conectividade de forma eficiente e sem interrupções.
O Link 1 atua como o principal em nossa lógica de rede, assumindo a prioridade para direcionar o tráfego e garantir uma conexão eficiente. Quando está conectado à internet, ele assume prioridade. Em caso de falha, ajustamos automaticamente o parâmetro de distância da rota para um valor maior que o do Link 2, ativando assim a comutação para o segundo link de forma eficiente e sem interrupções.
Contudo, essas ações ocorrem apenas uma vez. Por esse motivo, utilizamos o recurso Scheduler (Agendador). Com uma rotina de verificação configurada para rodar em intervalos de tempo definidos, é possível executar comandos automaticamente, de acordo com o status de cada link.
Vamos começar criando os scripts que serão responsáveis por executar os comandos com base no status de cada link. Clicando no Menu System, na opção Scripts. Clique no botão +, para adicionar um novo script, na imagem a seguir já temos alguns criados:

Em nosso cenário vamos utilizar 4 scripts sedo eles: ligar-link1, ligar-link2, desligar-link1 e desligar-link2, na figura a seguir vou demonstrar como fazer:
- ligar-link1 e ligar-link2

# Script ligar-link1 /ip dhcp-client release [find comment~"LINK1"] delay 3 /ip firewall mangle enable [find comment~"LINK1"] /ip firewall connection remove [/ip firewall connection find]
# Script ligar-link2 /interface pppoe-client disable pppoe-out1 delay 3 /interface pppoe-client enable pppoe-out1 delay 3 /ip firewall mangle enable [find comment~"LINK2"] /ip firewall connection remove [/ip firewall connection find]
- desligar-link1 e desligar-link2

# Script desligar-link1 /ip dhcp-client release [find comment~"LINK1"] /ip firewall mangle disable [find comment~"LINK1"] delay 3 /ip firewall connection remove [/ip firewall connection find]
# Script desligar-link2 /interface pppoe-client disable pppoe-out1 delay 3 /interface pppoe-client enable pppoe-out1 /ip firewall mangle disable [find comment~"LINK2"] delay 3 /ip firewall connection remove [/ip firewall connection find]
Agora precisamos configurar o agendador (Scheduler), clicando no menu System, e depois na opção Scheduler, e no botão +, vamos adicionar um novo, você pode dar o nome que preferir, no nosso exemplo vou configurar o mon-link1 e mon-link2.

- mon-link1 e mon-link2

Segue abaixo e script utilizado na figura acima, o script já está configurado considerando o cenário proposto, você pode ajustar de acordo com sua necessidade.
# Script mon-link1 # Definir variáveis globais para IPs monitorados :local Wan1 "192.203.230.10" :local Wan2 "208.67.222.222" # Variáveis globais do último status conhecido dos links :global lastWan1Status true :global lastWan2Status true :global lastNotifiedStatus; # Último status notificado (true se ao menos um link estava disponível) # Inicializar o status atual dos links como true (disponível) :local Wan1Status true :local Wan2Status true :local currentStatus true; # Status atual (true se ao menos um link estiver disponível) # Log para verificar a execução do script :log info "### Iniciando verificação de status do LINK1 ###" # Verificar o estado atual do link Wan1 if ([/ping $Wan1 count=3 interval=1] = 0) do={ :set Wan1Status false :log warning "### Monitoramento1 ($Wan1) está INDISPONÍVEL ###" } else={ :log info "### Monitoramento1 ($Wan1) está DISPONÍVEL ###" } # Verificar o estado atual do link Wan2 if ([/ping $Wan2 count=3 interval=1] = 0) do={ :set Wan2Status false :log warning "### Monitoramento2 ($Wan2) está INDISPONÍVEL ###" } else={ :log info "### Monitoramento2 ($Wan2) está DISPONÍVEL ###" } # Definir o status atual geral (true se pelo menos um link estiver disponível) :set currentStatus ($Wan1Status || $Wan2Status) # Verificar se houve mudança no status geral em comparação ao último notificado if ($currentStatus != $lastNotifiedStatus) do={ # Se ambos os links estão indisponíveis, notificar falha apenas uma vez if ($currentStatus = false) do={ /system script run desligar-link1 :log warning "### LINK1 INDISPONIVEL! ###" } else={ /system script run ligar-link1 # Se pelo menos um link está disponível, notificar normalização :log warning "### LINK1 NORMALIZADO! ###" } # Atualizar o último status notificado para evitar notificações repetidas :set lastNotifiedStatus $currentStatus } else={ :log info "### Nenhuma alteração no status do LINK1 ###" }
# Script mon-link2 # Definir variáveis globais para IPs monitorados :local Wan3 "192.5.5.241" :local Wan4 "198.97.190.53" # Variáveis globais do último status conhecido dos links :global lastWan3Status true :global lastWan4Status true :global lastNotifiedStatus2; # Último status notificado (true se ao menos um link estava disponível) # Inicializar o status atual dos links como true (disponível) :local Wan3Status true :local Wan4Status true :local currentStatus true; # Status atual (true se ao menos um link estiver disponível) # Log para verificar a execução do script :log info "### Iniciando verificação de status do LINK2 ###" # Verificar o estado atual do link Wan3 if ([/ping $Wan3 count=3 interval=1] = 0) do={ :set Wan3Status false :log warning "### Monitoramento3 ($Wan3) está INDISPONÍVEL ###" } else={ :log info "### Monitoramento3 ($Wan3) está DISPONÍVEL ###" } # Verificar o estado atual do link Wan4 if ([/ping $Wan4 count=3 interval=1] = 0) do={ :set Wan4Status false :log warning "### Monitoramento4 ($Wan4) está INDISPONÍVEL ###" } else={ :log info "### Monitoramento4 ($Wan4) está DISPONÍVEL ###" } # Definir o status atual geral (true se pelo menos um link estiver disponível) :set currentStatus ($Wan3Status || $Wan4Status) # Verificar se houve mudança no status geral em comparação ao último notificado if ($currentStatus != $lastNotifiedStatus2) do={ # Se ambos os links estão indisponíveis, notificar falha apenas uma vez if ($currentStatus = false) do={ /system script run desligar-link2 :log warning "### LINK2 INDISPONIVEL! ###" } else={ /system script run ligar-link2 # Se pelo menos um link está disponível, notificar normalização :log warning "### LINK2 NORMALIZADO! ###" } # Atualizar o último status notificado para evitar notificações repetidas :set lastNotifiedStatus2 $currentStatus } else={ :log info "### Nenhuma alteração no status do LINK2 ###" }
3. Configuração do Load Balance PCC
O PCC (Per Connection Classifier) é uma técnica amplamente utilizada em roteadores MikroTik para implementar Load Balance, permitindo a distribuição eficiente do tráfego de internet entre múltiplos links. Essa abordagem classifica conexões com base em critérios específicos, como o endereço IP de origem, destino, porta ou combinações desses fatores.
O PCC tem como principal objetivo garantir que um link específico roteie cada conexão individual de forma consistente, enquanto distribui as múltiplas conexões de maneira equilibrada entre os links disponíveis. Isso é especialmente útil para cenários onde é necessário gerenciar vários provedores de internet, otimizando o uso da largura de banda e oferecendo maior redundância.
3.1 Vantagens do PCC no Load Balance
- Consistência de Conexões: Uma vez que uma conexão é atribuída a um link, ela permanece sendo roteada por esse mesmo link, garantindo estabilidade em sessões críticas, como operações bancárias ou transmissões de vídeo.
- Equilíbrio de Carga: O tráfego é distribuído de forma proporcional entre os links, garantindo o uso eficiente dos recursos de internet disponíveis.
- Escalabilidade: Fácil de adaptar para ambientes com múltiplos links ou alterações na infraestrutura de rede.
Você configura o PCC por meio de regras no Firewall Mangle, que marcam as conexões com base na classificação definida. Em seguida, utiliza essas marcações para criar regras de roteamento, determinando qual link será utilizado para cada fluxo de dados.
Essa abordagem oferece um método robusto para otimizar a conectividade e aumentar a confiabilidade da rede.
Na figura a seguir demonstro como configurar o Mangle:

Na primeira regra, configuramos uma regra (Bye-pass), ela serve para não aplicar as regras do Mangle na comunicação da rede local. Definimos nossa rede local com o prefixo 172.16.0.0/24, seguindo a topologia. Se um PC com o IP 172.16.0.50 precisar se comunicar com um servidor com o IP 172.16.0.100, as regras do Mangle não se aplicarão.
Aqui vamos fazer uso do Address List configurado anteriormente.

# Script Mangle para Acesso Rede Interna (Bye-pass) /ip firewall mangle add action=accept chain=prerouting comment="Acesso Rede Interna (Bye-pass)" dst-address-list=REDE-LOCAL src-address-list=REDE-LOCAL
A segunda regra será muito útil para os casos onde precisamos que um determinado IP da nossa Rede Local, não passe pelas regras do Mangle, basta que adicione na lista “SEM-BALANCE”, e pronto!

# Script Mangle para Acesso Fora do Balance /ip firewall mangle add action=accept chain=prerouting comment="Acesso Fora do Balance" src-address-list=SEM-BALANCE
Agora na terceira regra é configurado a marcação de conexão de entrada do Link 1.

# Script Mangle para Macacao de Conexao de Entrada LINK1 /ip firewall mangle add action=mark-connection chain=prerouting comment="Macacao de Conexao de Entrada LINK1" connection-mark=no-mark in-interface=ether1 new-connection-mark=con-link1 passthrough=yes
Na quarta regra criaremos a marcação de conexão de entrada do Link 2.

# Script Mangle para Macacao de Conexao de Entrada LINK2 /ip firewall mangle add action=mark-connection chain=prerouting comment="Macacao de Conexao de Entrada LINK2" connection-mark=no-mark in-interface=pppoe-out1 new-connection-mark=con-link2 passthrough=yes
Na quinta regra, vamos configurar a marcação de rota de saída do Link 1.

# Script Mangle para Macacao de Rota de Saida LINK1 /ip firewall mangle add action=mark-routing chain=output comment="Macacao de Rota de Saida LINK1" connection-mark=con-link1 new-routing-mark=MON-LINK1 passthrough=yes
Em nossa sexta regra, vamos configurar a marcação de rota de saída do Link 2.

# Script Mangle para Macacao de Rota de Saida LINK2 /ip firewall mangle add action=mark-routing chain=output comment="Macacao de Rota de Saida LINK2" connection-mark=con-link2 new-routing-mark=MON-LINK2 passthrough=yes
E finalmente a cereja do bolo, nas regras a seguir vamos configurar nosso classificador de conexão ou PCC. Mas primeiro precisamos compreender a forma correta de fazer, vamos relembrar um pouco sobre o MDC.
O cálculo do MDC (Máximo Divisor Comum) é fundamental para determinar a quantidade de regras necessárias no PCC (Per Connection Classifier), garantindo uma distribuição equilibrada do tráfego entre os links no Load Balance.
3.2 Por que usar o MDC no PCC?
O MDC é usado para dividir o tráfego proporcionalmente entre os links de internet, considerando suas capacidades (largura de banda). Ele define quantas partes cada link receberá, garantindo que a distribuição seja justa e eficiente.
Como calcular o MDC?
- Determine as larguras de banda dos links.
Por exemplo, suponha que você tenha dois links:- Link 1: 50 Mbps
- Link 2: 30 Mbps
- Encontre o MDC das larguras de banda.
No exemplo, o MDC entre 50 e 30 é 10. - Divida as larguras de banda pelo MDC.
- Link 1: 50÷10=550 \div 10 = 550÷10=5
- Link 2: 30÷10=330 \div 10 = 330÷10=3
Isso significa que serão necessárias 8 regras de PCC (5 para o Link 1 e 3 para o Link 2) para que o tráfego seja distribuído proporcionalmente.
3.3 Aplicação no PCC
Baseado no cálculo, configuramos as regras para enviar 5 conexões ao Link 1 e 3 ao Link 2. Definimos o total de classificações no PCC como 8, e cada link recebe sua proporção correspondente.
Essa abordagem assegura uma divisão eficiente e mantém a consistência das conexões durante o uso do Load Balance.
Mas calma! Para ajudar nesse trabalho criei uma calculadora muito simples de usar, clique aqui.
Agora que já sabemos como calcular, e considerado a topologia proposta nesse artigo, se você testou a calculadora deve ter encontrado o seguinte resultado:
- Total de Regras (PCC): 7
- Total de Regras (PCC) Link1 : 5
- Total de Regras (PCC) Link2 : 2
Para facilitar vou demonstrar como criar a primeira regra PCC para o Link 1, e as demais regras vou deixar aqui o script completo.


Não há segredo, as demais regras seguem o mesmo padrão. Caso você esteja utilizando um Mikrotik com nomes de interfaces diferentes dos nossos exemplos, será necessário adaptar o script para refletir o nome correspondente das interfaces que você utilizará.

Para utilizar o script, basta passar o mouse sobre o campo. Na parte superior, aparecerá um botão Copy. Clique nesse botão e, em seguida, cole o script no campo Terminal do Winbox.


# Script Mangle para Marcacao PCC /ip firewall mangle add action=mark-connection chain=prerouting comment="Marcacao PCC 5/1 LINK1" connection-mark=no-mark dst-address-type=!local in-interface=ether3 new-connection-mark=con-link1 passthrough=yes per-connection-classifier=both-addresses:5/1 /ip firewall mangle add action=mark-connection chain=prerouting comment="Marcacao PCC 5/2 LINK1" connection-mark=no-mark dst-address-type=!local in-interface=ether3 new-connection-mark=con-link1 passthrough=yes per-connection-classifier=both-addresses:5/2 /ip firewall mangle add action=mark-connection chain=prerouting comment="Marcacao PCC 5/3 LINK1" connection-mark=no-mark dst-address-type=!local in-interface=ether3 new-connection-mark=con-link1 passthrough=yes per-connection-classifier=both-addresses:5/3 /ip firewall mangle add action=mark-connection chain=prerouting comment="Marcacao PCC 5/4 LINK1" connection-mark=no-mark dst-address-type=!local in-interface=ether3 new-connection-mark=con-link1 passthrough=yes per-connection-classifier=both-addresses:5/4 /ip firewall mangle add action=mark-connection chain=prerouting comment="Marcacao PCC 2/0 LINK2" connection-mark=no-mark dst-address-type=!local in-interface=ether3 new-connection-mark=con-link2 passthrough=yes per-connection-classifier=both-addresses:2/0 /ip firewall mangle add action=mark-connection chain=prerouting comment="Marcacao PCC 2/1 LINK2" connection-mark=no-mark dst-address-type=!local in-interface=ether3 new-connection-mark=con-link2 passthrough=yes per-connection-classifier=both-addresses:2/1
Ainda resta fazer as configurações de marcação de rota de saída do Link 1 e do Link 2, que vou demonstrar a seguir.
- Marcação de Rota de Saída Link 1

# Script Mangle para Marcacao de Rota de Saida LINK1 /ip firewall mangle add action=mark-routing chain=prerouting comment="Marcacao de Rota de Saida LINK1" connection-mark=con-link1 in-interface=ether3 new-routing-mark=MON-LINK1 passthrough=yes
- Marcação de Rota de Saída Link 2

# Script Mangle para Marcacao de Rota de Saida LINK2 /ip firewall mangle add action=mark-routing chain=prerouting comment="Marcacao de Rota de Saida LINK2" connection-mark=con-link2 in-interface=ether3 new-routing-mark=MON-LINK2 passthrough=yes
Agora para finalizar precisamos configurar nossa rede LAN, seguindo a topologia, vamos no campo IP, e depois na opção Addresses, clicamos no botão +, e adicionamos o IP 172.16.0.1/24 e no campo interface selecionamos a ether3, que corresponde a nossa rede LAN.

Agora vamos configurar um servidor DHCP para fornecer IP de forma dinâmica para nossos equipamentos da rede local. Para isso devemos ir no menu IP, depois na opção DHCP Server, e clicamos no botão DHCP Setup.

Continuando a configuração, selecione a interface ether3 e clique no botão “Next”. O sistema exibirá informações sobre o prefixo, gateway, intervalo de IPs (range DHCP), servidor DNS e o Lease Time, que define o período em que o sistema reserva um endereço IP para um dispositivo. Finalizamos clicando no botão ok.

4. Testes e Conclusão
4.1 Teste de Failover
Aqui, vamos verificar se as rotinas de checagem da conectividade dos links com a Internet estão funcionando corretamente.
Validaremos a política de roteamento configurada, na qual definimos os IPs de monitoramento para o Link 1, fornecido pelo Provedor A. Os IPs utilizados são: 192.203.230.10 e 208.67.222.222.
Por fim, realizarei testes de ping para os IPs mencionados, a fim de confirmar se há conectividade e assegurar o correto funcionamento da configuração.

Como demonstrado acima, está respondendo como previsto, agora vou desativar a interface virada para o Provedor A, para confirmar que esta comunicação só está apontado para o Link 1.
Na figura a seguir podemos confirmar que realmente está apontado somente para o Link 1, pois a comunicação caiu.

Agora, é necessário validar a checagem periódica do status do Link 1. Para isso, simularei uma falha no Provedor A. Esse tipo de problema, em muitos casos, não desconecta a interface do cliente com o gateway da operadora, exigindo um método que verifique se o link ainda possui conectividade com a Internet.
Na figura abaixo, observa-se o Link 1 funcionando normalmente. Realizamos três testes de ping: dois para os IPs de monitoramento e um para o site google.com.br. Na tabela de roteamento (Route List), observamos que a rota padrão do Link 1 (ROTA-LINK1) está ativa, enquanto a rota do Link 2 (ROTA-LINK2) permanece em espera (standby). O Link 1 permanece como principal, enquanto o Link 2 fica em espera, pronto para ser ativado automaticamente caso o primeiro sofra uma falha. Esse mecanismo garante que a conectividade da rede seja mantida sem interrupções, utilizando o segundo link sempre que necessário.

Ao simular uma falha no Provedor A, é possível observar na figura a seguir que a comunicação com o Link 1 (ROTA-LINK1) tornou-se indisponível. Como resultado, ocorreu a comutação automática para o Link 2. Agora, a rota padrão do Link 2 (ROTA-LINK2), fornecido pelo Provedor B, está ativa como principal. O Failover foi configurado corretamente e está operando conforme esperado. Isso garante a continuidade da conectividade sem interrupções, confirmando que o Link 2 assumiu a rota principal sem falhas, conforme o planejado.
4o mini

As ações realizadas pela rotina também gera Log, na figura abaixo podemos observar as mensagem de atualização de status do link:

Embora seja possível desativar as mensagens, mantê-las ativas é útil para fins didáticos, pois facilita a compreensão da lógica que gerencia as ações necessárias com base no status atualizado de cada link. Consulte o artigo específico sobre Failover para obter uma análise mais aprofundada do tema, onde abordamos o assunto com mais detalhes e exemplos práticos.
4.2 Teste de Comutação nas Regras do Mangle
Agora, realizaremos um teste simulando um PC conectado ao roteador R1, conforme indicado em nossa topologia.
Na figura abaixo, estão listadas todas as regras configuradas para o PCC. É possível observar que, inicialmente, não há dados registrados. Realizarei um teste de ping no PC1 para o site uol.com.br, os resultados serão observados para analisar como as regras do PCC impactam o processo.

Na figura abaixo podemos observar que a comunicação saiu pelo Link1, e utilizou a regra de PCC 5/3.

O método Per Connection Classifier (PCC) com a configuração both addresses utiliza tanto o endereço IP de origem quanto o de destino para classificar as conexões. Isso significa que cada combinação única de origem e destino será atribuída a um link específico, garantindo consistência para a mesma conexão.
Por que utilizar o método “both addresses“?
- Sessões Persistentes: Sites bancários e outras aplicações sensíveis frequentemente utilizam verificações de IP para manter a segurança das sessões. Alterações no caminho de roteamento podem resultar em desconexões. O PCC com “both addresses” evita isso, mantendo a conexão no mesmo link.
- Distribuição Equilibrada: Considerando ambas as extremidades da comunicação, o tráfego é distribuído de maneira eficiente, preservando a consistência sem sacrificar o desempenho.

Neste teste, iremos monitorar a comutação do link ativo e a desativação automática das regras do Mangle associadas ao link que se tornou indisponível. Abaixo, apresentamos um cenário inicial no qual ambos os links estão funcionando corretamente, sem falhas.

Vamos ver o que acontece quando o Link 1 fica indisponível.
Observamos que, para o cliente, a conexão permanece ativa. Além disso, as regras associadas ao Link 1 são desativadas automaticamente. Assim que o Link se restabelecer, o sistema reativará automaticamente as regras, garantindo a continuidade do serviço sem interrupções.

Vou normalizar o Link 1 e realizar o mesmo teste, só que, agora interrompendo o Link 2. As regras relacionadas com Link 2, são desativadas automaticamente e serão normalizadas assim que o Link for restabelecido.

Conclusão
O artigo detalha a configuração do Load Balance PCC no RouterOS v6 da MikroTik, abordando desde a teoria básica até a aplicação prática. Ele explica como distribuir conexões de forma equilibrada entre múltiplos links de internet, garantindo melhor desempenho e estabilidade. As regras no Firewall Mangle, NAT, e a lógica de failover são abordadas de forma clara e precisa. O artigo mostra, passo a passo, como implementar essas configurações para criar uma rede eficiente e resiliente. Além disso, destaca a importância de cada elemento dentro da arquitetura de rede, proporcionando uma visão abrangente de como otimizar o tráfego e garantir a continuidade dos serviços.
A conclusão destaca que o método PCC é uma solução poderosa para balanceamento de carga, especialmente para redes que necessitam de consistência, como acessos a bancos. O conteúdo é útil para profissionais e entusiastas que buscam otimizar suas redes.
Agradecemos por acompanhar o conteúdo até o final! Esperamos que este material tenha sido útil e contribuído para o seu aprendizado. Se quiser apoiar nosso trabalho, sua contribuição será muito bem-vinda e nos ajudará a continuar trazendo mais conteúdos de qualidade.
Fique à vontade para deixar seus comentários, sugestões ou dúvidas – adoramos ouvir o feedback de vocês! E não se esqueça de seguir nossas redes sociais para ficar por dentro de todas as novidades. Caso tenha interesse, temos um canal no Youtube com vídeos que podem ajudar com esse assunto e outros. Obrigado pela presença e pelo apoio!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei.