A rota padrão do XFRM engoliu IKE e ESP: mantenha o caminho externo
Uma política que protege tudo também pode capturar os pacotes que mantêm o túnel. Marque IKE e ESP, ou mantenha uma rota para o peer.
O tráfego está protegido, o túnel está ativo, e então ele morre na próxima renovação de chaves. Uma rota padrão pela interface XFRM descrevia o tráfego que você queria proteger. Ela também engoliu os pacotes necessários para continuar protegendo-o.
Os dois destinos envolvidos não são intercambiáveis. O roteamento precisa dizer isso explicitamente.
Para onde vai realmente a busca do peer
Registre as regras ativas, a tabela que contém a rota XFRM e o endereço público do peer. Depois olhe o caminho que a conexão externa tomaria com sua origem e marca reais. Um destino genérico não diz nada sobre esse caminho de controle. Apenas a origem e a marca reais dão uma resposta útil.
Uma conexão inicial bem-sucedida também prova pouco. A falha costuma aparecer depois que uma instalação de rota muda a resposta. A inicialização funciona, mas a primeira renovação não.
ip rule show
ip route show table 220
ip -4 route get 198.51.100.44 from 10.40.0.2
ip xfrm policy list
Se a busca do peer cair na interface XFRM, os pacotes externos estão sendo roteados para o túnel que eles mesmos constroem. Esse é o loop, visível em um único comando.
Opções de exclusão em um gateway moderno
A documentação do strongSwan sobre VPN baseado em roteamento apresenta duas respostas práticas. Uma marca IKE e ESP para que a regra que aponta para a tabela XFRM não corresponda a eles. A outra deixa uma rota do peer ou uma exclusão que a busca ainda alcança.
Escolha a que seu conjunto de regras consegue expressar sem efeitos colaterais. A marca é limpa quando o restante da pilha já usa marcas. É perigosa quando a mesma máscara significa outra coisa em outra regra. Os dois tipos de pacote precisam do tratamento de qualquer forma.
Marcar apenas IKE deixa os pacotes de dados no caminho capturado. Isso produz um túnel que faz o handshake e depois não transporta nada.
A marca é um bit no fwmark do pacote que nada mais no gateway reivindica: 0x1 com máscara 0x1 é a escolha usual, e precisa ser definida em dois lugares para que a exclusão funcione. O Charon precisa dela no socket IKE, e as configurações de marca de entrada e saída da conexão filha precisam do mesmo valor para que os pacotes encapsulados também saiam marcados. Uma máscara 0x1 em vez de 0xffffffff deixa os bits restantes livres, o que importa quando outro subsistema já marca pacotes no mesmo host. Com ambos definidos, a regra é escrita como exclusão, de modo que os pacotes marcados pulam a tabela que contém a rota XFRM e caem na tabela principal:
ip rule add not fwmark 0x1/0x1 lookup 220 pref 1000
ip -4 route get 198.51.100.44 from 10.40.0.2 mark 0x1
Depois leia a resposta com a marca aplicada. Sem ela você examina o caminho que o tráfego protegido percorre, que é o oposto da pergunta desta seção.
O que a instalação automática pressupõe sobre a compilação
Instalação automática de rota para uma interface XFRM depende da versão do strongSwan e da configuração dele. O ID da interface, a política instalada e a associação devem todos se referir aos objetos pretendidos. Uma divergência aparece como uma rota que aponta silenciosamente para algum lugar real.
Copiar um número de tabela ou uma máscara de marca de outro gateway é como as colisões começam. Verifique primeiro o que já usa isso. Uma colisão afeta tráfego muito além do túnel que você queria mudar, e o sintoma raramente aponta para a cópia.
Mudanças de endereço do peer fazem parte do projeto. Uma rota de host para o endereço de ontem não é um plano de recuperação do endpoint, enquanto uma marca sobrevive a essa mudança.
Fique de olho na primeira renovação
Verifique o caminho externo depois que as rotas protegidas estiverem instaladas, não antes. Depois acompanhe a próxima renovação e uma troca de aplicação. A falha costuma aparecer nessa transição e não na inicialização.
ip -4 route get 198.51.100.44
sudo swanctl --list-sas
sudo tcpdump -ni any 'udp port 500 or esp'
Remover temporariamente a rota padrão protegida normalmente restaura a conectividade. Esse resultado é diagnóstico, não definitivo.
O objetivo é uma separação estável entre o tráfego interno e os pacotes externos que o transportam. Escreva o mecanismo escolhido e sua tabela ou marca nas notas do gateway. Caso contrário, a próxima pessoa que mexer nas regras reintroduzirá o loop.