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
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.
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!
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.
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.
A rede local será a LAN, por onde funcionará o serviço DHCP e também é por onde faremos a administração do OpenWRT.
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.
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
.
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.
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.
[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”.
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.
[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.
wan
Protocol
: Static addressDevice
: eth0.2IP
: 10.128.25.1Netmask
: 255.255.255.0Gateway
: 10.128.25.254Use 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 interfacewanb
Protocol
: Static addressDevice
: eth0.3IP
: 10.128.20.1Netmask
: 255.255.255.0Gateway
: 10.128.20.254Use 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
Device
: eth0.3Request IPv6-address
: tryUse default gateway
: marcadoUse DNS servers advertised by peer
: marcadoUse gateway metric
: 40IPv6 source routing
: desativadoDelegate IPv6 prefixes
: marcadoIPv6 assignment length
: desativadoFirewall 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á.
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/
Esta seção aborda problemas comuns.
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
Depois remova as interfaces WANB e WANB6 e reconfigure as mesmas.
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).
[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.
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:
Caso queira, você pode utilizar outros IPs para fazer os testes de disponibilidade dos ISP.
[2] Verificar o status do MultiWAN
Status > MultiWAN Manager
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.
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:
Exemplo alternativo de rastreamento de disponibilidade dos links internet:
Para informação, estes são os IPv4 padrão usados no rastreio.
É 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.
Será que fica bom usar 2 links de internet ao mesmo tempo? Eu diria que fica interessante!
Podemos observar que cada link de internet tem um consumo diferente de banda.
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!
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
O score do mwan3track deverá ser zero. Caso não seja, verifique se o tracking IP utilizado está mesmo disponível e aceita ping (icmp).
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.
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.
É 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
Por favor apóie este conteúdo clicando em um banner de nossos anunciantes. ❤️