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 ја покрива портата на серверот и променливите на околината споменати овде, доволно за да ја одржите транспортната страна чесна додека го тестирате остатокот.