Windows의 L2TP/IPsec 오류 789: 프로필을 만들고 제안을 고정하세요
오류 789는 IPsec 교환에서 실패하며 암호 문제가 아닙니다. L2TP 프로필을 스크립트로 만들고 제안을 고정한 뒤 이후 코드를 단계별로 읽으세요.
Windows L2TP 연결에서 오류 789는 터널이 IPsec 보안 교환 내부에서 죽었다는 뜻이며, 이는 Windows가 사용자 암호를 어디론가 보내기 훨씬 전에 일어납니다. 암호를 다시 시도하거나 디렉터리에서 재설정해도 그 단계를 앞으로 나아가게 할 수 없습니다. 앞으로 나아가게 하는 것은 게이트웨이가 실제로 제공하는 제안으로 PowerShell에서 연결을 다시 만드는 일이며, 설정 마법사는 IPsec 변환을 조용히 선택하고 무엇을 선택했는지 결코 보여 주지 않기 때문입니다. 이것이 그 실행서입니다: 프로필을 만들고, 제안을 고정하고, 다음 코드가 무언가를 알려 주도록 단계 표를 사용하세요.
마법사 없이 프로필 만들기
Add-VpnConnection는 네이티브 전화 번호부 항목을 쓰므로 결과는 설정 앱이 나중에 편집하는 것과 같은 개체입니다. 연결이 컴퓨터의 모든 계정에 존재해야 하면 상승된 세션에서, 비공개로 유지해야 하면 사용자 컨텍스트에서 실행하세요:
Add-VpnConnection -Name "Contoso L2TP" `
-ServerAddress 203.0.113.10 `
-TunnelType L2tp `
-EncryptionLevel Required `
-AuthenticationMethod MSChapv2 `
-RememberCredential -Force
-AuthenticationMethod를 게이트웨이가 제공하는 것에 맞추세요. MSChapv2, EAP, PAP는 서로 바꿀 수 없으며, 서버가 받아들이지 않을 방법을 요구하는 프로필은 어떤 사용자 레코드도 조회되기 전에 실패합니다. 실제로 쓰는 모든 것에는 -EncryptionLevel Required를 유지하고, Optional는 상대가 제공하면 Windows가 암호화되지 않은 터널을 받아들이게 하는데, 이는 실험실의 지름길이지 배포할 설정이 아닙니다.
-L2tpPsk를 전달하면 그 사전 공유 키가 디스크의 프로필에 기록되어, 그 컴퓨터에서 프로필을 읽을 수 있는 사람이면 누구나 복구할 수 있습니다. 게이트웨이가 지원하면 피어 인증에 인증서를 사용하고, PSK가 불가피하면 모든 프로비저닝 실행에 붙여 넣는 대신 리포지토리와 셸 기록 밖에 두세요.
기본값을 받아들이는 대신 제안 고정하기
Windows는 IPsec 변환을 스스로 채우기 때문에, 겉보기에 동일한 연결을 가진 두 컴퓨터가 같은 게이트웨이에 대해 다르게 실패할 수 있습니다. Set-VpnConnectionIPsecConfiguration는 이를 고정하는 지원되는 방법입니다:
Set-VpnConnectionIPsecConfiguration -ConnectionName "Contoso L2TP" `
-AuthenticationTransformConstants SHA256128 `
-CipherTransformConstants AES128 `
-EncryptionMethod AES128 `
-IntegrityCheckMethod SHA256 `
-DHGroup Group14 `
-PfsGroup None `
-PassThru -Force
그 집합은 일반적인 L2TP/IPsec 구성 중 하나이며 보편적인 답이 아닙니다. 각 매개 변수는 고정된 값 목록을 받고, 플랫폼이 매핑할 수 없는 조합은 조용히 약화된 프로필 대신 cmdlet 오류로 돌아옵니다. 그런 오류는 권한이 아니라 값에 대한 진술로 취급하세요.
제안을 게이트웨이 문서나 현재의 1단계 및 2단계 설정에서 복사하고, 게이트웨이가 거부한 변환을 기록하는 동안에만 한 번에 한 필드씩 바꾸세요. 다섯 필드를 돌며 시도하면 우연히 작동하는 연결과 다음 사람에게 아무것도 설명하지 못하는 기록이 만들어집니다.
오류 텍스트가 아니라 단계로 실패를 읽으세요
789는 클라이언트 대화 상자에서 모두 똑같아 보이는 코드 계열에 속합니다. 프로필을 다시 건드리기 전에 코드를 그것이 속한 단계에 맞춰 놓으세요:
| What you see | Stage that failed | Check first |
|---|---|---|
| Nothing happens, then a timeout | No IKE response at all | Server address, UDP 500 and 4500 reachability, NAT traversal on the gateway |
| Error 789 | IKE security exchange | Proposal, pre-shared key, certificate trust and client clock |
| Error 691 or a repeated password prompt | User authentication | Account state, domain, RADIUS or NPS policy |
| Tunnel up, some hosts unreachable | Routing or DNS after PPP | Split-tunnel routes, pushed DNS, remote subnet mask |
여기서는 자격 증명의 두 역할이 중요합니다. 사전 공유 키나 인증서는 피어를 서로 인증하고, MSChapv2나 EAP는 터널 내부에서 당신을 인증합니다. 사용자 암호를 재설정해도 전자는 고칠 수 없고, 새 공유 비밀로도 후자는 고칠 수 없으며, 둘을 한꺼번에 바꾸면 어느 쪽이 틀렸는지에 대한 증거가 사라집니다.
인증서 경로에서는 검증을 완화할지 고려하기 전에 클라이언트 시계, 신뢰 체인, 게이트웨이가 기대하는 ID를 확인하세요. 검증을 끄면 보이던 789가 잘못된 피어를 신뢰하면서 연결되는 터널로 바뀌고, 클라이언트에서는 그런 일이 일어났다는 것을 아무것도 알려 주지 않습니다. Microsoft의 원격 액세스 오류 목록 자체에 대한 참조이며, 보안 계층의 실패와 로그온 실패를 구분합니다.
고쳤다고 하기 전에 양쪽 끝에서 확인하세요
프로필을 다시 읽되 출력에서 제안을 기대하지 마세요. Get-VpnConnection는 이름, 서버 주소, 터널 유형, 암호화 수준, 인증 방법을 보고하고 변환에 대해서는 아무것도 모르므로, 다시 읽기는 항목이 존재하고 올바른 호스트를 가리킨다는 것만 확인합니다:
Get-VpnConnection -Name "Contoso L2TP" |
Select-Object Name, ServerAddress, TunnelType, EncryptionLevel, AuthenticationMethod
대화 상자 대신 숫자를 얻으려면 명령줄에서 전화를 걸으세요: rasdial "Contoso L2TP"는 인터페이스가 돌려줄 것과 같은 실패 코드를 반환하고, rasdial "Contoso L2TP" /disconnect는 시도 사이에 그것을 지웁니다. 그다음 같은 시도에 대해 게이트웨이 쪽을 읽으세요. strongSwan의 ipsec statusall나 라우터의 IKE 로그는 어떤 제안이 도착했고 어느 것이 거부되었는지 알려 주며, 그것을 cmdlet 값과 비교하는 것이 두 끝이 합의했음을 실제로 증명하는 유일한 단계입니다.
성공적인 연결은 결승선이 아닙니다. 사용자가 신경 쓰는 애플리케이션을 열어야 하는데, 경로, 푸시된 DNS, 분할 터널 설정은 터널이 올라온 뒤에 실패하며 오류 대화 상자를 전혀 표시하지 않기 때문입니다.
자동화하고 깔끔하게 롤백하세요
무인 설치가 이것을 스크립트로 만드는 이유이며, 전화 걸기 단계는 자격 증명이 새는 곳입니다. rasdial는 자체 명령줄에서 그것들을 받으며, 다른 로컬 사용자와 대부분의 로그 수집기가 읽을 수 있습니다:
subprocess.run(["rasdial", "Contoso L2TP"], check=True)
작업을 실행하는 계정으로 범위가 제한된 자격 증명을 선호하거나, 예약된 작업에서 암호를 인수로 전달하는 대신 -RememberCredential로 프로필에 저장하게 하세요. 프로비저닝 명령 자체는 -Force로 반복해도 안전하지만, 오래된 제안을 기꺼이 덮어쓰므로 스크립트가 현재 값을 담고 있을 때만 재실행이 도움이 됩니다.
프로필은 재부팅을 넘어 유지되고 그것을 위해 만든 게이트웨이 구성보다 오래 살아남습니다. 게이트웨이 제안이 움직이면 값의 두 번째 집합을 겹쳐 놓는 대신 항목을 제거하고 다시 만드세요: Remove-VpnConnection -Name "Contoso L2TP" -Force, 그다음 새 집합으로 두 cmdlet을 반복합니다.
스크립트 옆에 있는 네 가지 검사로 루프를 닫으세요: Get-VpnConnection는 예상 터널 유형과 암호화 수준을 보여 주고, 게이트웨이는 클라이언트 주소에 대해 완료된 1단계와 2단계를 기록하며, rasdial는 성공을 반환하고 앱이 열리며, 스크립트에 기록된 제안이 현재 게이트웨이 설정과 일치합니다. 다음 789가 오면 그 비교는 반나절이 아니라 몇 분이 걸립니다.