Що насправді змінюється, коли ви перемикаєте збережені конфігурації VPN на macOS
Перемикання збереженого VPN на Mac — не заміна профілю. Подивіться, що змінюється в маршрутах, DNS і облікових даних, і як перевірити тунель, який ви дійсно отримали.
Ви відкриваєте список VPN, вибираєте інший збережений запис і чекаєте чистої заміни: нова адреса виходу, а все інше без змін. Саме це припущення варто відкинути першим. У macOS збережений VPN — повноцінний мережевий сервіс, а не попереднє налаштування, тому зміна сервісу може одночасно змінити маршрутизацію, DNS і автентифікацію. Рядок меню показує, який сервіс активний; він не каже, чи відповідає тунель під ним задуманому.
Збережений список — не вибір профілю
Кожен запис у «Системних налаштуваннях» > «Мережа» — окремий сервіс із власною адресою сервера, обліковим записом, методом автентифікації, DNS-серверами й параметрами на кшталт «Надсилати весь трафік через VPN-з’єднання». У старіших версіях той самий список у «Системних налаштуваннях». Два записи можуть указувати на саме ім’я хоста й усе одно поводитися по-різному, бо протокол або розширення клієнта визначає, як будується тунель.
Клієнти третіх сторін тримають окремі списки. Tunnelblick читає конфігурації зі своєї теки, WireGuard має власний список тунелів, а OpenVPN Connect зберігає профілі всередині програми. Деякі реєструють конфігурацію в системі; інші тримають усе в програмі й ніколи не з’являються у вбудованому списку. Тому «перемкнути на збережену» означає різні дії залежно від того, якій програмі належить профіль.
scutil --nc list виводить VPN-сервіси, зареєстровані в конфігурації системи, з іменами в лапках. Використовуйте саме ці імена, коли пишете скрипт перемикання, і не припускайте, що список охоплює кожен тунель третьої сторони.
Що насправді змінює перемикання
Чотири речі рухаються разом, коли змінюється активний сервіс. Маршрут за замовчуванням іде за новим тунелем, якщо цей сервіс надсилає весь трафік; список резолверів змінюється на DNS-сервери, які вказує сервіс; нові з’єднання беруть адресу нового тунелю як джерело; а використовувані облікові дані належать новому сервісу. Нативна конфігурація й профіль програми не взаємозамінні, навіть коли обидва закінчуються на одному шлюзі.
| What you assume | What the system does |
|---|---|
| Same server name means same tunnel | Protocol, certificate and account are per service |
| All traffic follows the active VPN | Only when Send all traffic over VPN is on |
| DNS switches with the VPN | Only if that service defines DNS servers |
| Disconnect ends the connection | On Demand or a management profile can reconnect |
| Open sessions survive the switch | TCP sessions tied to the old address stall |
Саме частина з DNS найчастіше застає зненацька. macOS підтримує порядок резолверів, а scutil --dns показує, які резолвери використовуються і на якому інтерфейсі. VPN-сервіс без налаштованих DNS-серверів може залишити відповідати резолвер Wi-Fi, тож ви отримуєте нову публічну адресу зі старою поведінкою DNS і робите висновок, що перемикання спрацювало наполовину.
Чому стара конфігурація повертається
Якщо ви відключилися, а той самий сервіс за мить знову підключився, спершу подивіться на On Demand. Правило підключення на вимогу може повернути сервіс, коли програма розв’язує відповідний домен, а профіль керування може нав’язати те саме правило. Видалення запису рідко це виправляє: конфігурація, встановлена профілем, зазвичай повертається під час наступного оновлення профілю, а ручна може залишити свій пароль у Keychain, хоча сервісу вже немає.
Запуск другого сервісу не завжди зупиняє перший. Залежно від клієнта й протоколу ви можете залишитися з двома тунелями й двома наборами маршрутів, і саме порядок сервісів та точність маршруту визначають, хто несе трафік, а не значок, натиснутий останнім. Перевірте інтерфейси, перш ніж вважати, що перемикання відбулося.
Перевіряйте тунель, а не галочку
Пройдіться власним поданням системи, перш ніж чіпати налаштування.scutil --nc status "Name" повідомляє, що система вважає;ifconfig показує, чи має інтерфейс utun адресу;netstat -rn -f inet показує, куди вказує маршрут за замовчуванням;scutil --dns показує фактично використовуваний резолвер. Потім відкрийте нове з’єднання й підтвердьте адресу виходу, бо сторінка, яка вже була автентифікована, може досі використовувати сокет, прив’язаний до старого тунелю.
Якщо DNS усе ще відповідає з локальної мережі, порівняйте налаштовані сервери сервісу зі списком резолверів. Якщо маршрут за замовчуванням усе ще вказує на фізичний інтерфейс, сервіс працює в розділеному тунелі або підключений не повністю. І те, і інше — результат конфігурації, а не доказ зламаного клієнта.
Порядок перемикання без сюрпризів
- Запишіть поточний сервіс і чи керує ним профіль.
- Спершу відключіть його, коли два тунелі не можуть існувати разом.
- Підключіть ціль і чекайте «Підключено», а не «Підключення».
- Перевірте маршрут за замовчуванням, список резолверів і нову адресу виходу.
- Перезапустіть програми з тривалими сеансами.
Тримайте старий запис, доки новий не пройде ці перевірки, і дайте кожному запису окреме ім’я; однакові мітки ускладнюють прив’язку наступного збою. Довідка Mac від Apple описує нативний бік на сторінці Налаштування VPN-з’єднання на Mac, на яку варто дивитися перед редагуванням керованої конфігурації.
Якщо вибір повертається назад, спершу сприймайте це як політику або On Demand. Підтвердьте, кому належить конфігурація й чи ввімкнене автоматичне підключення, потім вирішіть, чи ви змінюєте сервіс, чи боретеся з профілем.