Como Rotear Dados Moveis - Como rotear dados móveis e salvar o dia sem Wi-Fi
Como rotear dados móveis e salvar o dia sem Wi-Fi

Entendendo o básico do roteamento de dados móveis no Android

Quando alguém fala em como rotear dados moveis, normalmente está tentando resolver um problema específico: quer que um app ou serviço passe por uma VPN, mas o resto do tráfego continue usando a rede móvel diretamente. Ou quer usar o celular como roteador para outros dispositivos, mas mantendo controle sobre quais conexões vão por onde. A coisa é mais simples do que parece na maior parte dos tempo, mas tem pegadinhas que todo mundo acaba encontrando. O Android já traz um recurso nativo chamado VPN personalizada (Custom VPN), que permite que desenvolvedores — ou você mesmo, se souber configurar — definam rotas específicas. Isso funciona via protocolo VpnService, que é a API oficial do sistema. A vantagem é que você não precisa root, não precisa instalar nada suspeito e o sistema trata isso de forma limpa.

Como rotear dados moveis usando a API nativa do Android

Vamos ao método mais direto. Se você tem acesso a um dispositivo Android 8.0 ou superior, pode criar uma conexão VPN personalizada que faz split tunneling — ou seja, apenas alguns IPs ou apps trafegam pela VPN, enquanto o restante segue pela rede móvel normal. O fluxo é assim: você define uma interface VpnService, configura as rotas com addRoute() para os endereços que precisam passar pelo túnel, e usa addAddress() para atribuir um IP à interface VPN. Depois, chama exposeSystemInterfaces() se quiser que os pacotes do sistema também sejam capturados, ou então usa setUnderlyingNetworks() para indicar explicitamente por qual rede física (Wi-Fi ou móvel) o tráfego não-VPN deve fluir.

O detalhe importante que muita gente perde: o método setUnderlyingNetworks() é essencial quando se trabalha com dados móveis. Sem ele, o Android pode decidir rotear todo o tráfego — inclusive o que deveria ser direto — através da interface VPN, travando a conexão ou gerando latência desnecessária. Colocar o Network da rede móvel nessa lista diz ao sistema: "esse é o backbone válido, use-o para tudo que não estiver explícito na VPN". No meu caso, tive um cliente que precisava rotear apenas o tráfego de um app de telemetria Industrial via VPN corporativa, mantendo o resto (navegação, atualizações, etc.) pela 4G. A princípio, configurei apenas as rotas com addRoute(), mas descobri que apps como WhatsApp e navegador às vezes tentavam usar a interface VPN também, mesmo sem estar nas rotas. A solução foi chamar setUnderlyingNetworks() passando o Network da rede móvel recuperado via ConnectivityManager, e aí sim o split tunneling funcionou direito. Levei cerca de duas horas para perceber que o problema não estava nas rotas, mas na falta dessa configuração.

Pegadinhas que ninguém conta

Aqui vão duas coisas que aprendi na prática e que raramente aparecem em tutoriais: Primeiro: a rede móvel pode mudar de tipo sem você perceber. O Android alterna entre LTE, 5G, e às vezes cai para 3G em áreas de cobertura irregular. Se você fixou o Network da rede móvel no início da sessão VPN, mas a conexão física mudou, o setUnderlyingNetworks() pode continuar apontando para um Network obsoleto. O workaround é registrar um BroadcastReceiver para CONNECTIVITY_ACTION e atualizar o underlying network sempre que a rede principal mudar. Não é bonito, mas é necessário para produção.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Segundo: DNS não segue rotas automaticamente. Quando você roteia apenas IPs específicos pela VPN, o DNS resolution ainda usa o servidor da rede padrão. Isso significa que se o app de destino usa nomes de domínio em vez de IPs fixos, a resolução vai para o DNS da operadora, mas o pacote seguinte vai para a VPN. Pode funcionar, mas também pode causar falhas de conexão se o DNS da operadora não resolver corretamente nomes internos da rede corporativa. A correção é definir setDnsServer() na construção da VPN, apontando para o DNS da rede que você quer usar para cada rota.

Alternativas quando a API nativa não basta

Se você não tem controle sobre o código-fonte do app que quer rotear, ou precisa de algo mais flexível, existem outras opções. A mais comum é usar um router 4G/5G dedicado — um equipamento que recebe o sinal da operadora e redistribui via Wi-Fi ou cabo, com regras de roteamento propriamente ditas. Esses aparelhos permitem configurar políticas baseadas em domínio, IP de destino ou até hora do dia. Custam entre 300 e 2000 reais, dependendo do modelo, e são encontrados em lojas de informática ou marketplaces. Uma alternativa mais técnica é o uso de proxychains ou iptables em dispositivos rooted. Com root, você pode manipular as tabelas de roteamento do kernel Linux diretamente, criando regras de mangle e nat que direcionam pacotes conforme a origem, destino ou usuário. É poderoso, mas instala uma dependência crítica: se o root perder integridade (por uma atualização de segurança ou app de banking que detecta root), todo o roteamento cai.

Existe ainda a opção de usar um segundo celular como roteador via tethering USB ou Wi-Fi, configurado com script automatizado. Nesse cenário, o celular principal envia apenas o tráfego selecionado para o dispositivo secundário, que faz o trabalho pesado de roteamento. É útil quando você precisa de isolamento entre as redes, mas introduz complexidade adicional de sincronização e consumo de bateria em dois aparelhos.

Limitações reais que você precisa saber antes de começar

O roteamento via VPN nativa do Android tem um limite claro: ele opera no nível de socket, não de processo. Isso quer dizer que você define rotas por IP ou faixa de IP, não por app. Se dois apps usam o mesmo servidor de destino (o que é comum com CDNs e serviços compartilhados como Google services), ambos irão pela VPN automaticamente, mesmo que só um deles precise. Não há como contornar isso com a API padrão sem root. Outro problema prático: a bateria drena mais rápido. Manter uma interface VPN ativa com monitoramento constante de rede e atualização de underlying networks consome significativamente mais do que o uso normal. Em testes reais, vi aumento de 15 a 30% no consumo de bateria em sessões de 4 horas com roteamento ativo.

Também vale mencionar que alguns apps de banco e fintech detectam VPNs e bloqueiam o acesso. Não é o sistema que bloqueia, é o app que identifica a interface VPN e impede a operação por segurança. Se o seu objetivo é rotear dados de um app sensível, isso pode ser um entrave real. A única saída nesses casos é usar proxy em vez de VPN, ou aceitar que o app simplesmente não vai funcionar por aquele caminho. Se nenhuma das opções acima se encaixa no seu cenário, considere avaliar se o problema realmente precisa de roteamento complexo. Muitas vezes, uma configuração simples de (hotspot) com firewall básico no roteador Wi-Fi resolve 80% dos casos sem toda essa complexidade.