TI SEM HESITAR https://tisemhesitar.com.br/ Tutoriais práticos de redes e telecom para configuração de equipamentos e servidores. Thu, 12 Dec 2024 22:44:17 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.7.1 https://tisemhesitar.com.br/wp-content/uploads/2024/11/logo-512x512-1-150x150.png TI SEM HESITAR https://tisemhesitar.com.br/ 32 32 Load Balance PCC com Mikrotik RouterOS v6 https://tisemhesitar.com.br/load-balance-pcc-com-mikrotik-routeros-v6/ https://tisemhesitar.com.br/load-balance-pcc-com-mikrotik-routeros-v6/#respond Tue, 19 Nov 2024 21:13:36 +0000 https://tisemhesitar.com.br/?p=5008 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 […]

The post Load Balance PCC com Mikrotik RouterOS v6 appeared first on TI SEM HESITAR.

]]>
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?
  1. Determine as larguras de banda dos links.
    Por exemplo, suponha que você tenha dois links:
    • Link 1: 50 Mbps
    • Link 2: 30 Mbps
  2. Encontre o MDC das larguras de banda.
    No exemplo, o MDC entre 50 e 30 é 10.
  3. 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?

  1. 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.
  2. 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. 

The post Load Balance PCC com Mikrotik RouterOS v6 appeared first on TI SEM HESITAR.

]]>
https://tisemhesitar.com.br/load-balance-pcc-com-mikrotik-routeros-v6/feed/ 0
Failover em Equipamentos Mikrotik com RouterOS v6 https://tisemhesitar.com.br/failover-em-equipamentos-mikrotik/ https://tisemhesitar.com.br/failover-em-equipamentos-mikrotik/#respond Sun, 03 Nov 2024 13:59:40 +0000 https://tisemhesitar.com.br/?p=908 No cenário atual quando o assunto é Internet, garantir a continuidade do serviço é essencial. O failover é uma técnica que assegura que, se a conexão principal cair, outra conexão […]

The post Failover em Equipamentos Mikrotik com RouterOS v6 appeared first on TI SEM HESITAR.

]]>
No cenário atual quando o assunto é Internet, garantir a continuidade do serviço é essencial. O failover é uma técnica que assegura que, se a conexão principal cair, outra conexão secundária (ou backup) assume automaticamente, evitando interrupções. Em ambientes com roteadores Mikrotik, é possível configurar failover para manter a conexão sempre ativa, mesmo que haja falhas na rede.

O Que É Failover?

Failover é o mecanismo que permite que uma conexão de rede automaticamente assuma o controle quando outra falha. Esse processo reduz o tempo de inatividade e garante que os serviços dependentes de rede continuem funcionando sem intervenção manual.

Esse recurso pode ser aplicado em outros fabricantes de equipamentos, porém vamos abordar de forma pratica como configurar e utilizar esse recurso em equipamentos Mikrotik dado a facilidade visual e também o seu custo bastante acessível.

Configurando o Failover no Mikrotik com RouterOS v6

Os links de Internet podem ser entregues aos clientes de diferentes formas, como por exemplo DHCP, PPPoE ou IP estático. Cada tipo de link requer uma configuração específica para habilitar o failover de forma eficiente. Vamos ver como configurar o failover para cada um desses cenários.

Aqui vale um ponto de atenção, na versão 6 do RouterOS precisamos garantir que range de IP recebido dos Provedores para nosso roteador de borda (gateway), não sejam iguais, pois isso provocaria uma instabilidade, então caso precise manter a versão 6 em seu equipamento, verifique com sua operadora a possibilidade de trocar o prefixo caso seja necessário.

Ex.: Provedor A forneceu prefixo 192.168.100.1/24, e o Provedor B forneceu o mesmo prefixo, você precisará solicitar a troca de um deles.

Logo abaixo temos uma topologia que vamos utilizar de exemplo:

Topologia Failover com Mikrotik V6

Tópicos

  1. Failover com Link por DHCP
  2. Failover com Link PPPoE
  3. Failover com Link IP Estático
  4. Comutação Automática entre os Links

Preparação

Antes de abordar os tipos de Link e configura-los em nosso cenário, precisamos configurar uma importante ferramenta para garantir a integridade dos Links recebidos pelos Provedores, fazendo uso de uma política de roteamento.

Uma política de roteamento é um conjunto de regras definidas para controlar o fluxo de tráfego na rede, determinando por qual caminho os pacotes de dados serão enviados. 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.

Ao configurar uma política de roteamento, o objetivo é direcionar consultas de IP para determinados links e monitorar se esses links estão ativos e conectados à internet. Dessa forma, se um link apresentar falhas, o roteador automaticamente redirecionará o tráfego pelo link alternativo, garantindo a continuidade do acesso.

Neste artigo estamos considerando o uso da versão 6 do RouterOS, e para monitorar os Links recebidos pelos Provedores, iremos utilizar 4 IPs de Root Servers, você pode conferir no site root-servers.org. Vamos utilizar 2 IPs como referencia para cada Link, isso irá garantir que caso um servidor deixe de responder por algum problema, o segundo IP seja utilizado como um backup de referencia para testar se ainda existe conectividade com Internet.

Resumindo, essa configuração fixa a comunicação com os IPs dos Root Servers por um caminho específico. Por exemplo, utilizamos o IP 192.203.230.10 e, com a regra criada, definimos que toda comunicação para esse endereço será direcionada exclusivamente pelo link do Provedor A. 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

Abaixo é demonstrado como ficará após criar as regras.

Quando o link de Internet é entregue via DHCP, o roteador obtém o IP automaticamente do provedor. Neste caso, a configuração do failover deverá ser realizada de forma dinâmica, pois a rota será atualizada automaticamente toda vez que o IP mudar.

Nesse caso utilizaremos um script que realizará uma verificação prévia, criando de forma automática a rota default e a rota de monitoramento do link, que já irei abordar a seguir.

1.1 Configuração da Interface DHCP (WAN1)

  • Primeiro, configure a interface WAN para obter IP via DHCP para o LINK1, pode ser realizado via comando ou via interface gráfica do Winbox.
# Comando para configurar DHCP-Client

/ip dhcp-client add add-default-route=no comment=WAN-LINK1 disabled=no interface=ether1
  • Segundo passo, é inserir o script no campo “Advanced” do “DHCP Client” para criar a rota default e a rota de monitoramento do LINK1.
# 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."
    }
}
  • Agora veja como realizar as configurações via Winbox.

No menu IP, selecione a opção DHCP Client. 👆🏿

Click no botão + conforme a imagem acima. 👆🏿

Aqui você deve selecionar a interface correspondente ao Provedor A conforme ilustrado em nossa topologia, e selecionar no campo Add Default Route a opção “no“.

Atenção: Não esqueça de inserir o comentário (clicando no botão Comment) com a seguinte informação WAN-LINK1, essa informação será utilizada pelo script para manipulação da conexão, trataremos disso mais adiante.

Agora vamos inserir o script clicando na aba Advanced.

Após inserir o script basta clicar em Apply e em seguida no botão OK.

Já podemos observar que na Janela Route List, que foi criado de forma automática a ROTA-LINK1 que será nossa rota default para o Provedor A, e também foi criado a rota MON-LINK1 que será usada para verificar a conectividade do link com a Internet.

1.2 Configuração da Interface DHCP (WAN2)

  • Vamos repetir os mesmos passos já abordado anteriormente para a nossa interface correspondente ao Provedor B, que será o nosso link Backup.

Para agilizar o processo podemos utilizar o comando a seguir para criar nosso DHCP Client para o LINK2, e em seguida inserir o script na aba Advanced.

# Comando para configurar DHCP-Client

/ip dhcp-client add add-default-route=no comment=WAN-LINK2 disabled=no interface=ether2

Para finalizar nossa configuração basta inserir o script abaixo na aba Advanced.

# Script para monitorar a conectividade
# 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

# Remove a rota com o comentário ROTA-LINK2, se existir
/ip route remove [find comment="ROTA-LINK2"]
/ip route remove [find comment="MON-LINK2"]

# Obtém o gateway atual do DHCP para WAN-LINK2
:local currentGateway [ /ip dhcp-client get [/ip dhcp-client find comment="WAN-LINK2"] gateway ]

:log info ("Gateway atual: " . $currentGateway)

# Adiciona a rota ROTA-LINK2 com o custo normal
/ip route add dst-address=0.0.0.0/0 gateway=$currentGateway distance=$custoNormal comment="ROTA-LINK2"

# Verifica se MON-LINK2 já existe antes de criar
:if ([:len [/ip route find comment="MON-LINK2"]] = 0) do={
    /ip route add dst-address=0.0.0.0/0 gateway=$currentGateway 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 50
    :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. 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 confirmada. Custo do link ajustado para $custoNormal."
    }
}

Na imagem a seguir podemos observar (Route List) as duas rotas default ROTA-LINK1, ROTA-LINK2, e de monitoramento MON-LINK1, MON-LINK2 criada automaticamente, e no nosso exemplo deixamos como principal a ROTA-LINK1, mas é possível mudar caso precise, é só alterar o valor do custo [ :local custoNormal ], no inicio do script e pronto.

1.3 Configuração do NAT

Será necessário configurar uma regra de NAT para cada Link, segue abaixo um passo a passo:

  • Link 1
  • Link 2

Aqui vale ressaltar que a configuração de NAT precisa ser configurada de acordo com a forma que está sendo recebido o link, devemos sempre informar a interface que estamos recebendo o link, e quais prefixos precisam ser tratado pela regra, isso pode ser resolvido utilizando uma lista.

Esse artigo não tem como foco se aprofundar no recurso NAT, caso tenha interesse nesse tema temos um artigo dedicado a esse assunto.

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.

Características principais do PPPoE:

  • Autenticação: Requer credenciais de login (usuário e senha) para estabelecer a conexão.
  • Atribuição Dinâmica de IP: Permite que o provedor atribua automaticamente um IP ao cliente a cada conexão.
  • Gerenciamento de Sessão: A conexão é mantida durante uma sessão única, ideal para redes onde o acesso precisa ser autenticado.
  • Encapsulamento de Pacotes: Utiliza o protocolo PPP sobre uma rede Ethernet, o que torna compatível com redes locais e de longa distância.

Essa tecnologia é amplamente adotada por provedores devido à sua facilidade de configuração e controle de acesso ao serviço de internet. Ainda considerando nossa Topologia, vamos mudar a forma de entrega do link do Provedor B para PPPoE.

2.1 Configuração do Profiles para conexão PPPoE

Precisamos estabelecer algumas premissas importantes assim que o link é estabelecido com o Provedor. Assim como no link recebido via DHCP utilizamos um script para realizar algumas configurações de forma automática, será necessário fazer uso desse mesmo recurso aqui também.

Como configurar o Profile?

Para isso precisamos acessar a opção no menu a opção PPP.

No campo Profiles precisamos definir um novo clicando no botão +, aqui vamos definir poucos parâmetros. Você também pode utilizar os modelos default que já vem criado, nesse exemplo vamos criar um novo para demonstrar como fazer caso precise criar mais de uma conexão.

Agora precisamos definir um nome para o nosso profile, os protocolos e script que iremos utilizar nessa conexão, os demais campos não iremos alterar.

Segue abaixo o script que precisa ser configurado no campo Scripts conforme imagem 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=$destino 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."
    }
}

2.2 Configuração da Interface PPPoE Client

Nessa etapa vamos configurar a interface PPPoE Client, definindo por qual interface de rede iremos receber a conexão, o usuário e senha da conexão (Deverá ser fornecido pelo Provedor), e qual profile será utilizado na conexão (aqui iremos utilizar o profile configurado anteriormente).

Nas figuras a seguir podemos ver um antes de pois de ativar nossa configuração PPPoE:

  • Antes
  • Depois

A rota padrão e a rota de monitoramento são criadas de forma automática e sempre é realizado uma checagem se o link está com conectividade com a Internet e como medida de tratamento caso seja detectado algum problema é atribuído um custo alto para o link, e mais adiante vamos abordar a importância de se realizar essa ação.

2.3 Configuração do NAT

Para configurar o NAT no cenário demonstrado anteriormente é bem simples, segue abaixo um passo a passo.

3. Failover com Link IP Estático

Uma conexão com IP estático é um tipo de configuração onde o endereço IP é fixo e atribuímos de forma manual em nosso equipamento gateway, as informações são fornecidas pela operadora de internet, e não mudam ao longo do tempo, uma outra característica é que normalmente é fornecido IP Público, não abordamos esse tema nas configurações anteriores, pois embora também possam receber IP Público das operadoras ou provedores, é menos comum e caso necessite é preciso contratar aparte esse recurso. Essa característica é mais encontrada em Link´s com IP Estático (Comercializados como Link IP Dedicado) e facilita o acesso remoto e a criação de serviços de rede, como servidores web ou VPNs, pois o IP permanece constante, e se for um IP Público, permitirá conexões externas sem a necessidade de redirecionamentos dinâmicos. Além disso, conexões com IP estático costumam oferecer maior confiabilidade e estabilidade, sendo preferidas em ambientes empresariais e para aplicações que exigem alta disponibilidade e acesso contínuo. Para o nosso exemplo vamos considerar o Provedor A entregando o Link IP Estático com IP Publico.

Como configurar?

Basicamente toda configuração a ser realizada aqui será fixa mudando apenas se a Operadora ou Provedor solicitar alguma alteração, existem algumas formas de entregar que são com IP´s Públicos diretamente no enlace normalmente entregue com prefixo /30, ou com IP Privado também com prefixo /30, e no Gateway precisamos apenas configurar uma regra de roteamento. Com o esgotamento do IPv4 as empresas dificilmente irá entregar IP Público no enlace devido ao desperdício de IP, e com a escassez formas econômicas são adotadas como padrão. Em nosso cenário vou abordar apenas o modelo utilizando IP Privado no enlace, porém não muda muito se caso a operadora fornecer no enlace pois acaba simplificando um pouco as configurações mais o resultado acaba sendo o mesmo.

Dados de exemplo, digamos que nosso Provedor A nos forneceu as seguintes informações para o nosso Link IP Estático:

  • IP Publico : 203.0.113.10
  • Enlace do Link : 192.168.100.0/24
  • Gateway : 192.168.100.1
  • IP Lado Cliente: 192.168.100.2

Passo 1: Configurar o endereço IP na interface de enlace com o Provedor A.

Passo 2: Precisamos criar a rota padrão “ROTA-LINK1” e também a rota de monitoramento “MON-LINK1”.

  • Na figura a seguir é demonstrado como criar a rota “ROTA-LINK1”.
  • Na figura a seguir é demonstrado como criar a rota “MON-LINK1”.

Com as rotas criadas já podemos visualizar na tabela de roteamento, que já estão ativas e como definimos uma distancia menor que a rota do Link 2, nosso Link 1 assumiu como link principal.

3.1 Roteamento

Mas ainda falta alguma coisa, se você tentou realizar um teste de ping verá que ainda não possui conectividade com Internet. Precisamos agora configurar o roteamento utilizando o IP Público fornecido pelo Provedor A ( 203.0.113.10 ) :

3.2 Como Configurar o NAT

E por ultimo precisamos criar uma regra de NAT para essa conexão

3.3 Verificação Automática do Link

Seguindo os passos acima você já terá acesso a internet, mas caso ocorra uma indisponibilidade dentro da rede do Provedor A que não interrompa o enlace, o nosso gateway não tomará nenhuma ação, e não ocorrerá a comutação do link pois, o custo definido na rota padrão do Link 1 é menor do que o custo do Link 2. Temos algumas alternativas para tratar esse problema, e vou demonstrar uma delas a seguir.

Vamos começar criando dois script que vou chamar de ligar-wan1 e o outro desligar-wan1

O script ligar-wan1 quando for executado realizará 2 ações, conforme descrito a seguir:

  • Ação 1: Mudar o parâmetro de distancia da rota padrão “ROTA-LINK1” para 1;
  • Ação 2: Limpar todas as conexões na “Connection Tracking”, fazendo com que qualquer conexão indisponível seja reestabelecida diminuindo o tempo de indisponibilidade.

Agora vamos criar o script desligar-wan1, esse script tem a função de desabilitar o Link 1, aumentando o parâmetro de distancia na rota padrão “ROTA-LINK1”, e também desabilitando o NAT do Link1.

  • Ação 1: Mudar o parâmetro de distancia da rota padrão “ROTA-LINK1” para 50;
  • Ação 2: Limpar todas as conexões na “Connection Tracking”, fazendo com que qualquer conexão indisponível seja reestabelecida diminuindo o tempo de indisponibilidade.

Com isso finalizamos uma parte das configurações, faltando apenas configurar a rotina que irá realizar o monitoramento do link e utilizará os scripts que criamos, conforme a mudança de status do link. A seguir vou demonstrar como fazer, utilizaremos o Scheduler.

Abaixo está o script utilizado na figura anterior. O recurso Schedule configurado executará as instruções a cada 1 minuto, realizando uma verificação em dois IPs de servidores raiz (Root Servers). Com base no status atual do link, ele executará os scripts que configuramos anteriormente para gerenciar a conectividade.

# 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-wan1
        :log warning "### LINK1 INDISPONIVEL! ###"
    } else={
        /system script run ligar-wan1
        # 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 ###"
}

4. Comutação Automática entre os Links

No item 3.3 foi demonstrado um recurso que realiza a ação de verificar o status atual do link e executa ações conforme a nossa necessidade. Esse método pode ser aplicado nos 3 tipos de recebimento de link abordado nesse artigo. A lógica empregada nesse tipo de recurso de monitoramento, tem como estrutura principal uma politica de roteamento utilizando IPs de Root Servers como referencia. Como solução adotada nesse artigo usamos duas rotinas de Schedule sendo elas denominadas “mon-link1” gerenciando o Link recebido pelo Provedor A, e “mon-link2” gerenciando o link recebido pelo Provedor B.

Considerando o cenário anterior abordado no capitulo 3, sendo que o Provedor A entregou o link IP Estático, não vou entrar em detalhes da configuração, pois já foi abordado. Vamos focar na implementação do recurso Schedule para link recebido pelo Provedor B, considerando um link PPPoE.

Passo 1: Criar o script “ligar-wan2” que irá executar 3 ações:

  • Ação 1: Desativar a interface “pppoe-out1” que é o nome dado a nossa interface de exemplo, aguardar um delay 3 segundos;
  • Ação 2: Reativar a interface “pppoe-out1”;
  • Ação 3 Limpar todas as conexões na “Connection Tracking”, fazendo com que qualquer conexão indisponível seja reestabelecida diminuindo o tempo de indisponibilidade.

Passo 2: Criar o script “desligar-wan2” que irá executar 3 ações:

  • Ação 1: Desativar a interface “pppoe-out1” que é o nome dado a nossa interface de exemplo, aguardar um delay 3 segundos;
  • Ação 2: Reativar a interface “pppoe-out1”;
  • Ação 3 Limpar todas as conexões na “Connection Tracking”, fazendo com que qualquer conexão indisponível seja reestabelecida diminuindo o tempo de indisponibilidade.

Você deve estar se perguntando… mas o script são parecidos? E a resposta é sim! Como vimos no capitulo 2 é configurado um script direto na conexão usando um profile, e esse recurso já ajusta o custo da conexão, e mudanças no IP recebido pelo Provedor.

Basicamente só precisamos criar uma novo Schedule que vamos dar o nome de “mon-link2”, conforme figura abaixo:

Logo a abaixo temos o script utilizado na figura anterior:

# 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-wan2
        :log warning "### LINK2 INDISPONIVEL! ###"
    } else={
        /system script run ligar-wan2
        # 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 ###"
}

4.1 Como Configurar esse Recurso para um Link DHCP

Digamos que nosso Provedor B entregou o Link usando o método DHCP, vejamos a seguir como fazer:

Como demonstrado nas figuras acima você precisará alterar somente o comando:

/ip dhcp-client release [find comment~"LINK2"]

Nos scripts “ligar-wan2”, “desligar-wan2”, e seguir o capitulo 1 para configurar os demais parâmetros.

Conclusão

Concluindo, o uso de diferentes tipos de conexão — DHCP, PPPoE e IP Estático — desempenha um papel essencial na implementação de failover, garantindo flexibilidade e continuidade de serviços em redes corporativas e residenciais. O DHCP simplifica a atribuição automática de IPs, ideal para redes com múltiplos dispositivos e onde a mobilidade é prioridade. Já o PPPoE combina autenticação e controle de acesso, sendo amplamente utilizado por provedores para gerenciar assinantes individuais de forma segura. O IP Estático, por sua vez, oferece estabilidade e previsibilidade, essencial para serviços que exigem acesso remoto constante, como servidores e VPNs.

A implementação do failover com esses diferentes tipos de conexão fortalece a infraestrutura da rede, pois permite a comutação automática em caso de falha de um link, reduzindo o tempo de inatividade e aumentando a confiabilidade. Assim, investir em failover é fundamental para empresas e usuários que buscam desempenho consistente e disponibilidade contínua da internet, prevenindo interrupções que poderiam impactar tanto a produtividade quanto a experiência do usuário.

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. 

The post Failover em Equipamentos Mikrotik com RouterOS v6 appeared first on TI SEM HESITAR.

]]>
https://tisemhesitar.com.br/failover-em-equipamentos-mikrotik/feed/ 0