Грешка 789 при L2TP/IPsec в Windows: създайте профила и фиксирайте предложението
Грешка 789 възниква в IPsec обмена, а не при паролата. Създайте L2TP профила със скрипт, фиксирайте предложението и четете следващите кодове по етап.
Грешка 789 при L2TP връзка в Windows означава, че тунелът е умрял вътре в 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 удостоверява вас вътре в тунела. Нулирането на потребителска парола не може да поправи първото, нов споделен секрет не може да поправи второто, а промяната на двете наведнъж унищожава доказателството кое е било грешно.
По пътя със сертификата проверете часовника на клиента, веригата на доверие и самоличността, която шлюзът очаква, преди да обмисляте разхлабване на проверката. Изключването на проверката превръща видима 789 в тунел, който се свързва, докато се доверява на грешния партньор, и нищо в клиента няма да ви каже, че това се е случило. списък с грешки при отдалечен достъп на Microsoft е справката за самите кодове и разделя отказите на слоя за сигурност от отказите при влизане.
Проверете от двата края, преди да го обявите за поправено
Прочетете профила обратно, но не очаквайте предложението в изхода. Get-VpnConnection съобщава името, адреса на сървъра, типа тунел, нивото на криптиране и метода за удостоверяване и не знае нищо за трансформациите, така че прочитането потвърждава, че записът съществува и сочи към правилния хост:
Get-VpnConnection -Name "Contoso L2TP" |
Select-Object Name, ServerAddress, TunnelType, EncryptionLevel, AuthenticationMethod
Наберете от командния ред, за да получите номер вместо диалог: rasdial "Contoso L2TP" връща същия код за отказ, който интерфейсът би върнал, а rasdial "Contoso L2TP" /disconnect го изчиства между опитите. След това прочетете страната на шлюза за същия този опит. ipsec statusall на strongSwan или 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, това сравнение отнема минути вместо следобед.