Android OpenVPN: adicionar uma rota privada sem root no telefone
Adicione uma rota no perfil que o Android realmente carrega e depois confirme que o servidor a permite. Guia para a edição, a reconexão e quatro verificações.
Você precisa de mais uma sub-rede privada — digamos 10.60.0.0/24 — que o perfil não inclui no momento. Num portátil, você adicionaria uma rota e seguiria. No Android, a VPN é um aplicativo, o dispositivo tun pertence a esse aplicativo e não há tabela de rotas para editar sem root. A rota continua a ser necessária, mas entra no perfil que o cliente carrega, e só funciona se o outro lado concordar. Aqui estão a edição, a reconexão, o lado do servidor e a reversão.
Antes da edição: o que uma rota pode e não pode fazer
Uma rota responde a uma pergunta: qual interface deve transportar o tráfego para este destino. Não autoriza nada. Se o dono da rede não concordou que este telefone pode alcançar essa sub-rede, uma rota correta produz uma configuração de aparência correta e um descarte silencioso no gateway, e você passará a hora seguinte editando o arquivo errado.
Obtenha esse acordo primeiro, por escrito se a rede tiver um dono. Depois anote o que você não está fazendo: não atribui ao telefone um endereço dentro dessa LAN, não altera o listener do servidor e não escolhe um site pelo nome do host. São quatro mudanças diferentes e apenas a primeira é sua.
| The route gives you | The route does not give you |
|---|---|
| A destination prefix associated with the tunnel | Permission to forward at the gateway |
| A path for the phone's own traffic | A return route on the target host |
| A scope for the client's virtual interface | A name in DNS, or HTTPS identity |
Edite o perfil que o cliente realmente carrega
Para um cliente compatível que importa texto de opções OpenVPN comum, o acréscimo é uma linha:
route 10.60.0.0 255.255.255.0Adicione-a ao corpo do perfil, perto das outras diretivas de roteamento, e mantenha o endpoint, os certificados, o tratamento de chaves e as linhas de verificação do operador exatamente como estavam. Não cole um exemplo antigo inteiro para pegar uma linha emprestada: compressão, caminhos absolutos de arquivo e definições de cipher obsoletas viajam junto e vão custar uma sessão de depuração separada.
O passo que as pessoas perdem é a propriedade do arquivo. Se o aplicativo importou um perfil, a cópia que ele usa é do aplicativo, e editar o original baixado não muda nada. Use o editor suportado pelo cliente, ou reimporte o arquivo editado pelo caminho de atualização, e confirme o nome do perfil ativo quando existirem vários nomes parecidos. Anote qual você alterou.
Se o perfil já traz route-nopull, nenhuma rota do servidor é instalada e todo prefixo de que o telefone precisa deve ser listado explicitamente. É um desenho legítimo, mas significa que uma linha omitida parece exatamente uma recusa do servidor.
Reconecte e verifique no dispositivo
Desconecte primeiro e depois reconecte o perfil específico que você editou, em vez de deixar o aplicativo restaurar a última sessão. Abra o registro de conexão e confirme que o cliente analisou a nova linha; uma diretiva de rota ignorada pela interface é um resultado comum de editar a cópia errada.
Teste o destino por endereço, não por nome. Uma verificação TCP a uma porta de serviço conhecida informa mais do que um ping, porque muitos hosts respondem a ICMP enquanto a porta de serviço está filtrada. Se o endereço responde e um nome não, você tem uma questão de resolver e não de roteamento, e a próxima seção não é para você.
Duas verificações de escopo também cabem aqui. VPN por aplicativo significa que uma rota de endereço pode existir enquanto o aplicativo com que você testa está fora do conjunto incluído, então teste com um aplicativo que esteja realmente dentro. E um prefixo IPv4 não diz nada sobre o caminho IPv6; se o serviço for dual-stack, adicione a rota IPv6 correspondente ou espere que o cliente prefira um caminho que você não pretendia.
Um resultado negativo vale a pena reconhecer cedo: se uma rota full-tunnel já cobre 0.0.0.0/0, o prefixo não está em falta e adicioná-lo de novo não muda nada. Cobertura duplicada não repara uma recusa do lado do servidor nem uma resposta ausente.
Termine o caminho no servidor
Três coisas devem ser verdadeiras além do telefone. O gateway precisa de uma rota para o destino e de permissão para encaminhar a origem do telefone na direção dele. O alvo precisa aceitar essa origem e devolver as respostas pelo gateway, ou o desenho precisa de tradução deliberada na saída. A opção route do manual do OpenVPN cobre a diretiva do lado do cliente; encaminhamento e roteamento de retorno são ajustes separados em máquinas separadas.
Se o destino estiver atrás de outro cliente VPN em vez de diretamente atrás do gateway, o servidor precisa de uma iroute para a sub-rede desse par. Essa diretiva pertence ao servidor e descreve qual cliente possui um prefixo; um telefone não pode fornecê-la a partir do próprio perfil, e nenhuma quantidade de edição no cliente a substitui.
Verifique o caminho de retorno explicitamente. Uma resposta que sai pela rota predefinida em vez do túnel produz o sintoma clássico de meio aberto: a conexão estabelece-se numa direção e nada volta. A tradução de origem no gateway é uma correção legítima quando o alvo não consegue rotear de volta, mas é uma decisão de política com as suas próprias consequências.
Reversão e aceitação
Guarde o perfil anterior antes de o editar. Se a mudança piorar as coisas, restaure essa cópia pelo mesmo caminho de reimportação, reconecte e confirme que o comportamento antigo volta — isso confirma que alterou o que pensava ter alterado. Uma reversão que não restaura o estado antigo significa que o aplicativo guarda uma terceira cópia que você não encontrou.
Aceite a mudança quando quatro coisas se verificarem, testadas nesta ordem após uma reconexão nova: o destino responde na sua porta de serviço, o nome privado resolve se for esperado, o HTTPS ainda valida o nome de host pretendido, e tudo continua a funcionar após um reinício ou uma mudança de Wi-Fi para rede móvel. A última verificação é a que apanha uma rota que só existe até o Android restabelecer o túnel.
- Confirme que o dono da rede permite o destino antes de editar o que quer que seja.
- Coloque a rota no perfil que o cliente carrega e depois reimporte e reconecte.
- Verifique pela porta de serviço, dentro do âmbito por aplicativo, para a família de endereços certa.
- Corrija o encaminhamento, o roteamento de retorno e a iroute no servidor, não no telefone.
- Guarde uma cópia de reversão e volte a testar após um reinício.