quinta-feira, 6 de agosto de 2015

Internet Wi-Fi muito lenta no Moto X e/ou Android Lollipop - Resolvido

No mês de julho de 2015, tive um problema com a minha internet wi-fi, que será detalhado neste post. Tenho internet GVT 25Mb que me atende muito bem em todos os dispositivos, inclusive simultaneamente:
  • CPU
  • Notebook
  • Tablet
  • Celular Moto X [Lollipop] e Moto G[Kitkat] (meu e da minha esposa)
  • PlayStation3
  • 2 TVs Smart (Samsung e LG)
Em resumo, simples navegações, downloads, YouTube, Netflix, games online, enfim tudo funciona perfeitamente bem de forma que poucas vezes tive algum problema.

O Problema

Há pouco mais de uma semana, passei por um dos problemas mais estranhos que já vi na rede local da minha residência.
Ao conectar o meu Moto X de 2ª geração à rede Wi-Fi, percebi que em alguns momentos a internet ficava muito lenta. Cheguei a fazer testes em que alguma páginas chegavam a demorar cerca de 60 a 90 segundos para ser carregadas, exatamente como mostrado no vídeo abaixo:

http://www.stevenf.com/downloads/iphone-6-moto-x.mp4

Ao receber uma visita de parentes, pude perceber que todos os celulares do pessoal, tais como Samsung Galaxy e Iphones não apresentavam este problema. Juntando todas as peças cheguei a seguinte conclusão: o problema não podia ser atribuído somente a minha rede, já que todos os dispositivos citados até agora não apresentavam lentidão, exceto os nossos celulares Motorola; mas também deveria haver alguma mudança recente ocorrida na rede ou na configuração do meu roteador, visto que meu Moto X não apresenta este problema ao conectar em outras redes Wi-Fi.

A Solução

Depois de muitas pesquisas e muitos testes e mudanças de configuração no celular e no roteador, este artigo resolveu os meus problemas:

http://forums.androidcentral.com/lg-g4/542447-slow-wifi-fixed.html
Que nos remete a este outro link
http://phandroid.com/2015/05/13/comcast-wireless-gateway-lollipop-bug/

Em resumo, o problema parece ocorrer não só nos celulares da Motorola mas também em outros modelos com a versão Lollipop do Android (e pelo que vi depois, versões anteriores também). A causa do problema é que o celular tenta solicitar um endereço IPV6 do roteador e nesse momento ele não consegue conversar com ele por algum motivo. Logo, ou você desabilita o ipv6 no seu roteador (opção que não tenho, pois não desbloqueei meu roteador) ou desabilita o ipv6 no Android, o que me pareceu mais simples e rápido do que mexer em toda uma infraestrutura já funcional.

Atualizado dia 07/08/2016:
O problema não ocorre somente em celulares Motorola. Foi reportado que até o momento o bug já ocorreu em outras modelos de outros fabricantes também: Positivo S480, Zen Fone, XPeria Z2, Galaxy J5, Galaxy S7.

A solução dada pelos links acima foi instalar o DNSET, que cria uma VPN que vai forçar o celular Android a conectar usando IPV4. Não necessita nem rootar o seu aparelho. Na descrição do aplicativo, ele afirma que configura o seu aparelho pra usar os servidores DNS do Google (8.8.8.8, 8.8.4.4) e o app desliga após a VPN ser estabelecida. Eu cheguei a tentar configurar manualmente meu DNS pros do Google, mas o problema de lentidão persistiu, sendo resolvido somente com o DNSET mesmo.

Algumas pessoas não confiam muito nesse aplicativo pelo tráfego ter que passar por uma VPN, apesar de segundo o desenvolvedor, e até onde pude analisar com o traceroute, o tunelamento é feito localmente. Na verdade, não deu pra entender por completo o funcionamento, mas caso não queria usar o aplicativo existe uma outra forma de se resolver o problema seria editando um arquivo de configuração para desabilitar o IPV6, conforme explicado neste link:
http://www.reddit.com/r/Android/comments/2z1gyo/fix_lollipop_wifi_issues_and_coincidentally_the/

Concluindo, comecei a utilizar o DNSET em casa e não tive mais problema de lentidão. Em outras redes Wi-Fi que não tenham esse problema (a grande maioria) basta desabilitar o mesmo. Em 27/09/2015, percebi que Acredito que a GVT modificou alguma configuração na sua rede, pois já faz mais de 1 semana que o problema não mais ocorre.

Estas são outras soluções mais completas, conforme dicas recentemente dada nos comentários [Atualizado dia 29/08/2016]
1) O aplicativo Disable IPV6, mas seu aparelho precisa de root
2) Se tiver um roteador Wi-Fi antigo, conecte esse roteador na saída do roteador principal. Crie uma segunda rede Wi-Fi (sem IPV6) com outro nome e conecte nesta os dispositivos Android que possuem a falha. A rede principal ficaria para os outros dispositivos. Esse roteador secundário fica em modo roteador e não em modo access point.

Análise técnica do problema [Atualizado dia 24/08/2016]:
Após alguns ótimos comentários do André Lange, resolvi atualizar o post com uma análise mais detalhada do problema feita por ele, além das novas soluções já listadas acima. Pra quem quiser uma análise ainda mais apurada, sugiro que confiram os comentários dele nesse post. O fato é que o Android tem um bug no IPV6, mas especificamente no seu protocolo da camada de enlace NDP. É incrível como até hoje esse bug do Android ainda não foi corrigido, o que tem prejudicado bastante a migração para IPV6.
"No momento em que você conecta o smartphone em uma rede WiFi com IPv6, a navegação em IPv6 funciona normalmente durante alguns minutos. Passados esses minutos, o celular para de responder ao protocolo NDP, mesmo o roteador enviando inúmeras requisições de Neighbor Solicitation para o endereço IPv6 do celular. Isso faz com que o roteador WiFi pense que o celular não está mais presente na rede e assim os pacotes que chegam para o endereço IPv6 dele não tem para onde ir (o roteador não sabe qual o MAC associado àquele endereço IPv6 ou essa informaçao já expirou) e são descartados. Os pacotes IPv6 gerados pelo celular continuam indo para a internet. São as respostas que não retornam ao celular pq ele deixa de responder o protocolo NDP, que é fundamental." Uma das soluções apontadas pelo André (veja nos comentários) é setar o MAC do smartphone manualmente através de um script.
E qual a real importância da adoção do IPV6? "O acesso IPv4 com NAT (tradução de endereços no roteador para permitir compartilhamento de um endereço IP entre várias máquinas) já criou inúmeros problemas e dificuldades para os usuários. Por exemplo, a necessidade de configurar port forwarding nos roteadores para jogar online, baixar torrent, fazer acesso remoto ou simplesmente pra obter a qualidade total nas chamadas de audio/vido em apps como o Skype. Acontece que com a exaustão dos endereços v4 públicos (a internet cresceu e os números acabaram) isso já está piorando, pois os provedores não tem alternativa senão implantar mais uma camada NAT no próprio provedor (CG-NAT) e amontoar diversos clientes atrás de um único endereço IP. Como nós usuários (mesmo os mais avançados) não temos acesso administrativo a esse NAT do provedor, não temos mais como fazer port forwarding e os programas que faziam automaticamente isso por nós (via UPnP) também não conseguem mais fazer. A qualidade do acesso em v4 vai piorar cada vez mais com esse CG-NAT, ficando muitos usuários bloqueados em algum site porque o endereço IP que eles compartilham no provedor teria sido alguma vez utilizado de forma maliciosa/fraudulenta no acesso à esse site. A única solução de longo prazo para tudo isso é a implantação do IPv6, que por ter uma quantidade muito maior de endereços disponível elimina a necessidade de compartilhamento de endereços (NAT)."