O erro 789 em uma conexão L2TP do Windows significa que o túnel morreu dentro da troca de segurança IPsec, o que acontece muito antes de o Windows enviar uma senha de usuário a qualquer lugar. Tentar a senha de novo, ou redefini-la no diretório, não pode fazer essa etapa avançar. O que a faz avançar é reconstruir a conexão a partir do PowerShell com a proposta que o gateway realmente oferece, porque o assistente de Configurações escolhe as transformações IPsec em silêncio e nunca mostra o que escolheu. Este é o runbook para isso: crie o perfil, fixe a proposta e depois use uma tabela de etapas para que o próximo código lhe diga alguma coisa.

Crie o perfil sem o assistente

Add-VpnConnection grava uma entrada nativa da agenda telefônica, então o resultado é o mesmo objeto que o aplicativo Configurações editará depois. Execute-o a partir de uma sessão elevada quando a conexão precisar existir para cada conta da máquina, ou do contexto do usuário quando ela precisar permanecer privada:

Add-VpnConnection -Name "Contoso L2TP" `
  -ServerAddress 203.0.113.10 `
  -TunnelType L2tp `
  -EncryptionLevel Required `
  -AuthenticationMethod MSChapv2 `
  -RememberCredential -Force

Faça -AuthenticationMethod corresponder ao que o gateway oferece. MSChapv2, EAP e PAP não são intercambiáveis, e um perfil que exige um método que o servidor não aceitará falha antes de qualquer registro de usuário ser consultado. Mantenha -EncryptionLevel Required para qualquer coisa real; Optional permite que o Windows aceite um túnel sem criptografia se o par oferecer um, o que é um atalho de laboratório e não uma configuração para entregar.

Se você passar -L2tpPsk, essa chave pré-compartilhada é escrita no perfil no disco, de onde qualquer pessoa que consiga ler o perfil naquela máquina pode recuperá-la. Use um certificado para autenticar o par quando o gateway suportar, e quando uma PSK for inevitável, mantenha-a fora do repositório e fora do histórico do shell em vez de colá-la em cada execução de provisionamento.

Fixe a proposta em vez de aceitar os padrões

O Windows preenche as transformações IPsec por conta própria, e é por isso que duas máquinas com uma conexão aparentemente idêntica podem falhar de formas diferentes contra o mesmo gateway. Set-VpnConnectionIPsecConfiguration é a forma suportada de fixá-las:

Set-VpnConnectionIPsecConfiguration -ConnectionName "Contoso L2TP" `
  -AuthenticationTransformConstants SHA256128 `
  -CipherTransformConstants AES128 `
  -EncryptionMethod AES128 `
  -IntegrityCheckMethod SHA256 `
  -DHGroup Group14 `
  -PfsGroup None `
  -PassThru -Force

Esse conjunto é um arranjo L2TP/IPsec comum, não uma resposta universal. Cada parâmetro aceita uma lista fixa de valores, e uma combinação que a plataforma não consegue mapear volta como erro do cmdlet em vez de um perfil silenciosamente enfraquecido. Trate esse erro como uma afirmação sobre os valores, não sobre suas permissões.

Copie a proposta da documentação do gateway ou das suas configurações ativas de fase 1 e fase 2, e altere um campo de cada vez apenas enquanto o gateway registra as transformações que recusa. Percorrer cinco campos produz uma conexão que funciona por acidente e um registro que não explica nada à próxima pessoa.

Leia uma falha por etapa, não pelo texto do erro

789 pertence a uma família de códigos que na caixa de diálogo do cliente parecem todos iguais. Coloque o código diante da etapa a que pertence antes de mexer no perfil de novo:

What you seeStage that failedCheck first
Nothing happens, then a timeoutNo IKE response at allServer address, UDP 500 and 4500 reachability, NAT traversal on the gateway
Error 789IKE security exchangeProposal, pre-shared key, certificate trust and client clock
Error 691 or a repeated password promptUser authenticationAccount state, domain, RADIUS or NPS policy
Tunnel up, some hosts unreachableRouting or DNS after PPPSplit-tunnel routes, pushed DNS, remote subnet mask

As duas funções das credenciais importam aqui. Uma chave pré-compartilhada ou um certificado autentica os pares entre si, enquanto MSChapv2 ou EAP autentica você dentro do túnel. Redefinir uma senha de usuário não pode corrigir a primeira, um novo segredo compartilhado não pode corrigir a segunda, e alterar as duas de uma vez destrói a evidência de qual estava errada.

No caminho do certificado, verifique o relógio do cliente, a cadeia de confiança e a identidade que o gateway espera antes de considerar relaxar a validação. Desativar a validação transforma um 789 visível em um túnel que se conecta confiando no par errado, e nada no cliente vai lhe dizer que isso aconteceu. lista de erros de acesso remoto da Microsoft é a referência para os próprios códigos, e separa as falhas da camada de segurança das falhas de logon.

Verifique pelas duas pontas antes de considerá-lo corrigido

Leia o perfil de volta, mas não espere a proposta na saída. Get-VpnConnection informa o nome, o endereço do servidor, o tipo de túnel, o nível de criptografia e o método de autenticação, e não sabe nada sobre transformações, então a leitura confirma que a entrada existe e aponta para o host certo:

Get-VpnConnection -Name "Contoso L2TP" |
  Select-Object Name, ServerAddress, TunnelType, EncryptionLevel, AuthenticationMethod

Disque pela linha de comando para obter um número em vez de uma caixa de diálogo: rasdial "Contoso L2TP" retorna o mesmo código de falha que a interface retornaria, e rasdial "Contoso L2TP" /disconnect o limpa entre tentativas. Depois leia o lado do gateway para essa mesma tentativa. Um ipsec statusall do strongSwan ou um log IKE do roteador informa qual proposta chegou e qual foi recusada, e comparar isso com os valores do cmdlet é o único passo que realmente prova que as duas pontas concordaram.

Uma conexão bem-sucedida não é a linha de chegada. Abra o aplicativo que importa ao usuário, porque rotas, DNS empurrado e configurações de túnel dividido falham depois que o túnel está de pé e não produzem nenhuma caixa de diálogo de erro.

Automatize isso e reverta com limpeza

A instalação sem supervisão é a razão de escrever um script para isso, e o passo de discagem é onde as credenciais vazam. rasdial as recebe na própria linha de comando, onde outros usuários locais e a maioria dos coletores de log podem lê-las:

subprocess.run(["rasdial", "Contoso L2TP"], check=True)

Prefira uma credencial limitada à conta que executa a tarefa, ou deixe o perfil armazená-la com -RememberCredential, em vez de passar uma senha como argumento em uma tarefa agendada. Os próprios comandos de provisionamento são seguros de repetir com -Force, mas vão sobrepor alegremente uma proposta antiga, então uma reexecução só ajuda se o script carregar os valores atuais.

Os perfis persistem entre reinicializações e sobrevivem à configuração de gateway para a qual foram criados. Quando a proposta do gateway muda, remova a entrada e crie-a de novo em vez de empilhar um segundo conjunto de valores: Remove-VpnConnection -Name "Contoso L2TP" -Force, e depois repita os dois cmdlets com o conjunto novo.

Feche o ciclo com quatro verificações que vivem ao lado do script: Get-VpnConnection mostra o tipo de túnel e o nível de criptografia esperados; o gateway registra uma fase 1 e uma fase 2 concluídas para o endereço do seu cliente; rasdial retorna sucesso e o aplicativo abre; e a proposta registrada no script corresponde à configuração atual do gateway. Quando o próximo 789 chegar, essa comparação leva minutos em vez de uma tarde.

Artigos relacionados