preloader
  • Início
  • Maximizando a conectividade: Utilização simultânea de dois links de Internet

Internet com alta disponibilidade

blog-thumb

Usar 2 provedores de intrenet em um mesmo roteador pode ser essencial para quem trabalha de home office.

Isso evita que o usuário tenha que manualmente se desconectar de uma rede WiFi e conectar em outra por exemplo.

Como usar 2 conexões de internet ao mesmo tempo?

Este tipo de configuração se chama MultiWAN, e permite que os links internet operem em modo Load Balancer, conseguindo assim uma melhor performance, e possuam também a capacidade de Failover para uma maior disponibilidade, pois caso um dos links saia do ar, a internet continuará funcionando através do chaveamento automático dos links.

AVISO: Este post é longo e contém muitas informações técnicas.

Neste artigo iremos abordar os seguintes itens:

- MultiWAN Load Balancer e Failover

- Smart Queue Management

- Configurações do OpenWRT

Linux OpenWRT

O OpenWRT é uma distribuição Linux personalizável desenvolvida para substituir o firmware padrão dos roteadores sem fio (WiFi), que normalmente são proprietários e não permitem muitas customizações.


MultiWAN Load Balancer e Failover

Existem 3 formas de alcançar este objetivo:

O jeito noob: Basta comprar um Roteador Dual Wan Redmi AX-5400 e ligar os cabos de cada modem internet nas portas WAN1 e WAN2. Este é o jeito fácil, onde não há muitas configurações a serem realizadas. Basta ligar os cabos e pronto. O custo de investimento é médio, e na maioria dos casos compensa.

O jeito pro: Usar um firewall dedicado, como por exemplo um FortiGate-60D ou até um MikroTik hAP ac2. Esta modalidade requer configurações manuais, e para quem não está habituado a trabalhar com firewalls profissionais, existe uma curva de aprendizado razoável, especialmente para que se possa tirar proveito de todos os recursos que o equipamento possui. O custo para investir em um firewall desses varia de moderado a alto.

O jeito expert: Utilizando OpenWRT com MWAN3: Se você já possui um roteador compatível com OpenWRT (o meu é um Archer C7), basta fazer as configurações. Este método oferece um grande controle sobre o comportamento dos links, e pode sair a custo zero caso você tenha um roteador compatível.

Neste artigo faremos tudo do jeito expert, pois assim é mais divertido e se aprende mais!


Configurando o OpenWRT

Para nossa sorte, o mwan3 já vem praticamente configurado, o que poupa uma grande quantidade de tempo e diminui drasticamente a curva de aprendizado. Precisaremos fazer apenas alguns pequenos ajustes.


Topologia

Cada Internet Service Provider (ISP) possui um roteador adequado ao tipo de link internet contratado (Fibra, Cabo, ADSL, etc).

No meu ambiente, tenho 2 links de fibra ótica (FTTH):

- Router 1 – Link de 300Mbp/s (ISP 1)

- Router 2 – Link de 400Mbp/s (ISP 2)

Eu acabei contratando um segundo link de fibra ótica pois o custo é relativamente baixo, e o benefício de poder trabalhar tranquilamente sem interrupções é enorme.

A versão do software OpenWRT em uso é a seguinte:

OpenWrt 22.03.3 r20028-43d71ad93e / LuCI openwrt-22.03 branch git-22.361.69894-438c598

O Modem que está rodando OpenWRT é um TP-Link Archer C7 v5.

Rede Local:

Cada roteador dos ISP precisará ficar conectado a uma porta WAN, que representa os links internet.

  • Router 1
    • ISP1
      • WAN
        • IP: 10.128.25.1
        • Mascara: 255.255.255.0
        • Gateway: 10.128.25.254
        • WiFi e DHCP: Desativados
  • Router 2
    • ISP2
      • WANB
        • IP: 10.128.20.1
        • Mascara: 255.255.255.0
        • Gateway: 10.128.20.254
        • WiFi e DHCP: Desativados


A rede local será a LAN, por onde funcionará o serviço DHCP e também é por onde faremos a administração do OpenWRT.

  • Router TP-Link
    • LAN
      • Local Network
        • IP: 10.128.15.1
        • WiFi e DHCP: Ativados
        • IPv6 assignment length: Desativado
        • RA-Service: Desativado
        • DHCPv6-Service: Desativado
Portas do Switch

TP-Link Archer C7 v5 rodando OpenWRT: Portas do switch que devem ser utilizadas



Em suma, as interfaces do roteador TP-Link deverão ser utilizadas da seguinte forma:

- Internet: ISP 1 (WAN)

- Ethernet 1: Redesignada para WANB (ISP 2)

- Ethernet 4: LAN


Atenção: É necessário utilizar subnets diferentes em cada segmento de rede desta topologia, a fim de evitar problemas de roteamento.

Importante: Evite usar as portas RJ45 sobressalentes do switch dos seus roteadores de internet (ISP). Conecte apenas uma porta de cada roteador ISP1/ISP2 com o router que roda o OpenWRT. Como estes equipamentos fornecidos pelos ISP são muito simples e não possuem métodos de controle avançados, 2 cabos de rede conectados entre um mesmo switch do roteador ISP e o roteador OpenWRT poderá causar um loop na rede, fazendo que tudo pare de funcionar.

* Para saber como configurar uma rede WiFi no OpenWRT, consulte este link.


Para evitar conflitos, desative os serviços DHCPv4 e WiFi nos roteadores dos ISP. O serviço DHCPv6 poderá permanecer ativo.

Eu recomendo a você alterar a subrede e os IPs dos roteadores dos ISPs para algo similar ao apresentado neste artigo.

Dica: Caso o roteador do ISP não possua opção para desativar o DHCPv4, use o seguinte truque:

- Defina a faixa de IPv4 para apenas 1 único IP (Ex: 10.128.25.100 a 10.128.25.100), e faça a reserva deste IP para um Mac Address que não existe na rede (ff:ff:ff:ff:ff:ff).

* Com este truque o roteador do ISP não conseguirá fazer a entrega de IPv4.


Topologia dos roteadores
Topologia

Update: Recentemente eu substituí meu Archer C7 por um Archer C6. Isso pode parecer que eu fiz um downgrade no roteador, mas na verdade foi o contrário.

- O Archer C7 possui um CPU Qualcomm de 1 core / 1 thread.

- O Archer C6 possui um CPU Mediatek de 2 cores / 4 threads.


Ajustes básicos

Eu fiz uma instalação limpa do OpenWRT. Ou seja, não havia nada configurado ainda. Isso evita muitos problemas, especialmente se você tem o costume de editar manualmente os arquivos de configuração do OpenWRT.

Para que você possa se localizar, o fluxo dos menus é indicado com o caractere “>”.

Dica: Antes de iniciar, certifique-se de conectar via cabo o computador que irá utilizar para configurar o OpenWRT. Configure na interface de rede um IP estático que faça parte da mesma subrede que irá utilizar no OpenWRT. Exemplo de IP estático para o PC: 10.128.15.2/24.


[1] Hostname

System > System

- Hostname: OpenWRT

- Description: Escritorio

- Timezone: America/Sao_Paulo


[2] LAN IP

Network > Interfaces > LAN

- Static
* IP: 10.128.15.1/24
* GW: Nenhum - Desativar “Use default gateway”


[3] Ativar o DHCP

Network > Interfaces > LAN > DHCP Server

Aqui você pode configurar uma faixa de endereçamento, que o DHCP irá entregar para os clientes conectados.

- Start: 100

- Limit: 50

- Lease: 24h

Neste exemplo, o DHCP entregará IPs na faixa entre 10.128.15.100-10.128.15.150.

🔸 Se você não entende muito de rede, saiba que o limite deve ser até 254.


[4] DNS Forwarder

Network > DHCP and DNS > DNS forwardings

Eu utilizo o OpenDNS Family, que é gratuito e protege um pouco contra acessos a destinos inadequados.

- 208.67.222.123

- 208.67.220.123


[5] Instalar os pacotes necessários no OpenWRT

Recomendo que faça esta parte via CLI. Acesse por SSH o seu OpenWRT e digite os seguintes comandos:

opkg update
opkg install mwan3
opkg install luci-app-mwan3
opkg install iptables-nft
opkg install ip6tables-nft
reboot

☑️ Sim, você precisa fazer um reboot aqui, para evitar perder os acessos ao OpenWRT.


Smart Queue Management (SQM)

Este pacote auxilia no controle de latência. Veremos sua configuração mais adiante. Por enquanto faça apenas a instalação.

opkg update
opkg install luci-app-sqm
opkg install jq
reboot

☑️ Faça outro reboot para carregar os módulos do kernel que foram instalados.


Configuração de Switch do OpenWRT

[1] Configuração do Switch

Network > Switch

Como o Archer C7 não possui 2 interfaces WAN, precisamos redesignar uma das interfaces LAN para que ela opere da mesma forma que a interface WAN dedicada.

Nota: Alguns roteadores não possuem a opção Switch (por exemplo o Archer C6). Caso seja seu caso, não se preocupe. Apenas pule esta parte e vá direto ao item “2”.

VLAN Interfaces

Iremos converter a interface LAN 1 (Ethernet 1) para a interface WANB (ISP 2). Não altere este nome, pois ele é pré-configurado no MWAN3.

  • A VLAN 1 não pode ser utilizada, pois ela é utilizada na LAN para administração do OpenWRT. A designação das VLANS ficará da seguinte forma:

    • WAN
      • VLAN 2
    • WANB (antiga LAN 1)
      • VLAN 3


[2] Configuração da primeira interface WAN

Network > Interfaces

Certifique-se de sempre usar lowercase ao criar as interfaces WANB e WANB6, para que a pré-configuração do mwan3 funcione de primeira.


Os nomes e configurações das interfaces WAN ficarão da seguintes forma:

  • wan

    • Protocol: Static address
    • Device: eth0.2
    • IP: 10.128.25.1
    • Netmask: 255.255.255.0
    • Gateway: 10.128.25.254
    • Use default gateway: marcado.
    • Gateway metric: 10 (configure também uma métrica de 30 para a interface wan6)
    • Firewall settings: Associar a zona wan.
    • DHCP Server: Ignore interface

  • wanb

    • Crie uma interface chamada wanb e faça as configurações a seguir.

      • Protocol: Static address
      • Device: eth0.3
      • IP: 10.128.20.1
      • Netmask: 255.255.255.0
      • Gateway: 10.128.20.254
      • Use default gateway: marcado.
      • Gateway metric: 20 (configure também uma métrica de 40 para a interface wanb6)
      • Firewall settings: Associar a zona wan.

  • wanb6

    • Crie uma interface chamada wanb6 e defina a mesma como DHCPv6 client.

      • Device: eth0.3
      • Request IPv6-address: try
      • Use default gateway: marcado
      • Use DNS servers advertised by peer: marcado
      • Use gateway metric: 40
      • IPv6 source routing: desativado
      • Delegate IPv6 prefixes: marcado
      • IPv6 assignment length: desativado
      • Firewall settings: Associar a zona wan.

- Para criar novas interfaces, basta clicar no botão “Add new interface”.


[3] Faça mais um reboot do OpenWRT, a fim de verificar se todas as configurações realizadas e interfaces irão inicializar corretamente.

Bridge

Vá para Network > Interfaces > Devices > br-lan. Certifique-se de que as interfaces WAN, WAN6, WANB e WANB6 não fazem parte da bridge br-lan.

Verificando a Conectividade

Via CLI, verifique se a configuração foi realizada corretamente e se existe comunicação através dos ISP Routers:

Comunicação local com os ISP Routers:

root@openwrt:~# ping -c3 10.128.25.254
PING 10.128.25.254 (10.128.25.254): 56 data bytes
64 bytes from 10.128.25.254: seq=0 ttl=64 time=0.659 ms
64 bytes from 10.128.25.254: seq=1 ttl=64 time=0.514 ms
64 bytes from 10.128.25.254: seq=2 ttl=64 time=0.522 ms
--- 10.128.25.254 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.514/0.565/0.659 ms
root@openwrt:~# ping -c3 10.128.20.254
PING 10.128.20.254 (10.128.20.254): 56 data bytes
64 bytes from 10.128.20.254: seq=0 ttl=64 time=2.552 ms
64 bytes from 10.128.20.254: seq=1 ttl=64 time=0.622 ms
64 bytes from 10.128.20.254: seq=2 ttl=64 time=0.585 ms
--- 10.128.20.254 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.585/1.253/2.552 ms

Rotas e métricas para as interfaces WAN:

root@openwrt:~# ip route show
default via 10.128.25.254 dev eth0.2 proto static metric 10
default via 10.128.20.254 dev eth0.3 proto static metric 20

Teste o acesso a internet através das interfaces VLAN configuradas:

root@openwrt:~# ping -c3 -I eth0.2 www.google.com
PING www.google.com (2800:3f0:4004:803::2004): 56 data bytes
64 bytes from 2800:3f0:4004:803::2004: seq=0 ttl=58 time=4.922 ms
root@openwrt:~# ping -c3 -I eth0.3 www.google.com
PING www.google.com (2800:3f0:4004:803::2004): 56 data bytes
64 bytes from 2800:3f0:4004:803::2004: seq=0 ttl=58 time=4.922 ms

Dica: Caso algum dos seus roteadores ISP não fornecer IPv6 por DHCPv6, não entre em pânico. Apenas desative no mwan3 a interface correspondente (wan6 ou wanb6).

Não é obrigatório a utilização de IPv6 em sua LAN. Os acessos para destinos públicos que utilizam IPv6 continuarão funcionando, pois seu ISP saberá como rotear o caminho até lá.


Configuração de IPv6

Arquiteturas com múltiplos links internet podem apresentar problemas ao rotear endereços IPv6. Existem várias formas de lidar com isso. Porém, neste artigo iremos utilizar o método que costuma funcionar melhor para usuários domésticos.

Não irei entrar no mérito referente a “IPv6 não precisa de NAT”.

Por questões técnicas o mwan3 precisa sim de NAT6, especialmente quando se trata de usuários domésticos, que não tem acesso a alguns recursos que os ISP apenas oferecem para empresas (BGP por exemplo). Para piorar a situação, alguns ISP não respeitam a RFC de implementação do IPv6, o que torna tudo ainda mais complexo.


[1] Configuração do Firewall

Habilite o mascaramento de IPv6 na zona upstream.

uci set firewall.@zone[1].masq6="1"
uci commit firewall
/etc/init.d/firewall restart

[2] Configuração da Rede WAN6.

Desative o roteamento de origem IPv6 na interface upstream.

uci set network.wan6.sourcefilter="0"
uci set network.wanb6.sourcefilter="0"
uci commit network
/etc/init.d/network restart

Verifique seus acessos via IPv6:

https://top.nic.br/connection/

http://test-ipv6.com/


Troubleshooting

Esta seção aborda problemas comuns.


VLANs

Em caso de problemas nas interfaces, verifique se a VLAN da WANB/WANB6 foi realmente criada. Já aconteceu comigo da VLAN associada a WANB/WANB6 (aquela que foi redesignada a partir da interface Ethernet 1) desaparecer, e foi necessário remover e refazer esta parte da configuração.

Para remover a configuração de device com falha, faça este caminho:

Network > Interfaces > Devices > eth0.3 > Unconfigure

Device not found

Depois remova as interfaces WANB e WANB6 e reconfigure as mesmas.


Problemas com IPv6

Em caso de problemas de roteamento com IPv6, verifique a vizinhança IPv6, as tabelas de roteamento e o status das interfaces.

root@openwrt:~# ip neigh show
root@openwrt:~# ip -6 route
root@openwrt:~# ifstatus wan6

Verifique as informações de IPv6 do roteador do ISP afetado, e utilize estas informações para configurar corretamente a interface WAN6 ou WANB6 (a que estiver com problemas de roteamento v6).


Configuração do MWAN3

[1] Configurar o MWAN3

Como mencionado anteriormente, o mwan3 já vem praticamente configurado, necessitando de pequenos ajustes.

Network > MultiWAN Manager > Interface

Observe que algumas interfaces estarão desativadas.

MultiWAN Manager

Ative as interfaces desativadas, clicando em Edit e posteriormente em Enabled.

Altere também o parâmetro Tracking reliability para “2”.

Os IPs de rastreamento de disponibilidade dos links internet podem necessitar ser ajustados. No meu caso, eu configurei desta forma:

  • Tracking hostname or IP address:

    • wan
      • Padrão do mwan3
    • wan6
      • Padrão do mwan3
    • wanb
      • Padrão do mwan3
    • wanb6
      • Padrão do mwan3

Caso queira, você pode utilizar outros IPs para fazer os testes de disponibilidade dos ISP.


[2] Verificar o status do MultiWAN

Status > MultiWAN Manager

MultiWAN overview

Para entender melhor o que está acontecendo a nível de sistema, rode os seguintes comandos via CLI:

iptables -t mangle -L
ip rule show
ip -4 route list table 1-250
ip route show table 1
ip route show table 2
ip route show table (...)
ip -6 route show

Todos os detalhes de status podem ser visualizados no menu:

Status > MultiWAN Manager > Troubleshooting


[3] Alteração no TTL dos links internet

Network > MultiWAN Manager > Interface

Este item pode necessitar de ajustes, dependendo do delay dos seus ISP. Você deve experimentar um pouco até encontrar os valores ideais. No meu cenário, eu não mudei nada. Deixei os valores default.

Importante: Em alguns casos, o IP de destino pode começar a limitar a quantidade de requisições ICMP, fazendo com que o mwan3 entenda que o ISP está indisponível.

Logs

Caso você tenha problemas para aferir a disponibilidade do ISP, tente configurar o rastreamento com IPs diferentes. Diminua também o valor do Tracking reliability para “1”. Isso irá diminuir o tráfego ICMP para o ISP e distribuirá melhor as informações nas tabelas de roteamento.

Exemplo de tracking hostname or IP address:

Altere também a quantidade e o intervalo entre os testes de disponibilidade. Exemplo:

  • Ping count: 1
  • Ping timeout: 5
  • Ping interval: 10

Exemplo alternativo de rastreamento de disponibilidade dos links internet:

WAN Tracking

WANB Tracking

Para informação, estes são os IPv4 padrão usados no rastreio.

Default IP Tracking


Testando o MultiWAN

É importante entender alguns itens aqui.

  • – O multiwan é uma solução ativo-ativo para acesso a internet utilizando 2 ou mais ISPs.

  • – O multiwan não é um agregador de links. Ou seja, ele não irá aumentar sua banda internet. Cada acesso à internet estabelece uma sessão, e cada sessão poderá sair por um ou outro link de internet fornecido pelos seus ISP, fazendo assim um balanceamento de carga.

  • – Caso um link internet fique indisponível, automaticamente o mesmo será removido do balanceamento de carga, até que esteja disponível novamente.

  • – Um acesso HTTP padrão estabelece uma sessão, e por isso não é esperado que um download via web ocorra de forma mais rápida ao qual você já está habituado.

  • – Para gerenciadores de download (GetRight) ou protocolos que estabelecem múltiplas sessões (Torrent), pode ser experimentado um aumento de banda, pois neste caso ambos links internet serão utilizados durante o download. O speedtest.net pode utilizar múltiplas sessões em algumas situações.

Velocidade

Será que fica bom usar 2 links de internet ao mesmo tempo? Eu diria que fica interessante!

Speed Test


Gráficos

Podemos observar que cada link de internet tem um consumo diferente de banda.

Graficos


Teste de Disponibilidade

Desligue o roteador do ISP 1, e verifique se você ainda conseguirá navegar na internet. Observe que o tempo de chaveamento está relacionado com o intervalo dos testes de disponibilidade que você configurou.

Após a validação, ligue o roteador do ISP 1, espere o mwan3 reconhecer que o serviço está operacional, e desligue o roteador do ISP2.

Você pode acompanhar o status indo em:

Status > MultiWAN Manager

Simples assim. Temos balanceamento de carga e failover automático!

Minion Gamer


Logs do OpenWRT

Status > System Logs

Procure nos logs mensagens de erro que possam indicar que alguma configuração não foi feita corretamente.

Sun Apr 9 17:33:49 2023 user.info mwan3track[19143]: Check (ping) success for target "142.250.78.227" on interface wan (eth0.2). Current score: 0
Sun Apr 9 17:33:50 2023 user.info mwan3track[19145]: Check (ping) success for target "8.8.8.8" on interface wanb (eth0.3). Current score: 0

score do mwan3track deverá ser zero. Caso não seja, verifique se o tracking IP utilizado está mesmo disponível e aceita ping (icmp).


Smart Queue Management (SQM)

O OpenWrt tem um pacote chamado SQM usado para mitigar o bufferbloat: aquela latência indesejável que surge quando o roteador armazena muitos dados em buffer, e que atrapalha a sua jogatina.

A configuração é bem simples. Basta seguir as orientações deste link.

Eu usei o valor de 95% para velocidade de upload e download.


Importante

Se houver uma grande quantidade de conexões passando pelo roteador, o SQM pode aumentar o consumo de CPU (CPU Load). Exemplo:

15:34:51 up 19 min, load average: 6.17, 4.90, 4.27

Isso pode deixar os acessos a rede mais lentos. Caso seu roteador tenha um CPU mais fraco e você tenha muitos acessos atravessando o OpenWRT, observe o CPU Load com o comando “uptime”. O ideal é que o valor esteja abaixo de “2”.

15:40:30 up 25 min, load average: 0.75, 1.77, 1.96

Caso você tenha este problema, desative ou desinstale o SQM.


Alerta de Indisponibilidade

É interessante configurar um alerta de indisponibilidade, afim de saber quando um dos links internet cair.

Network > MultiWAN Manager > Notify

Aqui deve ser utilizado um script bash, que é o suportado pelo OpenWRT. Por padrão os alertas serão enviados por e-mail. Detalhes de configuração podem ser visualizados aqui.

Caso você tenha habilidade, poderá criar scripts que enviem alerta através do Telegram.

Eu envio os meus alertas por Telegram utilizando este simples script:

#!/bin/sh
GROUP_ID=<your_group_id>
BOT_TOKEN=<your_bot_token>
curl -s --data "text=$ACTION $INTERFACE $DEVICE" --data "chat_id=$GROUP_ID" 'https://api.telegram.org/bot'$BOT_TOKEN'/sendMessage' > /dev/null
Telegram

A imagem acima é um exemplo dos alertas enviados para o Telegram.

Espero que este artigo tenha sido útil para você!



Pode ajudar?

Por favor apóie este conteúdo clicando em um banner de nossos anunciantes. ❤️

comments powered by Disqus