L2TP/IPsec-fel 789 i Windows: bygg profilen och lås förslaget
Fel 789 misslyckas i IPsec-utbytet, inte vid lösenordet. Skripta L2TP-profilen, lås förslaget och läs senare koder per steg.
Fel 789 på en Windows L2TP-anslutning betyder att tunneln dog inne i IPsec-säkerhetsutbytet, vilket sker långt innan Windows skickar ett användarlösenord någonstans. Att försöka igen med lösenordet, eller återställa det i katalogen, kan inte flytta det steget framåt. Det som flyttar det är att bygga om anslutningen från PowerShell med det förslag som gatewayen faktiskt erbjuder, eftersom guiden i Inställningar väljer IPsec-transformerna i tysthet och aldrig visar vad den valde. Det här är runbooken för det: bygg profilen, lås förslaget och använd sedan en stegtabell så att nästa kod berättar något för dig.
Bygg profilen utan guiden
Add-VpnConnection skriver en inbyggd telefonbokspost, så resultatet är samma objekt som appen Inställningar redigerar senare. Kör den från en förhöjd session när anslutningen ska finnas för varje konto på maskinen, eller från användarkontexten när den ska förbli privat:
Add-VpnConnection -Name "Contoso L2TP" `
-ServerAddress 203.0.113.10 `
-TunnelType L2tp `
-EncryptionLevel Required `
-AuthenticationMethod MSChapv2 `
-RememberCredential -Force
Anpassa -AuthenticationMethod till vad gatewayen erbjuder. MSChapv2, EAP och PAP är inte utbytbara, och en profil som kräver en metod som servern inte accepterar misslyckas innan någon användarpost alls slås upp. Behåll -EncryptionLevel Required för allt som är verkligt; Optional låter Windows acceptera en okrypterad tunnel om motparten erbjuder en, vilket är en laboratories genväg och inte en inställning att leverera.
Om du skickar -L2tpPsk skrivs den fördelade nyckeln in i profilen på disken, där vem som helst som kan läsa profilen på den maskinen kan återställa den. Använd ett certifikat för att autentisera motparten när gatewayen stöder det, och när en PSK är oundviklig, håll den utanför förvaret och utanför skallhistoriken i stället för att klistra in den i varje etableringskörning.
Lås förslaget i stället för att acceptera standardvärdena
Windows fyller själv i IPsec-transformerna, och därför kan två maskiner med en till synes identisk anslutning misslyckas olika mot samma gateway. Set-VpnConnectionIPsecConfiguration är det stödda sättet att låsa dem:
Set-VpnConnectionIPsecConfiguration -ConnectionName "Contoso L2TP" `
-AuthenticationTransformConstants SHA256128 `
-CipherTransformConstants AES128 `
-EncryptionMethod AES128 `
-IntegrityCheckMethod SHA256 `
-DHGroup Group14 `
-PfsGroup None `
-PassThru -Force
Den uppsättningen är en vanlig L2TP/IPsec-disposition, inte ett universellt svar. Varje parameter accepterar en fast lista med värden, och en kombination som plattformen inte kan mappa kommer tillbaka som ett cmdlet-fel i stället för en tyst försvagad profil. Behandla ett sådant fel som ett påstående om värdena, inte om dina behörigheter.
Kopiera förslaget från gatewayens dokumentation eller från dess aktiva inställningar för fas 1 och fas 2, och ändra ett fält i taget bara medan gatewayen loggar de transformer den avvisar. Att gå igenom fem fält ger en anslutning som fungerar av misstag och en post som inte förklarar något för nästa person.
Läs ett fel per steg, inte per feltext
789 tillhör en familj koder som alla ser likadana ut i klientdialogen. Placera koden vid det steg den hör till innan du rör profilen igen:
| 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 |
De två legitimationsrollerna spelar roll här. En fördelad nyckel eller ett certifikat autentiserar parterna mot varandra, medan MSChapv2 eller EAP autentiserar dig inne i tunneln. Att återställa ett användarlösenord kan inte rätta det första, en ny delad hemlighet kan inte rätta det andra, och att ändra båda på en gång förstör beviset för vilket som var fel.
På certifikatvägen, kontrollera klientens klocka, förtroendekedjan och den identitet som gatewayen förväntar sig innan du överväger att lätta på valideringen. Att stänga av validering gör en synlig 789 till en tunnel som ansluter medan den litar på fel motpart, och inget i klienten kommer att berätta att det hände. Microsofts lista över fjärråtkomstfel är referensen för koderna själva, och den skiljer säkerhetslagrets fel från inloggningsfelen.
Verifiera från båda ändar innan du kallar det åtgärdat
Läs tillbaka profilen, men förvänta dig inte förslaget i utdata. Get-VpnConnection rapporterar namn, serveradress, tunneltyp, krypteringsnivå och autentiseringsmetod och vet inget om transformer, så tillbakaläsningen bekräftar att posten finns och pekar på rätt värd:
Get-VpnConnection -Name "Contoso L2TP" |
Select-Object Name, ServerAddress, TunnelType, EncryptionLevel, AuthenticationMethod
Ring från kommandoraden så att du får ett nummer i stället för en dialog: rasdial "Contoso L2TP" returnerar samma felkod som gränssnittet skulle, och rasdial "Contoso L2TP" /disconnect rensar den mellan försök. Läs sedan gatewayens sida för samma försök. En ipsec statusall från strongSwan eller en IKE-logg från routern anger vilket förslag som kom och vilket som avvisades, och att jämföra det med cmdlet-värdena är det enda steget som verkligen bevisar att de två ändarna enades.
En lyckad anslutning är inte mållinjen. Öppna programmet som användaren bryr sig om, eftersom rutter, påskjuten DNS och inställningar för delad tunnel misslyckas efter att tunneln är uppe och ger ingen fel dialog alls.
Automatisera det och rulla tillbaka rent
Oövervakad installation är anledningen att skripta detta, och uppringningssteget är där autentiseringsuppgifterna läcker. rasdial tar dem på sin egen kommandorad, där andra lokala användare och de flesta loggsamlare kan läsa dem:
subprocess.run(["rasdial", "Contoso L2TP"], check=True)
Föredra en autentiseringsuppgift som är begränsad till kontot som kör jobbet, eller låt profilen lagra den med -RememberCredential, i stället för att skicka ett lösenord som argument i en schemalagd uppgift. Själva etableringskommandona är säkra att upprepa med -Force, men de skriver gärna över ett gammalt förslag, så en ny körning hjälper bara om skriptet bär de aktuella värdena.
Profiler överlever omstarter och lever längre än den gatewaykonfiguration de byggdes för. När gatewayens förslag flyttar sig, ta bort posten och bygg den igen i stället för att lägga ett andra värdeuppsättning ovanpå: Remove-VpnConnection -Name "Contoso L2TP" -Force, och upprepa sedan de två cmdletarna med den nya uppsättningen.
Stäng slingan med fyra kontroller som lever bredvid skriptet: Get-VpnConnection visar förväntad tunneltyp och krypteringsnivå; gatewayen loggar en slutförd fas 1 och fas 2 för din klientadress; rasdial returnerar framgång och programmet öppnas; och förslaget som registrerats i skriptet matchar gatewayens aktuella inställning. När nästa 789 kommer tar den jämförelsen minuter i stället för en eftermiddag.