ADB a emulátor Android nefungují za VPN: tři cesty
Zjišťování ADB, virtuální síťová karta emulátoru a resolver hostitele selhávají za VPN odděleně. Otestujte každou cestu popořadě, než obviníte tunel.
Připojíte firemní VPN a Android Studio ztratí běžící emulátor, adb start-server se zasekne a fyzický telefon na Wi-Fi vypadne ze seznamu zařízení. Vypadá to, jako by jeden tunel blokoval jeden produkt. Ve skutečnosti selhávají tři oddělené cesty třemi způsoby: zjišťování zařízení přes adb, virtuální síť emulátoru a resolver hostitele. Tunel obvykle vlastní jen poslední z nich a často jen jeho část.
Tři sockety, tři vlastníci
Server adb naslouchá na portu 5037 na hostiteli a komunikuje se zařízeními přes USB nebo TCP, pro síťové zjišťování používá mDNS. Emulátor běží za vlastním virtuálním routerem: host je 10.0.2.15, brána 10.0.2.2 a DNS server 10.0.2.3, a vše proces emulátoru překládá do socketů hostitele. Resolver hostitele je místo, kam klient VPN instaluje DNS a domény hledání.
Toto oddělení vysvětluje, proč oprava funguje u jednoho nástroje a u jiného ne. Klient, který změní resolver hostitele, nechá běžící proces emulátoru se stavem resolveru, který načetl při startu. Klient, který filtruje multicast, rozbije zjišťování, aniž by se dotkl DNS. Klient, který filtruje virtuální adaptéry, emulátor odmítne, zatímco prohlížeč hostitele dál funguje. Každý symptom má jinou příčinu, proto nejdřív určete selhávající cestu a pak měňte nastavení.
Začněte tím, co adb vidí
Spusťte adb devices ještě předtím, než se dotknete VPN. Prázdný seznam je problém přenosu, ne směrování, a žádné nastavení tunelu neopraví zařízení, které server nikdy nevypsal. Restartujte server čistě: nejprve adb kill-server a potom adb start-server, a přečtěte výstup, abyste zjistili, který port obsadil. Pokud se zasekne samo spuštění, obvyklým podezřelým v síti, která filtruje multicast, je zjišťování mDNS; dokumentovanou obezličkou je spustit server se zjišťováním vypnutým:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesU fyzického zařízení je USB nejkratší cesta. Pokud potřebujete TCP, přepněte zařízení do režimu naslouchání pomocí adb tcpip 5555 a připojte se na adresu a port zařízení, adb connect 192.0.2.10:5555. Port 5037 je port serveru na hostiteli, ne port, na kterém naslouchá zařízení.
Otestujte emulátor zevnitř
Emulátor odpovídá na DNS z 10.0.2.3 a tento resolver napájí proces hostitele. Když klient VPN změní resolver hostitele, emulátor jej může zdědit; když klient filtruje proces emulátoru nebo se seznam adaptérů hostitele změní po startu emulátoru, nemůže. Oddělte obojí číselným cílem a jménem ze stejného shellu. adb shell ping -c 2 10.0.2.2 dokazuje, že virtuální síť dosáhne na stranu hostitele. Následné hledání jména ukáže, zda překlad překročil hranici.
Potom spusťte stejné hledání jména na hostiteli. Hostitel přeloží a emulátor ne znamená, že zlom je mezi resolverem hostitele a virtuální sítí emulátoru, ne v tunelu. Obojí selže znamená, že hledat je třeba resolver hostitele. Restart emulátoru po připojení VPN stojí za jeden pokus, protože někteří klienti instalují stav resolveru, který běžící proces emulátoru nepřevezme.
Zkontrolujte resolver hostitele a filtry klienta
Klient plného tunelu nahradí resolver hostitele svým a klient split-DNS přidá domény hledání a podmíněné forwardery. Interní jména často závisí právě na této konfiguraci split-DNS, proto se podívejte, co hostitel používá při připojení: adresu resolveru, doménu hledání a zda je interní zóna směrována na firemní DNS. Resolver, který odpovídá na veřejná jména, ale ne na interní, je otázka politiky, ne rozbitý tunel.
Někteří firemní klienti blokují i provoz z virtuálních adaptérů. Pro filtrační driver vypadá emulátor jako virtuální adaptér, takže hostitel může fungovat bezchybně, zatímco emulátor je politikou odmítnut. Tato politika není z pracovní stanice vidět a hádání o nastavení proxy ji neodhalí. Pokud hostitel překládá a emulátor je blokován bez ohledu na nastavení resolveru, správná eskalace je na tým, který politiku klienta vlastní.
Pořadí kontrol a co každý výsledek znamená
Postupujte shora dolů a zastavte se na prvním selhávajícím řádku. Každý výsledek ukazuje na jiného vlastníka a žádný se nevyřeší reinstalací 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 |
Jen poslední dva řádky jsou otázky VPN v obvyklém smyslu a jen poslední se týká obsahu DNS. Dokumentace adb pokrývá port serveru a zde zmíněné proměnné prostředí, což stačí k tomu, aby přenosová strana zůstala poctivá, když testujete zbytek.