ADB a emulátor Android zlyhávajú za VPN: tri cesty
Zisťovanie ADB, virtuálna sieťová karta emulátora a resolver hostiteľa zlyhávajú za VPN oddelene. Otestujte každú cestu po poradí, kým obviníte tunel.
Pripojíte firemný VPN a Android Studio stratí bežiaci emulátor, adb start-server sa zasekne a fyzický telefón na Wi-Fi vypadne zo zoznamu zariadení. Vyzerá to, akoby jeden tunel blokoval jeden produkt. V praxi zlyhávajú tri oddelené cesty tromi spôsobmi: zisťovanie zariadení cez adb, virtuálna sieť emulátora a resolver hostiteľa. Tunel zvyčajne vlastní iba poslednú a často len jej časť.
Tri sockety, traja vlastníci
Server adb počúva na porte 5037 na hostiteľovi a komunikuje so zariadeniami cez USB alebo TCP, na sieťové zisťovanie používa mDNS. Emulátor beží za vlastným virtuálnym routerom: hosť je 10.0.2.15, brána je 10.0.2.2 a DNS server je 10.0.2.3, a proces emulátora to všetko prekladá do socketov hostiteľa. Resolver hostiteľa je miesto, kde klient VPN inštaluje DNS a domény vyhľadávania.
Toto oddelenie vysvetľuje, prečo oprava funguje pri jednom nástroji a pri inom nie. Klient, ktorý zmení resolver hostiteľa, nechá bežiaci proces emulátora so stavom resolvera, ktorý načítal pri štarte. Klient, ktorý filtruje multicast, pokazí zisťovanie bez toho, aby sa dotkol DNS. Klient, ktorý filtruje virtuálne adaptéry, odmietne emulátor, kým prehliadač hostiteľa ďalej funguje. Každý príznak má inú príčinu, preto pred zmenou akéhokoľvek nastavenia určite zlyhávajúcu cestu.
Začnite tým, čo vidí adb
Spustite adb devices ešte predtým, než sa dotknete VPN. Prázdny zoznam je problém prenosu, nie smerovania, a žiadne nastavenie tunela neopraví zariadenie, ktoré server nikdy nevypísal. Reštartujte server čisto: najprv adb kill-server potom adb start-server, a prečítajte výstup, aby ste zistili, ktorý port obsadil. Ak sa zasekne samotné spustenie, zisťovanie mDNS je obvyklý podozrivý v sieti, ktorá filtruje multicast; dokumentovaným obchvatom je spustiť server s vypnutým zisťovaním:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesPri fyzickom zariadení je USB najkratšia cesta. Ak potrebujete TCP, prepnite zariadenie do režimu počúvania pomocou adb tcpip 5555 a pripojte sa na adresu a port zariadenia, adb connect 192.0.2.10:5555. Port 5037 je port servera hostiteľa, nie port, na ktorom počúva zariadenie.
Otestujte emulátor zvnútra
Emulátor odpovedá na DNS z 10.0.2.3 a tento resolver napája proces hostiteľa. Keď klient VPN zmení resolver hostiteľa, emulátor ho môže zdediť; keď klient filtruje proces emulátora alebo sa zoznam adaptérov hostiteľa zmení po štarte, nemôže. Oddeľte obe číselným cieľom a menom z rovnakého shellu. adb shell ping -c 2 10.0.2.2 dokazuje, že virtuálna sieť dosiahne stranu hostiteľa. Následné vyhľadanie mena ukáže, či preklad prekročil hranicu.
Potom spustite to isté vyhľadanie mena na hostiteľovi. Hostiteľ preloží a emulátor nie znamená, že zlom je medzi resolverom hostiteľa a virtuálnou sieťou emulátora, nie v tuneli. Obe zlyhajú znamená, že hľadať treba resolver hostiteľa. Reštart emulátora po pripojení VPN stojí za jeden pokus, pretože niektorí klienti inštalujú stav resolvera, ktorý bežiaci proces emulátora nezachytí.
Skontrolujte resolver hostiteľa a filtre klienta
Klient plného tunela nahrádza resolver hostiteľa svojím a klient split-DNS pridáva domény vyhľadávania a podmienené preposielanie. Interné mená často závisia práve od tejto konfigurácie split-DNS, preto sa pozrite, čo hostiteľ používa počas pripojenia: adresu resolvera, doménu vyhľadávania a či je interná zóna smerovaná na firemný DNS. Resolver, ktorý odpovedá na verejné, ale nie na interné mená, je otázka politiky, nie pokazený tunel.
Niektorí firemní klienti blokujú aj prevádzku z virtuálnych adaptérov. Pre filtračný ovládač vyzerá emulátor ako virtuálny adaptér, takže hostiteľ môže fungovať bezchybne, kým politika emulátor odmieta. Táto politika nie je z pracovnej stanice viditeľná a hádanie nastavení proxy ju neodhalí. Ak hostiteľ prekladá a emulátor je blokovaný nezávisle od nastavení resolvera, správna eskalácia je na tím, ktorý vlastní politiku klienta.
Poradie kontrol a čo znamená každý výsledok
Postupujte zhora nadol a zastavte sa na prvom zlyhávajúcom riadku. Každý výsledok ukazuje na iného vlastníka a žiadny sa nevyrieši preinštalovaním Android Studia.
| 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 |
Iba posledné dva riadky sú otázky VPN v obvyklom zmysle a iba posledný sa týka obsahu DNS. Dokumentácia adb pokrýva port servera a tu uvedené premenné prostredia, čo stačí na to, aby prenosová strana zostala poctivá, kým testujete zvyšok.