Вы подключаете офисный VPN, и Android Studio теряет работающий эмулятор, adb start-server зависает, а физический телефон по Wi-Fi пропадает из списка устройств. Кажется, что один туннель блокирует один продукт. На деле отказывают три отдельных пути тремя способами: обнаружение устройств через adb, виртуальная сеть эмулятора и резолвер хоста. Туннель обычно владеет только последним, и часто лишь его частью.

Три сокета, три владельца

Сервер adb слушает порт 5037 на хосте и общается с устройствами по USB или TCP, а для сетевого обнаружения использует mDNS. Эмулятор работает за собственным виртуальным маршрутизатором: гость — 10.0.2.15, шлюз — 10.0.2.2, DNS-сервер — 10.0.2.3, и процесс эмулятора переводит всё это в сокеты хоста. Резолвер хоста — это место, где клиент VPN устанавливает DNS и домены поиска.

Это разделение объясняет, почему исправление работает для одного инструмента и не работает для другого. Клиент, меняющий резолвер хоста, оставляет работающий процесс эмулятора с тем состоянием резолвера, которое тот прочитал при запуске. Клиент, фильтрующий multicast, ломает обнаружение, не касаясь DNS. Клиент, фильтрующий виртуальные адаптеры, отказывает эмулятору, пока браузер хоста продолжает работать. У каждого симптома своя причина, поэтому сначала определите отказавший путь, а потом меняйте настройки.

Начните с того, что видит adb

Запустите adb devices прежде чем трогать VPN. Пустой список — это проблема транспорта, а не маршрутизации, и никакая настройка туннеля не починит устройство, которое сервер так и не перечислил. Перезапустите сервер начисто: сначала adb kill-server затем adb start-server, и прочитайте вывод, чтобы узнать, какой порт он занял. Если зависает сам запуск, mDNS-обнаружение — обычный подозреваемый в сети, фильтрующей multicast; документированный обходной путь — запустить сервер с отключённым обнаружением:

ADB_MDNS_OPENSCREEN=0 adb start-server
adb devices

Для физического устройства USB — самый короткий путь. Если нужен TCP, переведите устройство в режим прослушивания командой adb tcpip 5555 и подключитесь к адресу и порту устройства, adb connect 192.0.2.10:5555. Порт 5037 — это порт сервера хоста, а не порт, на котором слушает устройство.

Проверьте эмулятор изнутри

Эмулятор отвечает на DNS с 10.0.2.3, и этот резолвер питается процессом хоста. Когда клиент VPN меняет резолвер хоста, эмулятор может его унаследовать; когда клиент фильтрует процесс эмулятора или список адаптеров хоста меняется после запуска, он этого сделать не может. Разделите их числовой целью и именем из одной оболочки. adb shell ping -c 2 10.0.2.2 доказывает, что виртуальная сеть достигает стороны хоста. Поиск имени после этого показывает, перешло ли разрешение границу.

Затем выполните тот же поиск имени на хосте. Хост разрешает, а эмулятор нет — значит разрыв между резолвером хоста и виртуальной сетью эмулятора, а не в туннеле. Оба отказывают — значит смотреть нужно резолвер хоста. Перезапуск эмулятора после подключения VPN стоит одной попытки, потому что некоторые клиенты устанавливают состояние резолвера, которое работающий процесс эмулятора не подхватывает.

Проверьте резолвер хоста и фильтры клиента

Клиент полного туннеля заменяет резолвер хоста своим, а клиент split-DNS добавляет домены поиска и условные переадресации. Внутренние имена часто зависят именно от этой конфигурации split-DNS, поэтому посмотрите, что использует хост во время подключения: адрес резолвера, домен поиска и маршрутизируется ли внутренняя зона на корпоративный DNS. Резолвер, отвечающий на публичные, но не на внутренние имена, — это вопрос политики, а не сломанный туннель.

Некоторые корпоративные клиенты блокируют и трафик от виртуальных адаптеров. Для драйвера фильтрации эмулятор выглядит как виртуальный адаптер, поэтому хост может работать безупречно, пока политика отказывает эмулятору. Эта политика не видна с рабочей станции, и догадки о настройках прокси её не раскроют. Если хост разрешает, а эмулятор заблокирован независимо от настроек резолвера, правильная эскалация — к команде, владеющей политикой клиента.

Порядок проверок и что означает каждый результат

Двигайтесь сверху вниз и остановитесь на первой отказавшей строке. Каждый результат указывает на другого владельца, и ни один не исправляется переустановкой Android Studio.

ResultLikely ownerNext check
adb devices is empty with USB attachedUSB, driver or adb servercable, authorization prompt, adb kill-server
adb start-server hangsmDNS discoveryADB_MDNS_OPENSCREEN=0
Emulator reaches 10.0.2.2, names failHost resolver to emulator boundaryhost lookup of the same name
Host resolves, emulator still failsEmulator process or client filterrestart emulator, ask IT about virtual adapters
Both fail for internal names onlySplit DNS or search domainresolver and zone configuration

Только последние две строки — вопросы про VPN в обычном смысле, и только последняя про содержимое DNS. Документация adb покрывает порт сервера и упомянутые здесь переменные окружения, чего достаточно, чтобы держать транспортную сторону честной, пока вы проверяете остальное.

Похожие статьи