Помилка 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, а не універсальна відповідь. Кожен параметр приймає фіксований список значень, а комбінація, яку платформа не може зіставити, повертається як помилка командлета замість тихо ослабленого профілю. Ставтеся до такої помилки як до твердження про значення, а не про ваші права.

Скопіюйте пропозицію з документації шлюзу або з його живих налаштувань фази 1 і фази 2 і змінюйте по одному полю за раз лише тоді, коли шлюз журналює відхилені перетворення. Перебирання п'яти полів дає з'єднання, що працює випадково, і запис, який нічого не пояснює наступній людині.

Читайте відмову за етапом, а не за текстом помилки

789 належить до сімейства кодів, які у вікні клієнта всі виглядають однаково. Поставте код навпроти етапу, до якого він належить, перш ніж знову торкатися профілю:

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

Тут важливі дві ролі облікових даних. Попередньо спільний ключ або сертифікат засвідчує сторони одна одній, тоді як 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 маршрутизатора повідомляє, яка пропозиція надійшла і яку відхилено, і порівняння цього зі значеннями командлета — єдиний крок, який справді доводить, що обидва боки домовилися.

Успішне підключення — не фінішна лінія. Відкрийте застосунок, важливий для користувача, бо маршрути, проштовхнутий DNS і налаштування роздільного тунелю зазнають невдачі після підняття тунелю і взагалі не створюють діалогу помилки.

Автоматизуйте це й відкочуйтеся чисто

Саме автоматичне встановлення є причиною писати для цього скрипт, а крок набору номера — місце, де витікають облікові дані. rasdial приймає їх у своєму командному рядку, де інші локальні користувачі та більшість збирачів журналів можуть їх прочитати:

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

Надавайте перевагу обліковим даним, обмеженим обліковим записом, який виконує завдання, або дозвольте профілю зберегти їх за допомогою -RememberCredential, замість передавання пароля як аргументу в запланованому завданні. Самі команди розгортання безпечно повторювати з -Force, але вони охоче перезапишуть стару пропозицію, тож повторний запуск допомагає лише тоді, коли скрипт несе поточні значення.

Профілі зберігаються після перезавантажень і живуть довше за конфігурацію шлюзу, для якої створювалися. Коли пропозиція шлюзу змінюється, видаліть запис і створіть його заново, замість того щоб нашаровувати другий набір значень: Remove-VpnConnection -Name "Contoso L2TP" -Force, а потім повторіть обидва командлети з новим набором.

Замкніть цикл чотирма перевірками, які живуть поруч зі скриптом: Get-VpnConnection показує очікуваний тип тунелю й рівень шифрування; шлюз журналює завершені фазу 1 і фазу 2 для адреси вашого клієнта; rasdial повертає успіх, і застосунок відкривається; а пропозиція, записана в скрипті, збігається з поточним налаштуванням шлюзу. Коли надійде наступна 789, це порівняння займе хвилини замість половини дня.

Схожі статті