Add-VpnConnection: защо PSK се поврежда и адресът остава стар
PowerShell разгръща предварително споделения ключ в двойни кавички, преди cmdlet-ът да го запази, а работещият тунел пази стария адрес, докато не се свържете отново.
Профилът на VPN в Windows е запис в телефонен указател, а PowerShell е един от начините да редактирате този запис. От това разграничение следват два отказа: предварително споделен ключ, който пристига на сървъра вече повреден, и адрес на сървър, който изглежда обновен, но не е този, към който ще се обади следващият тунел. И двете се виждат по-лесно, когато третирате профила като запазено състояние, а не като команда, която сте изпълнили. Прегледът следва реда, в който стават промените: създаване, промяна, обхват, обратно четене.
Създайте профила с буквален ключ
Add-VpnConnection приема предварително споделения ключ за L2TP чрез -L2tpPsk. PowerShell обработва низа, преди cmdlet-ът да го получи, а в двойни кавички знакът за долар започва препратка към променлива, докато backtick започва escape. Ключ, който съдържа някое от двете, пристига по-къс или с друг знак, и профилът се създава успешно с грешна тайна.
След това отказът се появява при IPsec удостоверяване, където тунелът отказва да се вдигне. Затова грешка в кавичките толкова често се докладва като проблем от страна на сървъра: профилът съществува, името е правилно, а тайната тихо е грешна.
| How you write it | What PowerShell does | Result |
|---|---|---|
| "p@ss$word!42" | Expands $word as a variable | Stored key is truncated |
| Double-quoted with an escape character | Consumes the next character as an escape | One character disappears |
| 'p@ss$word!42' | Keeps the literal characters | Stored key matches the secret |
Единичните кавички са решението и трябва да обграждат цялата стойност. Ако записът вече съществува с лош ключ, -Force го заменя, или премахнете и създайте профила наново, после тествайте с нова връзка:
Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force
Дръжте истинската тайна извън историята на шела и споделените скриптове. Четете я по време на изпълнение от одобреното хранилище и подавайте променливата вместо буквалната стойност, което напълно избягва проблема с кавичките.
Променете адреса, после се свържете отново
Set-VpnConnection приема параметри, разделени с интервали, а не синтаксис за присвояване. Записът -ServerAddress = "203.0.113.10" подава допълнителен токен и cmdlet-ът или дава грешка, или запазва нещо, което не сте имали предвид. Правилната форма е -Name "Office L2TP" -ServerAddress 203.0.113.10.
Дори с правилен синтаксис промяната не достига до вече вдигнат тунел. Установената връзка пази адреса, към който се е обадила, докато не се разкачи, така че тестването на същата сесия не доказва нищо за новата стойност. Разкачете, редактирайте, свържете отново и потвърдете адреса на партньора в подробностите на връзката.
Някои свойства не могат да се променят на място. Когато cmdlet-ът откаже, запишете съществуващите параметри, изтрийте профила и го създайте отново с коригираните стойности, и запазете оригиналните настройки на тунела и удостоверяването. Скрипт, който трябва да смени само телефонния номер, може да редактира записа в указателя през RAS API, вместо да пресъздава всичко. Който и път да изберете, потвърдете запазените стойности след това, вместо да вярвате на мълчанието на командата.
Знайте кой указател сте редактирали
Профилът за отделен потребител живее в папката с мрежови връзки на този потребител, а профилът за всички потребители в общомашинната папка под дървото с програмни данни. Това са различни записи с различен обхват и редактирането на единия оставя другия непокътнат.
Затова промяната може да изглежда изчезнала: скриптът е работил с един акаунт, а тестът с друг. Използвайте -AllUserConnection, когато профилът принадлежи на машината, и проверявайте същия обхват, когато го четете обратно.
Прочетете профила обратно, преди да тествате
Питайте Windows какво е запазил, а не какво сте подали:
Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod
Сравнете този изход с намерението, после стартирайте нова връзка. Ако набирането се провали, преди да променяте профила отново, проверете журнала на RAS клиента в Event Viewer, защото журналът посочва етапа, който се е провалил.
Пазете дизайна на удостоверяването непокътнат, докато редактирате. Команда, която сменя адреса, но изпуска сертификата или EAP конфигурацията, дава отказ, който изглежда несвързан с редакцията, а експортирането на работещия профил предварително ви дава какво да възстановите вместо догадка.