Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

sexta-feira, 5 de dezembro de 2014

OpenWRT: Balanceamento e redundância da sua conexão internet com mwan3

No passado, já escrevi sobre como fazer o balanceamento no OpenWRT utilizando o pacote multiwan. Porém, na nova versão BB foi disponibilizado uma nova solução, o mwan3, que permite um melhor gerenciamento de suas conexões, além de resolver alguns problemas da solução anterior como a impossibilidade de encaminhamento de portas.

Múltiplas conexões com a internet servem para duas funções. A primeira é manter o acesso com a internet mesmo que um dos provedores tenha algum problema (claro, opte por provedores independentes). Fora a redundância da sua conexão internet, você pode balancear o uso da internet entre as duas conexões, praticamente somando a velocidade disponibilizada.

Hoje, contratar uma nova conexão é barato, ficar sem internet é caro. A disponibilidade de mais de uma conexão com internet é fundamental para um negócio que dependa da internet. Além disto, mesmo em residências, estamos cada vez mais dispondo de múltiplas conexões com a internet. Provavelmente você tem um celular com 3G que pode compartilhar a internet, talvez um modem 3G ou mesmo utilizar a internet do vizinho (sempre pedindo autorização).

Existem soluções prontas no mercado para realizar esta tarefa. Contudo, neste post vamos utilizar um roteador com OpenWRT para realizar esta tarefa (e creio que com mais versatilidade do que qualquer outra solução).

O primeiro passo é instalar as suas múltiplas conexões internet no seu roteador. Você pode utilizar VLAN e transformar uma porta LAN em uma WAN2, conectar um 3G, ou acessar uma outra rede WIFI, seja ela do seu vizinho ou a internet compartilhada do seu celular. Claro, teste se ela está funcionando utilizando cada conexão com a internet isoladamente.

E se eu conectar as duas ao mesmo tempo? O roteador vai se perder? Não, existe um campo na configuração da interface, em avançado, onde você especifica a métrica da sua conexão. A métrica é o custo de usar a conexão. Desta forma, a conexão que estiver com a menor métrica será usada. Por padrão, este valor não está definido. Se for o mesmo valor ou não definido, ainda assim o roteador ainda vai escolher uma delas. Contudo, a definição da métrica é necessária para fazer o mwan3 funcionar.

Então só definir a métrica e terei redundância (mas não balanceamento)? Não é tão fácil assim. A conexão com a menor métrica será usada enquanto a interface relacionada a esta estiver levantada. Porém, a sua conexão internet pode cair sem que a sua interface seja derrubada. Ela só cairá sozinha se o cabo da WAN for desconectado ou o equipamento em que a conexão WAN estiver for desligado. Normalmente não é o que acontece. O mais comum é que seu equipamento está ligado e você não tem conectividade. Para gerenciar isto entra o mwan3.

O mwan3 monitora as suas conexões com a internet através de PING para verificar se esta está operando. Caso falhe, ela será desativada e os novos pedidos de conexões não irão mais utilizá-la. Enquanto estiver desativada, o mwan3 verifica repetidamente se ela voltou a operar. Caso detecte que está tudo bem, a sua conexão volta a operar junto com as demais.

Para balancear a carga, cada novo pedido de conexão pode ser atendido por uma das conexões WAN disponíveis. A escolha é aleatória (não é um Round-Robin), podendo utilizar um peso para aumentar a probabilidade de utilizar uma das conexões. Quanto mais clientes (pedidos de conexão) forem gerenciadas, maior a probabilidade do número de pedidos de conexão de cada WAN se aproximar do configurado e maior a probabilidade dos canais estarem distribuídos.

Instalação do mwan3


O pacote do mwan3 pode ser instalado tanto pelo modo texto como pela interface Luci. Você também pode instalar o módulo do Luci para configurar o mwan3 sem precisar do modo texto. Instale:

* mwan3
* luci-app-mwan3 (somente se for usar via interface Luci)

Configuração do mwan3


O mwan3 permite configurações muito mais avançadas do que o multiwan. Para permitir esta gama maior de cenários, o mwan3 utiliza algumas abstrações:

Interfaces


São mapeamentos 1 para 1 das interfaces WAN do OpenWRT (que já são abstrações das interfaces físicas). A interface do mwan3 serve apenas para adicionar mais campos à interface do OpenWRT, como as informações referentes a checagem da sua conexão internet.

Para adicionar uma nova interface, você pode ir no Luci em "Network/Load balancing/Configuration/Interfaces" e adicionar no campo ao final da página. O nome deve ser o mesmo utilizado na interface do OpenWRT (lembre-se, é um mapeamento). Além disto, a interface já deve ter alguma métrica definida (ainda em "Network/Interfaces" e não no mwan3) e possuir rota padrão (definida na configuração estaticamente ou via DHCP).

Ao adicionar a interface wman3, você deve escolher qual endereço na internet será utilizado para verificar que a sua conexão está funcionando. O normal é usar os DNS do Google (8.8.8.8, 8.8.4.4) mas recomendo adicionar no mínimo mais uns dois extra pois o Google aprontou ano passado. O resto é configuração de ajuste, como o "Tracking reliability", que define quantos dos endereço listados devem responder ao PING para considerar que a conexão está funcionando.

Adicione uma interface para cada interface WAN que você deseja balancear. Ex: tenho duas interfaces WAN: wan e wan3g. Elas devem estar funcionado e com uma métrica definida antes mesmo de iniciar a configuração do mwan3. Eu devo criar duas interfaces com exatamente o mesmo nome no mwan3: wan e wan3g. Em cada uma destas, devo configurar um ou mais endereços para verificar a conectividade.

Se preferir editar o arquivo de configuração diretamente, pode fazê-lo pelo modo texto (SSH, em /etc/config/mwan3) ou mesmo pelo Luci em "Network/Load balancing/Advanced/MWAN Config":

config interface 'wan'
   option enabled '1'
   list track_ip '8.8.4.4'
   list track_ip '8.8.8.8'
   option reliability '1'
   option count '1'
   option timeout '2'
   option interval '5'
   option down '3'
   option up '8'

config interface 'wan3g'
   option enabled '1'
   list track_ip '8.8.4.4'
   list track_ip '8.8.8.8'
   option reliability '1'
   option count '1'
   option timeout '2'
   option interval '5'
   option down '3'

   option up '8'

Members (Membros)


Membros são um segundo mapeamento das interfaces do mwan3 para adicionar duas novas informações: métrica e peso. Diferente do caso do item anterior onde uma interface OpenWRT mapeava uma interface MWAN3, este é um mapeamento de 1 (interface MWAN3) para 1 ou mais (membro) pois assim podemos ter valores distintos para uma mesma interface em situações distintas.

Para adicionar uma nova interface, você pode ir no Luci em "Network/Load balancing/Configuration/Members". Os nomes são livres mas devem ser diferentes das interfaces. A sugestão é utilizar o formato: <interface>_m<métrica> _w<peso>. Ex:

  • wan_m1_w3
  • wan_m2_w3
  • wan_m1_w4
  • wan_m2_w4
  • wan3g_m1_w3
  • wan3g_m2_w3
  • wan3g_m1_w4
  • wan3g_m2_w4

Desta forma, já pelo nome, é possível identificar o que foi configurado no membro (interface, métrica e peso). Ao criar o membro, selecione a interface mwan3 desejada, a métrica e o peso.

A métrica no membro representa uma informação similar ao que representa a métrica da interface do OpenWRT. Caso esteja disponível mais de um membro para a mesma situação, ele selecionará a interface do membro que tem a menor métrica. Porém, existe uma diferença em relação a métrica da interface. No membro, caso a métrica seja a mesma, o mwan3 vai fazer o balanceamento e não escolher apenas uma das interfaces.

E o peso? Na situação onde o mwan3 está fazendo o balanceamento (existe mais de um membro operacional com a mesma métrica e esta é a menor do conjunto), ele dividirá as conexões em função do peso. Se um membro usar o peso 3 e outro o peso 2 enquanto estiverem balanceando as conexões, 3/5 serão antedidas pelo primeiro membro e 2/5 pelo segundo (5 da soma de 3 e 2). Se for igual, será dividido de forma igual. Com isto você pode ajustar o uso das conexões em função da capacidade de cada conexão. Ex:
  • wan_m1_w3
  • wan3g_m1_w3
Balanceará entre as duas conexões wan e wan3g de maneira uniforme.
  • wan_m1_w3
  • wan3g_m1_w1
Balanceará entre as duas conexões wan e wan3g, sendo que 3/4 das conexões utilizarão wan e 1/4 a wan3g.
  • wan_m1_w3
  • wan3g_m2_w2
Utilizará a wan enquanto estiver no ar. Quando esta estiver indisponível, a wan3g será utilizada. O peso não influencia.

Se preferir editar diretamente o arquivo, é no mesmo local da interface:

config member 'wan_m1_w3'
   option interface 'wan'
   option metric '1'
   option weight '3'

config member 'wan_m2_w3'
   option interface 'wan'
   option metric '2'
   option weight '3' 

config member 'wan3g_m1_w3'
   option interface 'wan3g'
   option metric '1'
   option weight '3'

config member 'wan3g_m2_w3'
   option interface 'wan3g'
   option metric '2'
   option weight '3'

Policies (Políticas)


As políticas são agrupamentos de membros. Seria o mais próximo de uma tabela de roteamento. Dentro das políticas, as métricas e pesos dos membros serão utilizados para definir por qual interface a conexão irá utilizar. Normalmente é criada uma política para cada uma das situações:

  • Usar exclusivamente cada interface;
  • Usar uma interface preferencialmente e outra caso a primeira falhe;
  • Balancear a carga entre as interfaces.

Novamente, os nomes não devem colidir com os nomes das interfaces e dos membros. Ex:

  • somente_wan           (política)
    • wan_m1_w3    (membro)
  • somente_wan3g
    • wan3g_m1_w3
  • wan_wan3g
    • wan_m1_w3
    • wan3g_m2_w3
  • wan3g_wan
    • wan_m2_w3
    • wan3g_m1_w3
  • balanceado
    • wan_m1_w3
    • wan3g_m1_w3

A ordem dos membros não importa. O que importa é a métrica definida no membro e, onde esta for igual, o seu peso relativo.

Para adicionar uma política pela interface Luci, vá em "Network/Load balancing/Configuration/Policies". Após adicionar uma nova política, você deve adicionar os membros desejados. Também é dado a opção de selecionar qual o comportamento em último caso (quando todas as interfaces dos membros desta política estiverem inoperantes). Pode-se optar rejeitar a conexão (reject - o usuário tem resposta imediata), descartar (drop - a conexão do usuário falhará por estouro de tempo) ou usar a rota padrão do sistema. Se não for especificado, o comportamento será o reject.

Para configurar as políticas diretamente no arquivo, é o mesmo das demais configurações:

config policy 'balanceado'
   list use_member 'wan_m1_w3'
   list use_member 'wan3g_m1_w3'
   option last_resort 'unreachable'

config policy 'wan3g_wan'
   list use_member 'wan_m2_w3'
   list use_member 'wan3g_m1_w3'
   option last_resort 'unreachable'

config policy 'wan_wan3g'
   list use_member 'wan_m1_w3'
   list use_member 'wan3g_m2_w3'
   option last_resort 'unreachable'

config policy 'somente_wan'
   list use_member 'wan_m1_w3'
   option last_resort 'unreachable'

config policy 'somente_wan3g'
   list use_member 'wan3g_m1_w3'
   option last_resort 'unreachable'

Rules (Regras)


Enfim, o último passo. As políticas definidas anteriormente devem ser chamadas segundo alguma regra, que pode ser baseada nos endereços e portas de origem e destino ou mesmo no protocolo (que você normalmente vai se limitar em TCP ou UDP).

As regras podem ser definidas pela interface Luci, vá em "Network/Load balancing/Configuration/Rules". Você deve definir um nome único (não utilizado por outros objetos), os critérios para selecionar o tráfego e qual política será aplicada a este tráfego. O mais comum é utilizar o balanceamento para tudo exceto o que deve manter o IP durante a sessão. Um exemplo onde deve-se preservar o IP externo são páginas de bancos. Como boa prática, deve-se preservar o endereço externo para todo tráfego HTTPS. Para estes casos, pode-se utilizar o endereço do cliente para balancear as conexões. Uma boa dica para balancear entre duas conexões é usar o último bit do endereço IP, que dividirá os clientes entre os com endereço IP terminando em par ou ímpar.

Diferentemente dos demais itens de configuração, as regras possuem ordem. Caso o tráfego case com uma delas, ele não será validado pela próxima. Assim, deve-se colocar as regras mais específicas antes da mais genéricas e uma global, que case com todo o tráfego, ao final. Ex:

  • cliente_par_https
    • origem 0.0.0.0/0.0.0.1
    • protocolo tcp
    • porta 443,8443
    • política wan_wan3g
  • cliente_impar_https
    • origem 0.0.0.1/0.0.0.1
    • protocolo tcp
    • porta 443,8443
    • política wan3g_wan
  • padrao
    • origem 0.0.0.0/0.0.0.0
    • política balanceado

Para configurar as políticas diretamente no arquivo, é o mesmo das demais configurações:

config rule 'cliente_par_https'
  option src_ip '0.0.0.0/0.0.0.1'
  option proto 'tcp'
  option use_policy 'wan_wan3g'
  option dest_port '443,8443'

config rule 'cliente_impar_https'
  option src_ip '0.0.0.1/0.0.0.1'
  option proto 'tcp'
  option use_policy 'wan_wan3g'
  option dest_port '443,8443'

config rule 'padrao'
  option dest_ip '0.0.0.0/0'
  option use_policy 'balanceado'

Caso tenha necessidade que algum cliente ou destino específico saia somente por um endereço (ex: uma aplicação remota liberara apenas para o seu endereço da internet), basta adicionar uma regra acima das demais. Também fixar a saída em apenas uma conexão pode ser uma estratégia interessante para isolar possíveis problemas de uma aplicação quando se suspeita que a causa seja o balanceamento.





A solução mwan3 possibilita ajustar o balanceamento a quase qualquer situação, inclusive melhor do que outros produtos de mercado. Além disto, ao utilizar um equipamento de uso geral, o custo também deve ser inferior as soluções dedicadas. De fato, mesmo as soluções dedicadas não utilizam um hardware muito diferente de um roteador geral. Em muitos casos, é apenas um software diferente.

Já estou usando o mwan3 sem problemas faz algum tempo. Mas podem aparecer algumas questões como "Meu download não duplicou, ficou no mesmo". Sim, qualquer solução baseada em NAT faz o balanceamento por conexão. Um download único não vai conseguir utilizar mais do que uma das WAN. Para utilizar as duas, você precisaria fazer dois downloads em paralelo (ou usar um gerenciador de download que baixe o arquivo por múltiplas conexões - alguém lembrou do GetRight?). Mesmo assim, a escolha da WAN é aleatória e pode ser que você tenha o "azar" de sair nas duas conexões pelo mesmo canal. Se estiver baixando de um HTTPS (cada vez mais comum) e você seguiu as configurações sugeridas aqui, você sempre vai sair pela mesma conexão a partir do mesmo computador e, sim, não vai utilizar mais do que uma WAN em um download, neste caso mesmo que use um gerenciador de download. E torrent? Vai funcionar perfeitamente! Seu download provavelmente se aproximará da soma das duas WAN pois o torrent utiliza diversas conexões em paralelo.

Alguma solução para não usar NAT? IPv6. Mas as Telecoms no Brasil estão meio atrasadas. Era para todos terem IPv6 em janeiro de 2014. Quem sabe em um futuro, quando todos estiverem com IPv6 e terem uma faixa de endereços própria (que nem é previsto), podemos buscar uma solução melhor.

Para finalizar, se você é daqueles que desmontava o relógio para saber como ele funcionava, o mwan3 é bem interessante. Olhe em:

  • iptables -t mangle -L
  • ip rule show
  • ip route show table 1
  • ip route show table 2
  • ip route show table 3
  • ...
  • ip route show table N (até que retorne uma tabela em branco)

O mwan3 usa as interfaces ativas e as métricas para construir as regras do iptables e as tabelas no ip route. A tabela mangle do iptables é utilizada para marcar os pacotes (onde são usados as regras e pesos). Cada marca representa uma interface de saída. Esta marcação é usada nas regras do "ip rule", que escolhe uma tabela de roteamento para cada marca. Tudo é ajustado caso alguma interface com menor métrica se torne operante ou deixe de funcionar.

Até a próxima.

38 comentários:

  1. Excelente tutorial, Luiz. Verei aqui se consigo utilizar minha conexão 4G com a internet cabeada. :D

    ResponderExcluir
  2. Luiz, tentei fazer funcionar aqui mas não estou conseguindo. Todas as duas conexões estão funcionando, mas só a do 4G que opera.

    Eu setei a métrica na conexão cabeada, mas não adiantou. O status está assim:

    wan1 (wwan0)
    Online (tracking active)

    wan (eth0.2)
    Offline

    "WAN1" é o modem e o "WAN" é a conexão cabeada.

    ResponderExcluir
    Respostas
    1. O script não está detectando a conectividade da cabeada. Considerando que ela está ok, talvez é algo da escolha que você fez na rotina de verificação. Ai tudo vai sair mesmo pelo 4g. Os logs dizem algumas coisas que irão dar a dica. Também tem uma aba de troubleshooting, que permite rodar coisas como ping em cada uma das interfaces.

      Excluir
  3. Muito bom, funcionou como esperado! Só tenho uma dúvida, aqui no meu caso, devido a algum bug a conexão de internet do modem 3G para de funcionar após um tempo de uso mais pesado da conexão (baixando por exemplo um torrent do ubuntu) mas a interface Wan3 ainda continua ativa, mesmo sem acesso a internet. o mwan3 percebe que ela está inoperante mas não faz nada a respeito para restaura-lá, só passa a usar a conexão da Wan (regra balanceada).

    Pelo que eu vi, a única forma de restabelecer facilmente a conexão do modem aqui é usando o comando "ifup wan3", depois disso o mwan3 sinaliza que a interface voltou a funcionar e começa a redistribuir a conexão.

    Há como eu alterar alguma configuração do mwan3 para que ele execute esse comando (ifup wan3) quando o teste de ping que ele faz na interface wan3 falhar?

    vlw!

    ResponderExcluir
    Respostas
    1. Olá Promoções Online,

      Esse comportamento está mais para um modem de baixa qualidade do que um bug. Alguns modems se perdem quando em carga.
      Já passei por isso... Não é culpa do mwan3 travar sua conexão nem sua responsabilidade atuar para recuperá-la. Você vai precisar
      fazer algo por fora.

      Uma sugestão é colocar um testador de conectividade na cron.

      * * * * * ping -q -I -c1 8.8.8.8 >/dev/null ||
      ifup wan3

      Testa primeiro no terminal (a parte a partir do ping) quando estiver travado e, se funcionar, coloca na cron a linha toda.
      Isto vai rodar todos os minutos. Se for muito frequente, troca o primeiro * por */5 para rodar a cada 5 min.

      Excluir
    2. Este comentário foi removido pelo autor.

      Excluir
    3. Eu fiz alguns testes com o modem no Windows para ter certeza se ele era o causador do problema e para minha surpresa ele se comportou muito bem!
      Com o mesmo torrent do linux e ainda reproduzindo um video no youtube ele se manteve firme com taxas entre 300 e 800 KBps e não caiu nenhuma vez (uns 20 minutos de download sem nenhum problema).

      Nesse caso, me parece que o modem não é a causa :(

      Por outro lado, também não deve ser problema com a USB do roteador já que ele consegue rodar HD externo (1TB), Pendrive e o modem todos juntos através de um HUB usb (o problema acontece com o modem sozinho ou não)!

      Agora fico na dúvida se compro outro modem ou tento modificar algumas coisas no roteador pra ver se consigo uma solução.

      Excluir
    4. Promoções, infelizmente você apagou a outra mensagem :-)

      Se você recebeu um IP privado para usar e mesmo assim funciona a internet, pode ser que sua operadora não tem mais IP válido para fornecer (por isso temos o IPv6 chegando). Como eles devem estar usando um NAT lá na operadora, realmente não nao funcionar VPN ou qualquer coisa que você receba conexões.
      Solução? Reclama com a operadora ou troca ela.

      Dá uma olhada no dmesg por erros de USB. As vezes o roteador não tem energia suficiente na porta (em especial com uso de HUB USB). Se puder, teste com um HUB USB alimentado.

      Excluir
  4. Bom Luiz, eu apaguei a ultima mensagem pois eram conclusões que acabei refutando em uma segunda análise.

    Sobre o que vc comentou, eu não tinha pensado nessa hipótese de distribuição de um IP interno pela operadora mas realmente pode ser isso.

    Eu fiz algumas alterações no arquivo "network" e no do "/etc/ppp/option" e parece que a estabilidade melhorou!

    A conexão ainda congela as vezes mas com menos frequência. Estranhamente, algumas vezes ela dura bastante tempo, duas horas ou mais, outras vezes congela em 20 minutos :(.

    De todo modo eu estou pensando em comprar um modem 4G já que o meu atual limita a velocidade para no máximo uns 800KBps (com meu celular no 3G passa de 1,5 MBps a taxa de transferência de download).

    Por enquanto eu deixei rodando um script a cada dois minutos com ping para a WAN3, sendo executado no caso de falha, o comando killall pppd para restabelecer a conexão.

    ResponderExcluir
    Respostas
    1. É por ai mesmo Promoções...

      quando a reiniciar a interface, um ifup wan3 deveria funcionar também.

      Excluir
    2. Sim! No meu caso usei o pppd porque faz com que o script só funcione se a interface 3g estiver levantada, reconectando quando de um travamento (não precisa desativar o script no cron quando quero a conexão desligada).

      De todo modo, eu comprei um novo modem com suporte a 4G já que o antigo limitava minha conexão (700KBps). A princípio tanto o ganho de estabilidade quanto de velocidade foram impressionantes, mas como nem tudo são flores, eis que ainda sobram problemas semelhantes.

      Com este modem ainda sofro de perda de conexão, nada comparado ao anterior já que agora isso costuma ocorrer depois de muitas horas de uso como em 3, 6,7 horas, etc (muito razoável por sinal). É muito difícil cair muito cedo!

      O problema em si é que chega em um momento em que a perda de conexão do Modem é irreversível, simplesmente não reconecta mais, nem mesmo um reboot funciona (ainda continua listado)! A única solução aparente é desconectar fisicamente o Modem da USB ou tirar os tudo da tomada!

      Em alguns testes com o Windows, a desconexão da rede móvel até ocorre as vezes mas, está é facilmente restabelecida pelo discador do Modem (deixei o Notebook ligado o dia inteiro para testes).

      Acho que só pode ser algum problema de configuração mas ainda estou totalmente perdido sobre a causa, tentei com o Openwrt BB e com outra Rom do Chaos Calmer mas acontece a mesma coisa. Vou fazer outra uma bateria de testes aqui mas, o que vc acha que pode ser?

      Observe os Logs (Ao carregar o usbreset com o dwm221.json personalizado o modem adquire 4 portas ttyUSB mas, quando ocorre o bug de desconexão ele só é novamente reconhecido com a "ttyUSB0" que não serve para conexão de internet nem uso de comandos AT)

      Logread:

      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.650000] usb 1-1.1: USB disconnect, device number 6
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.660000] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.670000] option 1-1.1:1.0: device disconnected
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.670000] option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.680000] option 1-1.1:1.1: device disconnected
      Sun Sep 18 19:43:03 2016 kern.err kernel: [ 4562.710000] option1 ttyUSB2: usb_wwan_indat_callback: resubmit read urb failed. (-19)
      Sun Sep 18 19:43:03 2016 kern.err kernel: [ 4562.720000] option1 ttyUSB2: usb_wwan_indat_callback: resubmit read urb failed. (-19)
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.730000] option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.740000] option 1-1.1:1.2: device disconnected
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.750000] option1 ttyUSB3: GSM modem (1-port) converter now disconnected from ttyUSB3
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.750000] option 1-1.1:1.3: device disconnected
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.760000] option1 ttyUSB4: GSM modem (1-port) converter now disconnected from ttyUSB4
      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4562.770000] option 1-1.1:1.4: device disconnected
      Sun Sep 18 19:43:03 2016 daemon.notice pppd[2435]: Modem hangup
      Sun Sep 18 19:43:03 2016 daemon.info pppd[2435]: Connect time 74.8 minutes.

      Sun Sep 18 19:43:03 2016 kern.info kernel: [ 4563.440000] usb 1-1.1: new high-speed USB device number 10 using ehci-platform
      Sun Sep 18 19:43:04 2016 kern.debug kernel: [ 4563.550000] usb 1-1.1: no of_node; not parsing pinctrl DT
      Sun Sep 18 19:43:04 2016 kern.debug kernel: [ 4563.550000] option 1-1.1:1.0: no of_node; not parsing pinctrl DT
      Sun Sep 18 19:43:04 2016 kern.info kernel: [ 4563.560000] option 1-1.1:1.0: GSM modem (1-port) converter detected
      Sun Sep 18 19:43:04 2016 kern.debug kernel: [ 4563.570000] option1 ttyUSB0: no of_node; not parsing pinctrl DT
      Sun Sep 18 19:43:04 2016 kern.info kernel: [ 4563.570000] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB0

      Excluir
    3. Promoções,

      Se não volta a funcionar com um reboot, o estado interno no modem está inconsistente. Pode ser algo provocado pelo driver sim. Não tenho muitas sugestões a não ser conviver com o problema "por enquanto".

      Como solução de contorno, dependendo do roteador, pode ter como controlar a energia da porta, simulando uma desconexão:
      http://stackoverflow.com/questions/4702216/controlling-a-usb-power-supply-on-off-with-linux

      Mas isto pode não ser possível em alguns dispositivos:
      https://forum.openwrt.org/viewtopic.php?id=28798

      Também tem o usbreset, que está nos pacotes oficiais.

      Excluir
  5. Luiz Luca, desculpe esse bump em um post antigo, mas acho que tu podes me ajudar.

    Seguinte, tenho um Archer C7 com o último LEDE instalado, consegui configurar a MWAN3 certinho, com todas as regras que eu queria, etc. E tudo funciona nos testes sintéticos, digo, ao testar o load balance, tudo vai perfeito; Ao testar o fail over pela propria interface LuCi (desconectando a interface WAN, por exemplo), o fail over vai perfeito para o WAN2.

    A grande questão é simulando uma situação real.
    Desliguei fisicamente meu cabo da porta WAN e o MWAN3 não jogou o tráfego para o WAN2... Tentei bastante debugar, li alguns relatos iguais ao meu caso lá no github, tentei algumas propostas de solução, mas todas sem sucesso.

    Ao meu ver, a interface LEDE não está "reconhecendo" o drop do WAN, ele permanece ativo, inclusive contabilizando uptime lá em Network > Interfaces...
    O failover, teoricamente funcionou, pois eu consigo pingar IPs tranquilamente... Se eu for na interface do LEDE e desativar a WAN, tudo fica ótimo. Se eu ligar de volta o cabo na WAN, o loadbalance é restabelecido, etc.

    Terias alguma proposta?

    ResponderExcluir
    Respostas
    1. Antigo mas não morto. Os posts aqui são frequentemente requentados.

      O mwan3 não se com estado da interface. Ele testa ping através de cada interface. Se falar o número de vezes configurado, a interface é marcada como falhada. Mas isso dentro do mwan e não na listagem de interfaces do sistema. Quando voltar a responder, volta a enviar pacotes. Você está esperando tempo suficiente? Se quiser testar o ping forçando uma interface é 'ping -I ethX 8.8.8.8'.

      Excluir
    2. Sim, da última vez esperei 30 min.
      Nos meus últimos testes, percebi que o problema não é bem com o mwan3, e sim no próprio LEDE/OpenWRT (talvez?).

      Sem o MWAN3, com as duas conexões ativas (a principal com métrica 10 e a secundária com métrica 20), eu consigo pingar os dois gateways conectados. Se eu der stop em alguma interface lá no LEDE, automaticamente a outra assume o tráfego da rede... Em compensação, se eu simplesmente desligar o cabo do roteador (Archer C7) que está na porta no WAN, a interface do LEDE não reconhece essa queda, e como falei, esperei quase 30 min e ele não reconheceu... O tráfego só foi jogado pra segunda conexão, quando fui na interface e dei stop, ou então se eu reiniciar o roteador (causaria o mesmo efeito, né?).

      Eu apenas não entendo esse comportamento do OpenWRT.. Já resetei configuraçoes de fábrica e deixei tudo o mais padrão possível.
      Queria apenas que, ao desconectar o cabo, a conexão pulasse para a minha segunda conexão. Quando eu consertar isso, poderei enfim ir pro mwan3 e colocar minhas políticas/regras...

      Algum palpite? :)
      E obrigado pela resposta.

      Excluir
    3. Tiago, ao dar stop, ele derruba a rota e, se for a de menor custo, faz com que a segunda seja usada. Isso é do Linux e não do OpenWRT ou mesmo wan3. O mwan3 faz é justamente incrementar esse mecanismo.
      Regras de firewall marcam o pacote para sair por uma ou outra interface, direcionando a conexão para uma tabela de roteamento própria, onde a rota padrão indica a interface de saída. Não teste com o roteador da outra ponta da wan, pois por estar na mesma rede da wan ele não usa a rota padrão.

      O mwan3 também é um comando para debugar problemas. O wan3 não se importa com o estado da interface (se com cabo ou não), pois uma interface no ar não quer dizer que o link realmente funciona. Por isso o teste do ping que ele faz. E não vale usar um endereço de teste dentro da rede da operadora, como a outra ponta da wan. Esse estado de operacional ou não pode ser visto na interface do mwan3 ou pelo comando e é diferente do estado up/down da interface de rede em si.

      Se for continuar o papo, poderia abrir um tópico no fórum? Tem link no topo e rodapé desta página.

      Excluir
    4. Vou abrir o tópico sim, e tentar explicar melhor qual a minha intenção.
      Obrigado!

      Excluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. Sim, ALex Kidd. Não existe qualquer restrição em criar uma nova rede wifi, conectar no seu vizinho e usá-la para balancear a internet com o mwan3.

      Só lembrando que o IPv6 não funciona com o mwan3 automaticamente. Ele até tem suporte mas depende de configurações extra como o NETMAP, NPT ou NAT66.

      Excluir
    2. Este comentário foi removido pelo autor.

      Excluir
    3. Este comentário foi removido pelo autor.

      Excluir
    4. Hum. Isso muda um pouco a situação. Um radio wifi só pode usar um canal. Quando você usa o roteador como cliente pela wifi e ainda oferece wifi como ap, o OpenWrt trava o canal do ap (que ele controla) para ficar igual ao usado na conexão wifi cliente. Agora, quando você quer conectar em duas redes wifi, isso só será possível se ambas estiverem no mesmo canal. Provavelmente cada vizinho usa um canal diferente.

      Solucão? Configurar tudo (ou melhor, os vizinhos configurarem) no mesmo canal e aceitar a possivel perda de qualidade. Colocar essas duas redes proximas e mais a sua própria no mesmo canal vai de alguma forma prejudicar o desempenho. A melhor solução seria usar rádios independente, como os roteadores que trabalham simultaneamente em 2.5 e 5Ghz, isso se um dos vizinhos tiver 5Ghz e esta rede alcançar sua casa (5 Ghz tem alcance menor). Se for somente 2.5, você poderia ainda usar uma segunda wifi por USB conectada ao roteador (se tiver USB). Se tiver um segundo roteador com suporte a OpenWrt, ele pode fazer esta conexão wifi da segunda rede e conectar por cabo ao seu roteador.

      Bem, tens algumas opções para brincar

      Excluir
  7. Este comentário foi removido pelo autor.

    ResponderExcluir
  8. Ola Luiz,

    tenho alguns APS com lede, e tenho uma estrutura da seguinte forma: uma controladora OpenWisp na rede local e uma controladora OpenWisp em nuvem (Azure), ambas redes se comunicam por VPN, minha duvida é se instalando esse pacote mwan3, consigo apontar as duas controladoras nos aps, deixando assim uma das controladoras em modo de contingência?
    Obrigado.

    ResponderExcluir
    Respostas
    1. Unknown, o mwan3 não é bem para isso.

      Não usei ainda o openwisp mas ele deve usar algum protocolo baseado no http. A forma clássica de fazer isso, sem ajuda do openwisp, seria espelhar os dados e colocar um load balancer para escolher o servidor. Claro que o loadbalancer também precisaria de redundância, que normalmente é feito com algo como o heartbeat e dois servidores.

      Pensando em algo simples, já que você já usa vpn (OpenVPN?), por que não usar ela?
      Faz uma vpn de cada ap com os dois servidores openwisp. Os servidores vpn oferecerão a mesma rota, mas com um custo diferenciando o principal do outro. Se o primeiro falhar (e a vpn cair), ele vai rotear pelo segundo. Os dois openwisp usarão o mesmo endereço ip falso alcançável pela rota da vpn, que pode ser até um endereço ip adicional na interface loopback dos servidores. Se o servidor principal cair, cai a vpn e a rota de menor custo. Os clientes vão naturalmente usar o segundo. Só precisar um script para garantir que o servidor vpn será derrubado caso o openwisp caia mas a máquina ainda esteja no ar.

      Muito louco?

      Excluir
  9. Meu cenário é o seguinte,
    1 PfSense
    2 APs TP-LINK WA901ND - Com Lede (Esse AP pode ser um problema pois só tem uma interface física de rede?)
    2 Controladoras OpenWisp - Uma na rede local (192.168.10.10) e uma na nuvem (Azure) (172.16.0.10)

    Fechei uma conexão VPN IPSec Site-to-Site entre o Pfsense e o Azure, até ai blz, as duas redes se comunicam.

    Como estão na mesma rede por causa da VPN Site-to-Site, não teria outra forma de apontar no LEAD os dois IPs das controladoras? algum script talvez, ou outro pacote?

    ResponderExcluir
  10. Ola meu caro.
    Estou tentando aplicar essas configurações, mas minha duvida é:
    Preciso associar a nova interface de balanceamento a uma interface fisica no meu equipamento?
    e como faço isso ?
    Atenciosamente

    ResponderExcluir
    Respostas
    1. O nome em "config interface nome" deve ter o mesmo nome que a sua interface de /etc/config/network. Não é o nome do dispositivo de rede (eth0, eth0.2, ...) mas algo como wan" ou "wan-algumacoisa".

      Excluir
  11. Muito boa a explicação!

    Quando o mwan gera "WARNING: Interface wanb6 has no default route in the main routing table", sabe qual o significado?

    ResponderExcluir
    Respostas
    1. Neste momento a wanb6 não tem rota para a internet e não é usável para acessá-la. Se não for temporário, revise a configuração da interface, não do mwan3.

      Excluir
  12. Luiz, voltado neste tópico. É possivel configurar mais de uma conexao wwan?

    ResponderExcluir
    Respostas
    1. Sim, já usei uns 4 modens 3g uns 8 anos atrás. Apelidaram de hidra.

      Excluir
    2. Como faço para separar estas conexões wwan em vlan's separadas já que não tenho controle sobre o dhcp delas e estão todos na mesma faixa de IP.

      Excluir
    3. Olá Luiz! Aproveitando a pergunta dele, vou relatar minha situação no último ano e colocar uma dúvida.

      Eu tenho NET HFC e Vivo GPON, usando o mwan pra fazer load balancing. Ambos os provedores negam fornecer IPv6 global prefix acima de /64. Fiz 2 brigas épicas com cada um exigindo q seguissem o padrão, escrevi texto explicando oq é IPv6 e mostrando referência ao padrão, questionei Anatel e NIC.br, encontrei citações de ambos e demonstrei q nenhum autoriza usar /64.

      Infelizmente, essa ******* de empresas estão abarrotadas de lucro, e usaram os textos muito mal escritos por essas autarquias pra dizer q elas num obrigam as empresas a seguirem o padrão e autorizam opcionalmente a fornecer /64. Um tecnico chegou a me dizer q a NET é uma empresa privada e naum estatal, e por isso ela num precisa seguir padrões da Internet e pode criar padrões próprios. Um atendente da Ouvidoria da Vivo disse q empresas brasileiras só precisam seguir a legislação nacional e num é obrigada a seguir padrões internacionais. O supervisor da Vivo veio em casa e ligou pra alguém num sei onde, e ele disse q a Anatel autoriza opcionalmente a usar /64 e por isso eles fornecem isso pra todo mundo. Por 2 vezes funcionários da NET responderam á Ouvidoria q se eu quiser posso cancelar o contrato sem ter q pagar multa, sendo q sou Consumidor deles há anos sem fidelidade nenhuma. Realmente num vejo IPv6 vingando, com configuração tão complexa e travada e com abertura pra abuso pelos provedores.

      Bom, quanto a configurar VLANs e WiFi. Eu tenho um router com OpenWRT no outro quarto, e dele sai um cabo q vem pro meu quarto e é ligado num switch, e desse vai outro cabo pra um AP TP-Link onde tb instalei o OpenWRT. No router tenho 3 ports pra usar na LAN, mas por essa separação de quartos eu só posso usar 1 port pro meu quarto, onde tá o AP.

      Tem como eu configurar, no router, uma VLAN pra rede cabeada e outra VLAN pro WiFi, ou mesmo configurar 2 SSID pra 2 VLANs diferentes no WiFi, tudo passando pelo mesmo cabo, na mesma port do router? Ou eu teria q converter meu AP pra router (oq acarretaria delegar IPv6 global prefix pra ele...)?

      Pelo q eu li na doc do OpenWRT, as ports podem ser tagged ou untagged, e placas de rede normais num reconhecem a flag de VLAN e devem estar conectadas em port untagged.

      Excluir
    4. Existem várias respostas para esta pergunta. Como o tópico deste artigo é o mwan3, a primeira seria configurar as wwan no mwan3 e regras para encaminhar as vlans para cada respectiva wwan pelo IP de origem. Você também poderia configurar redundância com isso, fazendo uma rede usar a saída da outra quando seu modem cair.

      Outra solução é o policy based routing. Você cria tabelas de roteamento para cada wwan e regras que fazem o roteador selecionar uma respectiva tabela de roteamento pelo IP de origem ou interface. O mwan3 faz isso, mas com o auxílio do iptables e marcas do conntrack. Se quiser investir nisso:

      https://openwrt.org/docs/guide-user/network/ip_rules o campo lookup aponta para uma tabela diferente da padrão
      https://openwrt.org/docs/guide-user/network/routes_configuration o campo table aponta para esse mesmo número
      https://openwrt.org/docs/guide-user/network/ucicheatsheet nos campos ip4tablle e ip6table, o mesmo dos anteriores: o número da tabela

      Excluir
  13. Excelente artigo e bem detalhado até pra quem não é da área, estava pesquisando em algum hardware para isso pois fazia a troca de internet manualmente com o cabo kkk, mas consegui configurar dois links um wan e outro lan(agora wan, não sabia que era possível isso) como redundância, recomendo colocar o link deste post no outro que esta depreciado.
    Foda demais!

    ResponderExcluir
  14. Alguém que possa fazer esse serviço pra mim? Se houver e puder entrar em contato (43) 99125-4817 com o valor para fazer. Obrigado

    ResponderExcluir