Uma máquina, dois trabalhos, um firewall: um uplink Wi-Fi, uma pequena sub-rede Ethernet atrás dele e um cliente VPN de desktop que assume que tudo o que sai da máquina é local. Os aplicativos iniciados localmente saem pelo caminho de saída local. Os dispositivos atrás da estação de trabalho chegam pela porta Ethernet e precisam de uma decisão de encaminhamento. Uma exclusão escrita para o primeiro caminho nunca vê o segundo, e é por isso que um navegador contorna o túnel enquanto os dispositivos não.

Dois caminhos de pacotes, uma política

OriginPathDecision owner
Application on the workstationOUTPUT then egressThe VPN app's routing policy
Device behind the workstationPREROUTING then FORWARDThe workstation's own forwarding policy

A primeira linha é o que a maioria dos guias de split-tunneling descreve. A segunda é uma configuração de roteador que por acaso vive na mesma máquina. Fundi-las num único modelo mental é o erro; partilham um kernel, mas não uma política. Desenhe os dois caminhos antes de editar qualquer regra, e o resto do projeto decorre de qual caminho falta.

A tabela também explica por que uma máquina pode passar num teste e falhar noutro. O navegador na estação de trabalho prova o caminho local; um portátil ligado à porta Ethernet prova o caminho de encaminhamento. Valide cada alteração com ambos, ou o segundo fica sem teste, por muitas vezes que recarregue o navegador.

O que uma exclusão de aplicativo realmente classifica

Uma exclusão por aplicativo costuma funcionar marcando os pacotes de um processo ou de um utilizador e depois encaminhando o tráfego marcado para fora do túnel. Isso é uma construção de saída local. Um pacote de um dispositivo a jusante não tem processo local, por isso nunca corresponde ao seletor, seja qual for o seletor.

Seja qual for o seletor, as duas listas não são a mesma lista, e é aí que está o ponto. O guia da Mullvad para Linux descreve marcas consumidas pela sua firewall e pela sua política de encaminhamento, e os seus exemplos visam a saída local; não são uma descrição suportada de um roteador a jusante. Copiá-los produz uma máquina que acredita ter uma exclusão enquanto encaminha tudo para o túnel.

Escreva o contrato de trânsito

Nomeie em conjunto o prefixo de origem a jusante e a interface de entrada, e depois restrinja esse prefixo na entrada. Sem a restrição, qualquer dispositivo que alcance a porta pode reivindicar um endereço excluído e sair pelo desvio. Trate-o como duas perguntas: estes hosts podem usar este uplink, e podem alcançar a estação de trabalho ou os intervalos privados do túnel? São permissões adicionais, não efeitos colaterais da escolha do uplink.

Permita o encaminhamento e depois filtre-o. O gateway Linux precisa de encaminhamento ativado, regras que permitam o tráfego pretendido nos dois sentidos e, ou uma rota de retorno a montante, ou uma tradução de origem deliberadamente limitada. O NAT sozinho não seleciona o uplink nem concede passagem por um filtro; apenas reescreve um endereço depois dessas decisões.

A classificação para o trânsito deve ocorrer antes da decisão de rota de encaminhamento, ou seja, na fase de prerouting e não em output. Uma regra colocada depois da decisão ainda pode alterar o pacote, mas não pode alterar para onde já foi enviado.

As marcas pertencem ao aplicativo que as possui

Os valores de marca, os números de tabela e as prioridades de cadeia fazem parte da política do aplicativo VPN, não são constantes eternas. Uma rede duradoura que dependa de inserir uma regra numa tabela que outro programa regenera quebrará na próxima atualização, normalmente durante uma reconexão e não num momento conveniente.

Adicionar uma segunda cadeia base com um veredicto accept não substitui necessariamente o drop de uma cadeia posterior. As cadeias base têm ganchos e prioridades, e o primeiro veredicto na ordem vence; um accept numa cadeia não cancela um drop a que outra cadeia chega primeiro. Olhe para o conjunto completo de regras e para a ordem da política de encaminhamento, não para o único contador que aumentou. Um contador prova que uma regra correu, nunca que o seu veredicto foi o aplicado.

Integre, ou mova a sub-rede

Os dois projetos diferem em quem possui o desvio. Um projeto integrado mantém uma máquina e uma política, ao custo de depender do ciclo de vida das tabelas do aplicativo VPN e de um conjunto de marcas que a sua documentação pode alterar. Um roteador dedicado para a rede a jusante elimina essa dependência por completo: a sub-rede tem o seu próprio uplink e a estação de trabalho continua a ser um cliente sem papel de encaminhamento.

Escolha o segundo quando a rede a jusante tiver de continuar a funcionar através de atualizações do VPN, ou quando ninguém puder testar a política integrada após cada versão. Escolha o primeiro apenas quando a integração estiver documentada e alguém for responsável por ela.

Verifique a fronteira em quatro estados: ligado, a reconectar, bloqueado deliberadamente e parado. Verifique a resolução de nomes e as duas famílias de endereços em cada um, porque um desvio que fura o DNS não é a exclusão que desenhou. O teste deve provar a fronteira exata, não apenas que uma página carregou.

Artigos relacionados