Ви підключаєте офісний 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 охоплює порт сервера й згадані тут змінні середовища, чого достатньо, щоб тримати транспортний бік чесним, поки ви перевіряєте решту.

Схожі статті