Почему VPN на Mac отключается, когда вы подключаете iPhone по USB
iPhone, подключённый по USB, может добавить маршрут точки доступа или соединение устройства Xcode. Проверьте службу, маршрут и ошибку клиента, прежде чем что-либо удалять.
Вы подключаете iPhone для зарядки, и через минуту VPN на Mac перестаёт пропускать трафик. В Параметрах системы появляется новая служба iPhone USB, и очевидный шаг — удалить её. Этот шаг часто ошибочен. Служба может быть точкой доступа телефона или соединением, которое Xcode и инструменты для устройств используют для связи с телефоном, и ведут они себя достаточно по-разному, чтобы сначала определить, что это.
Шаг 1: Прочитайте службу, которую телефон действительно создал
Откройте Параметры системы, затем Сеть и сравните список служб с телефоном отключённым и подключённым. В текущей macOS служба указана как iPhone USB. Обратите внимание, активна ли она, где она стоит в порядке служб и использует ли Mac её для маршрута по умолчанию. Порядок служб важен, потому что macOS выбирает самую высокую активную службу, способную достичь пункта назначения, а не ту, чьё имя вы узнаёте.
Руководство Apple по точке доступа описывает механизм: пока на телефоне включена точка доступа, подключение по USB может заставить Mac использовать сотовое соединение телефона, даже если вы хотели только зарядить его. Это не ошибка клиента VPN; таблица маршрутизации следует за службой, которая поднялась раньше Wi-Fi.
Если служба существует, но остаётся неактивной при подключённом телефоне, вы, скорее всего, видите соединение только для зарядки или связь с устройством, а не точку доступа. Сохраните это различие, потому что следующие два шага проверяют его, а не гадают по значку.
Шаг 2: Проверьте, какой маршрут использует конечная точка VPN
Читайте маршрут до разрешённого адреса VPN-сервера, а не до веб-сайта. route -n get только читает и печатает интерфейс и шлюз, которые использовало бы ядро, и обе строки важны.
scutil --dns | head -20
route -n get 203.0.113.10Адрес выше — заполнитель для документации. Замените его конечной точкой, которую показывает ваш клиент, и используйте route -n get -inet6 для конечной точки IPv6. Сравните вывод с телефоном отключённым и подключённым и не добавляйте и не удаляйте маршруты между двумя чтениями. Если интерфейс меняется с en0 на интерфейс iPhone USB, маршрут через точку доступа выиграл поиск, и внешнее соединение VPN теперь идёт через сотовую сеть.
Изменение маршрута не объясняет каждый сбой. Клиент всё ещё может достучаться до сервера и позже отказать на внутреннем трафике туннеля, потому что у нового пути другой MTU или оператор блокирует протокол. Прочитайте собственную ошибку клиента, прежде чем что-то менять: внешний тайм-аут рукопожатия указывает на доступность, а установленный туннель, переставший пропускать трафик, — на MTU, DNS или политику.
Шаг 3: Отделите точку доступа от канала связи с устройством
Xcode 15 и новее общаются с подключённым по USB устройством по сетевому каналу, включающему link-local IPv6, поэтому на Mac для разработки может появиться дополнительный интерфейс, не имеющий отношения к доступу в интернет. Техническая заметка Apple TN3158 документирует это поведение и предупреждает, что VPN или фильтрация безопасности может ему мешать. Это обратная сторона проблемы точки доступа: VPN ломается не потому, что телефон предлагает интернет, а связь с устройством ломается потому, что VPN её перехватывает.
Два наблюдения разделяют случаи без перехвата пакетов. Во-первых, проверьте, есть ли у интерфейса маршрутизируемый адрес и маршрут по умолчанию или только link-local адрес fe80::; только link-local означает, что пути в интернет нет. Во-вторых, закройте VPN и посмотрите, доходит ли Xcode до устройства снова. Если да, маршруты или фильтр содержимого VPN перехватывают link-local трафик, и исправление относится к настройке раздельного туннеля или фильтра, а не к панели «Сеть».
ifconfig | grep -A4 -E '^en[0-9]+:'
netstat -rn -f inet6 | headНе судите только по имени интерфейса. macOS создаёт и уничтожает эти интерфейсы по мере подключения устройств, а номер en назначается во время работы, поэтому тот же Mac может показать другой номер после перезагрузки или замены кабеля.
Шаг 4: Воспроизведите сбой с одной переменной за раз
Когда вы знаете, какая служба задействована, воспроизведите проблему в фиксированном порядке. Начните с отключённого телефона и подключённого VPN. Подключите телефон с выключенной точкой доступа, дождитесь стабилизации списка «Сеть» и снова выполните запрос маршрута. Отключите, включите точку доступа, подключите снова и повторите. Запишите интерфейс, шлюз и ошибку клиента для каждого из трёх состояний, и у вас будет сравнение вместо воспоминания.
Если VPN падает только в состоянии точки доступа, держите телефон подальше от этого пути: выключайте точку доступа во время зарядки или переместите службу iPhone USB ниже Wi-Fi в порядке служб. Если он падает в любом подключённом состоянии, включая выключенную точку доступа, посмотрите, как клиент обрабатывает переход сети. Некоторые клиенты сносят туннель при смене основной службы и требуют переподключения; это поведение клиента, а не дефект телефона.
Меняйте по одной вещи на попытку. Удаление службы, сброс конфигурации VPN и переустановка клиента в одну и ту же минуту оставят вас с работающим Mac и без понимания, какое действие помогло.
Шаг 5: Решите, что оставить, а что проверить
Не трогайте канал связи с устройством. Удаление интерфейса, которым пользуется Xcode, не чинит маршрут VPN и ломает развёртывание на устройства до следующего подключения. Если служба точки доступа действительно не нужна, сначала выключите точку доступа на телефоне; это документированное управление, и оно переживает перезагрузку.
Если вы всё же удаляете службу, удалите ту, которую определили, и затем проверьте две вещи: маршрут до конечной точки VPN вернулся на ожидаемый интерфейс, а туннель пропускает трафик к внутреннему адресу, а не только в интернет. Запишите порядок служб и версию клиента, потому что обновление macOS может изменить то, как выглядит телефон.
Затем классифицируйте сбой, который вы действительно видели. Тайм-аут рукопожатия, остановка MTU после поднятия туннеля и ответы DNS, приходящие от оператора, — три разные проблемы с тремя разными исправлениями. Служба USB — спусковой крючок во всех трёх; причиной она бывает редко.