«Відключення» — це стан, який клієнт повідомляє, поки розбирає тунель, а не вирок, що трафік зупинився. На Mac таке розбирання відбувається короткою послідовністю, і мітка змінюється лише після того, як компонент, що володіє з'єднанням, відповідає. Коли якийсь крок чекає помічника, плагін або рішення політики, мітка може залишитися на місці після зникнення інтерфейсу, або тунель може далі передавати, поки меню ще його показує. Сприймайте текст як «розбирання триває, результат невідомий» і з'ясуйте, яка половина правдива.

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

Що відстежує мітка

Клієнт VPN тримає невелику машину станів, а рядок меню — її проєкція. Для з'єднання, яким керує сам macOS, ця машина розташована в системному каркасі VPN. Для тунелю, яким керує застосунок, вона в застосунку та його привілейованому помічнику. Останній крок зупинки — не закриття сокета. Це звільнення того, що робило тунель робочим: інтерфейсу utun, маршрутів, які на нього вказували, записів резолвера, які вставив клієнт, і будь-якого правила брандмауера чи політики, що блокувала трафік, поки з'єднання було активним.

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

Знайдіть компонент, що володіє з'єднанням

Для штатних конфігурацій scutil --nc list виводить служби, відомі системі, та їхній стан, а scutil --nc status "Work VPN" дає подробиці однієї служби. Тунель, який тримає сторонній застосунок, може взагалі не з'явитися в цьому списку, тому порожній результат не доводить, що нічого не підключено.

Якщо профіль належить застосунку, покладайтеся на його подання стану та задокументовану кнопку «Відключити». Закриття вікна не є запитом на зупинку, якщо тунелем володіє фоновий помічник; піктограма зникає, а помічник тримає інтерфейс живим. Довідка Apple щодо налаштувань VPN описує штатні елементи керування та походження керованих налаштувань.

Читайте інтерфейси, маршрути й DNS

Три перевірки відповідають на більшу частину питання, не торкаючись з'єднання. Важливо тлумачити їх разом, бо кожна окремо вводить в оману.

scutil --nc list
netstat -rn -f inet | head -20
ifconfig | grep -A 3 '^utun'
scutil --dns | head -30
  • інтерфейс utun присутній, через нього йде маршрут за замовчуванням або розділений маршрут, резолвер указує на провайдера: тунель ще піднятий, а мітка застаріла.
  • немає utun, звичайний маршрут за замовчуванням, DNS із DHCP, інтернету немає: політика, що блокує після відключення, робить свою роботу.
  • немає utun, немає маршруту, резолвер досі вказує на провайдера: розбирання зупинилося на півдорозі, і DNS — це залишок, який треба прибрати.

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

Чому масове убивання та видалення профілю вводять в оману

Імена процесів на кшталт pppd, racoon і configd належать конкретним реалізаціям. Їхнє убивання може зачепити інші з'єднання, залишає маршрути й інтерфейси utun і не дає жодного запису про те, на якому кроці застрягло. Старе ім'я процесу також не доводить, що він володіє поточним профілем.

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

Послідовність зупинки, що залишає слід

Порядок нижче залишає у відповідальності власні елементи керування з'єднання і створює запис, якщо зависання повернеться. Він також утримує вас від перетворення проблеми відображення на зміну мережі.

  1. Збережіть віддалену роботу і переконайтеся, що можете дістатися до Mac іншим способом, якщо він віддалений.
  2. Запишіть ім'я клієнта, версію та профіль. Захопіть коротке вікно за допомогою log show --last 5m --predicate 'subsystem == "com.apple.networkextension"'; старіші версії зберігають менше історії, тому запустіть це невдовзі після зависання.
  3. Використайте задокументовану кнопку «Відключити», зачекайте, а потім повторіть перевірки інтерфейсу й маршрутів.
  4. Якщо мітка застаріла, але тунель опущений, залиште її і дайте клієнтові оновитися, замість примусово завершувати процеси.
  5. Якщо розбирання справді зависло, перезапустіть клієнт, а потім заплануйте перезавантаження Mac після збереження роботи. Керовані машини вимагають процедури адміністратора.

Після відновлення переконайтеся, що звичайний маршрут за замовчуванням і резолвер DHCP повернулися і що заблокований трафік або відновлено, або навмисно досі заблоковано. Запишіть профіль і версію клієнта разом із симптомом, щоб наступний випадок починався з доказів, а не з здогаду в рядку меню.

Схожі статті