NO_PROPOSAL_CHOSEN num registro manda as pessoas para a chave pré-compartilhada, e o erro sobrevive à alteração. Nunca foi um problema de credenciais: o par rejeitou cada proposta oferecida para essa troca, o que é uma afirmação sobre algoritmos e não sobre identidade. A primeira pergunta útil não é qual algoritmo editar, mas qual troca foi rejeitada. Responda a isso antes de comparar qualquer coisa. Depois compare a suíte completa oferecida com a suíte completa que o par permite.

Primeiro: qual troca foi rejeitada

O IKEv2 negocia dois tipos de associação. A IKE SA protege a própria negociação, e a CHILD SA protege o tráfego. Cada uma tem o seu próprio conjunto de propostas, e cada uma pode falhar com a mesma notificação. Uma rejeição durante a negociação IKE inicial e uma rejeição durante a negociação CHILD exigem correções diferentes, e o registro costuma nomear a troca uma ou duas linhas acima da notificação. Leia essas duas linhas juntas, ou você editará a lista de propostas errada.

A notificação sozinha não identifica a troca. A linha acima nomeia a SA em negociação, e esse nome aponta para a lista de propostas a inspecionar.

Compare suítes completas, não palavras-chave isoladas

Uma proposta é uma combinação: algoritmo de cifragem, integridade ou AEAD, grupo de troca de chaves e qualquer função pseudoaleatória. Comparar apenas o nome da cifragem é o erro habitual, porque dois pares podem concordar em AES-256 e ainda discordar em SHA-1 versus SHA-256. Escreva as suítes oferecida e permitida lado a lado na fase que falhou e depois procure a interseção vazia.

offered:   aes256-sha256-modp2048
permitted: aes256-sha1-modp2048

Verifique também que ambas as implementações suportam o que você configurou. Um nome copiado de outra plataforma pode parecer sintaticamente familiar enquanto o plugin ou a implementação está completamente ausente.

A suíte IKE e a suíte ESP são objetos diferentes

Editar a proposta IKE não reparará uma proposta CHILD rejeitada, e o contrário também é verdade. No strongSwan são configurações separadas, aproximadamente proposals = aes256-sha256-modp2048 para a IKE SA e uma lista ESP separada para a CHILD SA. Altere a lista que corresponde à troca falhada e depois releia o registro em vez de supor que a correção funcionou.

Para a CHILD SA, a configuração relevante é a lista de propostas ESP, não a lista IKE. Copiar a linha IKE para ela produz uma configuração que é analisada mas negocia o objeto errado.

Um túnel que funciona e falha na renovação da chave

Se o túnel funcionou durante uma hora e depois falhou, a negociação inicial não é o problema. Uma renovação de chave pode testar outras condições: um grupo de troca de chaves diferente após a primeira troca, uma divergência de tempo de vida entre os pares ou uma política de respondedor alterada. Guarde o carimbo de tempo de renovação e os identificadores de associação dos dois lados. Esse padrão exige uma comparação de propostas na renovação, não um tempo limite mais longo. Alterar o tempo limite esconde o sintoma e deixa a divergência no lugar.

ipsec statusall mostra cada associação e os algoritmos realmente negociados. Essa saída é a forma mais rápida de confirmar qual lista foi usada, e separa um erro de configuração de um túnel obsoleto que nunca foi renegociado.

ipsec statusall | grep -E "IKE:|ESP:"

Escolha uma interseção e depois confirme as duas fases

Peça ao administrador que escolha uma interseção moderna documentada que ambos os pares suportem, e anote-a. Não resolva o erro ativando todos os algoritmos antigos nem desativando a verificação de identidade, porque nenhuma das duas coisas decorre de uma rejeição. Após a alteração, estabeleça uma nova conexão e depois force uma renovação de chave. A primeira conexão sozinha não prova que o caminho de renovação funciona.

Guarde a combinação aceita junto com as versões de firmware. Se o próximo erro disser respeito a seletores de tráfego, trate-o separadamente, pois o acordo sobre criptografia não diz nada sobre quais sub-redes o túnel protege. A documentação de propostas do strongSwan cobre a sintaxe das duas listas.

Artigos relacionados