ADB и емулаторът на Android не работят зад VPN: три пътя
Откриването на ADB, виртуалният мрежов адаптер на емулатора и резолверът на хоста се провалят поотделно зад VPN. Проверявайте всеки път по ред, преди да обвинявате тунела.
Свързвате служебния 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.
| Result | Likely owner | Next check |
|---|---|---|
| adb devices is empty with USB attached | USB, driver or adb server | cable, authorization prompt, adb kill-server |
| adb start-server hangs | mDNS discovery | ADB_MDNS_OPENSCREEN=0 |
| Emulator reaches 10.0.2.2, names fail | Host resolver to emulator boundary | host lookup of the same name |
| Host resolves, emulator still fails | Emulator process or client filter | restart emulator, ask IT about virtual adapters |
| Both fail for internal names only | Split DNS or search domain | resolver and zone configuration |
Само последните два реда са VPN въпроси в обичайния смисъл и само последният е за съдържанието на DNS. Документацията на adb покрива порта на сървъра и споменатите тук променливи на средата, което е достатъчно да държите транспортната страна честна, докато тествате останалото.