VPN на Mac сам перепідключається одразу після натискання «Відключити»
Монітор, який вважає будь-який відключений стан збоєм, воюватиме з кнопкою «Відключити». Відокремте намір від спостережуваного стану, а потім обмежте повторні спроби.
Натискання «Відключити» спрацьовує, і через десять секунд тунель усе одно повертається. Цей цикл рідко буває неправильною поведінкою VPN-клієнта; це скрипт відновлення, який завжди ставив лише одне питання, «він упав?», і відповідав на нього підключенням. Щойно ви відокремите питання, на яке відповів користувач, від питання, про яке повідомляє система, виправлення стане невеликим обсягом стану замість довшого очікування.
Два питання, а не одне
Чи має цей профіль бути підключеним просто зараз, і що система повідомляє цієї миті? Це різні питання з різними власниками, і політиці відновлення потрібні обидва, перш ніж діяти. Намір — це те, що вирішує й запам'ятовує ваш інструмент. Спостережуваний стан — це те, що повідомляє платформа.
| Intent | What you observe | What to do |
|---|---|---|
| Wanted | Dropped unexpectedly | Allow one supported recovery attempt |
| Paused by the user | Disconnected | Do nothing until intent changes |
| Wanted | Already connecting | Wait instead of starting a rival attempt |
| Wanted | Authentication needs a person | Prompt, then stop replaying credentials |
Читайте рядки як політику, а не як список випадків. Другий рядок — той, який більшість скриптів пропускає, і це єдиний рядок, що відрізняє монітор від машини, яка наполягає на своїй правоті.
Спостережуваний стан — не уподобання
Модель станів Network Extension від Apple повідомляє про стани connecting, connected, disconnecting, disconnected і recovery. Усі п'ять описують з'єднання. Жоден із них не каже «користувач попросив, щоб цей профіль залишався на паузі», бо це взагалі не стан з'єднання. Клієнти, побудовані не на цьому фреймворку, надають власні підтримувані елементи керування та виклики стану, і вони проводять ту саму межу власним словником.
Наслідок полягає в тому, що відключений стан ніколи не можна тлумачити окремо. Він означає одне з щонайменше трьох: тунель упав, користувач його зупинив або система перебуває між спробами. Лише ваш власний запис наміру може їх розрізнити. Запишіть цей запис, зберігайте його між перезапусками, якщо він має пережити перезапуск, і оновлюйте його тієї миті, коли діє користувач, а не виводьте пізніше з рядка журналу.
scutil --nc list
scutil --nc status "Office VPN"
Хто ще має право запускати цей профіль
Пауза, обіцяна вашим помічником, сильна рівно настільки, наскільки сильні інші власники того самого профілю. Правило On Demand, керована конфігурація або другий клієнт можуть запросити з'єднання, і ваш помічник виглядатиме зламаним, хоча поводиться точно так, як написано.
Знайдіть кожен механізм, який може запустити профіль перш ніж обіцяти поважати паузу, і запишіть, який перемагає. Коли керована служба навмисно не дає особисту опцію паузи, це рішення адміністратора про політику, а не прогалина, яку скрипт має заповнити, борючись з управлінням.
Зробіть повторні спроби нудними
Обмежте кількість спроб і зробіть кожну чутливою до чогось, що змінилося: мережа повернулася, шлюз відповів, запит облікових даних завершився. Недоступний шлюз, прострочена ідентичність і відхилений другий фактор потребують трьох різних реакцій, а щільний цикл дає всім трьом однакову.
Подивіться, що швидка повторна спроба насправді створює на екрані. Повторювані діалоги, які користувач закриває, гірші за одне чітке повідомлення про помилку, і вони привчають людей клацати запити, не читаючи їх.
Пауза й політика трафіку — різні обіцянки
Тунель, поставлений користувачем на паузу, часто навмисно залишає трафік заблокованим, і в цьому вся суть політики в стилі kill switch. Це означає, що «Пауза» має обіцяти рівно одне: відновлення зупиняється. Вона не повинна тихо змінювати те, що дозволяє мережа.
Вирішіть поведінку трафіку окремо, задокументуйте її поруч із елементом керування «Пауза» і зберігайте узгодженість незалежно від того, чи тунель на паузі, чи зазнав збою, чи відсутній. Інакше користувач дізнається, що натискання «Відключити» робить щось непередбачуване, і наступний запит до підтримки буде про мережу, яка «іноді перестає працювати» без видимої причини.