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