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 devices

U 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.

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

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.

Související články