Os formulários de firewall pedem uma porta TCP, e a entrada óbvia é 50. Essa entrada não permite nada, porque ESP é o protocolo IP número 50 e números de protocolo não são portas. Os dois espaços de nomes compartilham inteiros pequenos e nada mais, e o erro fica invisível até o IKE terminar e o tráfego protegido nunca chegar.

Dois espaços de nomes que compartilham números pequenos

Um cabeçalho IP carrega um campo de protocolo que nomeia o que vem a seguir: 6 para TCP, 17 para UDP, 1 para ICMP, 50 para ESP, 51 para AH. Um cabeçalho TCP ou UDP carrega números de porta, que selecionam um processo no host de destino. O protocolo 50 e a porta TCP 50 são valores sem relação, mas uma caixa de diálogo pode fazê-los parecer intercambiáveis.

Por isso uma regra de encaminhamento de portas não consegue expressar ESP nativo. Não existe uma porta de destino ESP para encaminhar, e um dispositivo que só entende regras de porta não tem vocabulário nenhum para esse pacote. A regra correta nomeia o protocolo IP. Qualquer diálogo de portas é o instrumento errado para esse pacote.

A confusão tem uma segunda metade. Quando o pacote está cifrado, tudo dentro dele é opaco, incluindo o cabeçalho TCP da conexão original. Um firewall que inspeciona portas nesse pacote está olhando o cabeçalho externo, que no caso nativo não tem portas a inspecionar.

ESP nativo, depois a alternativa encapsulada

O ESP nativo é transportado diretamente como protocolo IP, o que é eficiente e incômodo em igual medida. É eficiente porque não há cabeçalho extra, e incômodo porque nenhum dispositivo que traduza endereços e portas consegue acompanhá-lo. O NAT traversal existe para resolver isso, envolvendo o pacote ESP dentro de UDP para que o tradutor tenha portas a reescrever.

Form on the wireHow it is identifiedWhat the firewall must permit
IKE negotiationUDP with a destination portUDP 500, and 4500 once traversal is detected
Native ESPIP protocol 50 in the outer headerThe protocol itself, with no port to name
ESP inside UDPUDP 4500 carrying an ESP payloadThe UDP port pair, which translation devices can track

As duas formas são implantações alternativas do mesmo canal de dados, não camadas de um. Permitir ESP nativo não permite a forma encapsulada, e permitir UDP 4500 não permite o tráfego nativo, então um conjunto de regras deve corresponder à implantação em vez de cobrir os dois por acidente.

A detecção também importa aqui. Os extremos decidem entre as formas durante a negociação, e a troca costuma ocorrer quando um NAT é detectado entre eles. Por isso um caminho que muda depois de estabelecido o túnel pode mover o tráfego para um espaço de nomes que suas regras nunca cobriram.

Leia qual forma a conexão realmente usa

Pergunte ao extremo em vez de adivinhar pelo firewall. No Linux a entrada de estado informa se a associação usa encapsulamento UDP e quais portas estão envolvidas. Uma captura responde à mesma pergunta pelo cabo, e ambas são mais rápidas do que ler um conjunto de regras e esperar.

ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'

O primeiro comando mostra um tipo de encapsulamento quando o NAT traversal está em uso e nada quando não está. O segundo mostra qual das duas formas realmente atravessa a interface, e isso encerra discussões sobre uma configuração que parece correta no papel.

A contraprova pertence ao mesmo passo. Uma regra que relata zero correspondências diz a você que o pacote nunca a alcançou, e isso é uma questão de roteamento ou de seletor, não de firewall.

Em seguida confirme o canal de controle separadamente. O IKE tem suas próprias portas e seus próprios registros, e uma negociação concluída sem dados é exatamente a separação da qual trata este artigo.

Escreva a regra no espaço de nomes correto

Uma regra de protocolo e uma regra de porta são instruções diferentes, então a ferramenta precisa expressar a que você quer dizer. No nftables a correspondência de protocolo é explícita, e a alternativa encapsulada recebe sua própria regra UDP. Mantenha as duas regras adjacentes para que o par fique visível na revisão.

nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept

Não amplie nenhuma das regras para compensar um diagnóstico errado. Um permitir tudo para o protocolo ESP em todas as interfaces, ou uma permissão UDP de qualquer lugar para qualquer lugar, corrige um sintoma e remove o controle que você tentava configurar. O fluxo estreito suportado quase sempre basta uma vez conhecida a forma.

Por fim, mantenha as camadas claras quando o túnel funciona e a aplicação não. Os pacotes que chegam ao gateway ainda precisam de encaminhamento, de uma rota de retorno e de uma política que os admita, e nada disso é expresso por uma regra ESP. A porta que falta explica uma falha específica, não todas as falhas de IPsec. Mantenha a correção da regra e a verificação de roteamento como duas conclusões separadas.

Anote a forma que você observou, a regra de protocolo que adicionou e o contador que viu depois. Três linhas, e a próxima pessoa consegue distinguir um erro de espaço de nomes de um erro de roteamento em um minuto em vez de uma tarde.

Artigos relacionados