ADB i Android emulator ne rade iza VPN-a: tri puta
ADB otkrivanje, virtualna mrežna kartica emulatora i resolver hosta padaju odvojeno iza VPN-a. Testirajte svaki put redom prije nego okrivite tunel.
Povežete uredski VPN i Android Studio izgubi pokrenuti emulator, adb start-server se blokira, a fizički telefon na Wi-Fi-ju ispadne s popisa uređaja. Izgleda kao da jedan tunel blokira jedan proizvod. U praksi tri odvojena puta padaju na tri različita načina: ADB otkrivanje uređaja, virtualna mreža emulatora i resolver hosta. Tunel obično posjeduje samo posljednji, i to često samo dio njega.
Tri socketa, tri vlasnika
adb poslužitelj sluša na portu 5037 na hostu i razgovara s uređajima preko USB-a ili TCP-a, a za mrežno otkrivanje koristi mDNS. Emulator radi iza vlastitog virtualnog usmjerivača: gost je 10.0.2.15, gateway je 10.0.2.2, a DNS poslužitelj 10.0.2.3, i sve to proces emulatora prevodi u sockete hosta. Resolver hosta je mjesto gdje VPN klijent instalira DNS i domene pretraživanja.
To razdvajanje objašnjava zašto ispravak radi za jedan alat, a ne za drugi. Klijent koji mijenja resolver hosta ostavlja pokrenuti proces emulatora sa stanjem resolvera koje je pročitao pri pokretanju. Klijent koji filtrira multicast kvari otkrivanje bez diranja DNS-a. Klijent koji filtrira virtualne adaptere odbija emulator dok preglednik hosta nastavlja raditi. Svaki simptom ima drugi uzrok, zato identificirajte put koji pada prije nego promijenite bilo koju postavku.
Počnite s onim što adb vidi
Pokrenite adb devices prije nego dirate VPN. Prazan popis je problem prijenosa, ne usmjeravanja, i nijedna postavka tunela neće popraviti uređaj koji poslužitelj nikad nije naveo. Restartajte poslužitelj čisto: prvo adb kill-server zatim adb start-server, i pročitajte izlaz da vidite koji je port zauzeo. Ako se samo pokretanje blokira, mDNS otkrivanje je uobičajeni osumnjičenik na mreži koja filtrira multicast; dokumentirani zaobilazni put je pokrenuti poslužitelj s isključenim otkrivanjem:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesZa fizički uređaj USB je najkraći put. Ako treba TCP, stavite uređaj u način slušanja s adb tcpip 5555 i povežite se na adresu i port uređaja, adb connect 192.0.2.10:5555. Port 5037 je port poslužitelja na hostu, a ne port na kojem uređaj sluša.
Testirajte emulator iznutra
Emulator odgovara na DNS s 10.0.2.3, a taj resolver hrani proces hosta. Kad VPN klijent promijeni resolver hosta, emulator ga može naslijediti; kad klijent filtrira proces emulatora ili se popis adaptera hosta promijeni nakon pokretanja emulatora, ne može. Razdvojite to numeričkim ciljem i imenom iz iste ljuske. adb shell ping -c 2 10.0.2.2 dokazuje da virtualna mreža može doći do strane hosta. Pretraga imena nakon toga pokazuje je li razrješenje prešlo granicu.
Zatim pokrenite istu pretragu imena na hostu. Host razrješava, a emulator ne znači da je prekid između resolvera hosta i virtualne mreže emulatora, a ne u tunelu. Oba padaju znači da treba gledati resolver hosta. Restart emulatora nakon povezivanja VPN-a vrijedi jednog pokušaja, jer neki klijenti instaliraju stanje resolvera koje pokrenuti proces emulatora ne preuzima.
Provjerite resolver hosta i filtre klijenta
Klijent punog tunela zamjenjuje resolver hosta svojim, a split-DNS klijent dodaje domene pretraživanja i uvjetne prosljeđivače. Interna imena često ovise o toj split-DNS konfiguraciji, zato pogledajte što host koristi dok je povezan: adresu resolvera, domenu pretraživanja i je li interna zona usmjerena na korporativni DNS. Resolver koji odgovara na javna, ali ne na interna imena pitanje je politike, a ne pokvaren tunel.
Neki korporativni klijenti blokiraju i promet s virtualnih adaptera. Za filtarskog pokretača emulator izgleda kao virtualni adapter, pa host može raditi besprijekorno dok je emulator odbijen politikom. Ta politika nije vidljiva s radne stanice, a nagađanje o proxy postavkama je neće otkriti. Ako host razrješava, a emulator je blokiran bez obzira na postavke resolvera, ispravna eskalacija je timu koji posjeduje politiku klijenta.
Redoslijed provjera i što znači svaki rezultat
Radite odozgo prema dolje i zaustavite se na prvom retku koji padne. Svaki rezultat pokazuje na drugog vlasnika i nijedan se ne rješava ponovnom instalacijom Android Studija.
| 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 |
Samo su zadnja dva retka VPN pitanja u uobičajenom smislu, a samo zadnji govori o sadržaju DNS-a. adb dokumentacija pokriva port poslužitelja i ovdje navedene varijable okruženja, što je dovoljno da strana prijenosa ostane iskrena dok testirate ostalo.