ADB og Android-emulatoren sviktar bak ein VPN: tre vegar
ADB-oppdaging, det virtuelle nettverkskortet til emulatoren og resolvaren til verten sviktar kvar for seg bak ein VPN. Test kvar veg i rekkjefølgje før du skuldar på tunnelen.
Du koplar til kontor-VPN-en, og Android Studio mistar den køyrande emulatoren, adb start-server heng, og ein fysisk telefon på Wi-Fi fell ut av eininglista. Det ser ut som om éin tunnel blokkerer eitt produkt. I praksis sviktar tre skilde vegar på tre ulike måtar: ADB-einingsoppdaging, det virtuelle nettverket til emulatoren og resolvaren til verten. Tunnelen eig vanlegvis berre den siste, og ofte berre ein del av han.
Tre socketar, tre eigarar
adb-tenaren lyttar på port 5037 på verten og snakkar med einingar over USB eller TCP, med mDNS for nettverksoppdaging. Emulatoren køyrer bak sin eigen virtuelle rutar: gjesten er 10.0.2.15, gatewayen er 10.0.2.2 og DNS-tenaren er 10.0.2.3, og emulatorprosessen omset alt til socketar hos verten. Resolvaren til verten er staden der VPN-klienten installerer DNS og søkjedomene.
Den delinga forklarar kvifor ei retting ser ut til å verke for eitt verktøy og ikkje for eit anna. Ein klient som endrar resolvaren til verten, lèt ein køyrande emulatorprosess behalde resolvertilstanden han las ved oppstart. Ein klient som filtrerer multicast, øydelegg oppdaginga utan å røre DNS. Ein klient som filtrerer virtuelle adapterar, avviser emulatoren medan nettlesaren til verten held fram. Kvart symptom har si eiga årsak, så identifiser den sviktande vegen før du endrar ei innstilling.
Start med det adb kan sjå
Køyr adb devices før du rører VPN-en. Ei tom liste er eit transportproblem, ikkje eit ruteproblem, og inga tunnelinnstilling reparerer ei eining tenaren aldri har lista. Start tenaren reint på nytt: først adb kill-server deretter adb start-server, og les utdata for å sjå kva port han tok. Om sjølve oppstarten heng, er mDNS-oppdaging den vanlege mistenkte på eit nettverk som filtrerer multicast; den dokumenterte løysinga er å starte tenaren med oppdaging slått av:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesFor ei fysisk eining er USB den kortaste vegen. Treng du TCP, set eininga i lyttemodus med adb tcpip 5555 og kople til adressa og porten til eininga, adb connect 192.0.2.10:5555. Port 5037 er tenarporten til verten og ikkje porten ei eining lyttar på.
Test emulatoren innanfrå
Emulatoren svarar på DNS frå 10.0.2.3, og den resolvaren blir fødd av prosessen til verten. Når VPN-klienten endrar resolvaren til verten, kan emulatoren arve han; når klienten filtrerer emulatorprosessen eller adapterlista til verten endrar seg etter oppstart, kan han ikkje. Skil dei to med eit numerisk mål og eit namn frå same shell. adb shell ping -c 2 10.0.2.2 provar at det virtuelle nettverket når vertssida. Eit namneoppslag etterpå viser om oppslaget kryssa grensa.
Deretter køyrer du det same namneoppslaget på verten. Verten løyser opp og emulatoren ikkje betyr at brotet er mellom resolvaren til verten og det virtuelle nettverket til emulatoren, ikkje i tunnelen. Begge sviktar betyr at resolvaren til verten er staden å sjå. Å starte emulatoren på nytt etter VPN-tilkoplinga er eitt forsøk verd, fordi nokre klientar installerar ein resolvertilstand som ein køyrande emulatorprosess ikkje tek opp.
Kontroller resolvaren til verten og klientfiltra
Ein fulltunnelklient byter ut resolvaren til verten med sin eigen, og ein split-DNS-klient legg til søkjedomene og vilkårsvidaresendingar. Interne namn heng ofte av nettopp den split-DNS-konfigurasjonen, så sjå kva verten brukar medan du er tilkopla: resolveradressa, søkjedomenet og om den interne sona blir rutra til DNS-en til verksemda. Ein resolver som svarar på offentlege men ikkje interne namn, er eit policy-spørsmål, ikkje ein øydelagd tunnel.
Nokre verksemdklientar blokkerer òg trafikk frå virtuelle adapterar. For ein filterdrivar ser emulatoren ut som ein virtuell adapter, så verten kan fungere perfekt medan policyen avviser emulatoren. Den policyen er ikkje synleg frå arbeidsstasjonen, og gissing om proxyinnstillingar avdekkjer han ikkje. Om verten løyser opp og emulatoren er blokkert uansett resolverinnstillingar, er rett eskalering til teamet som eig klientpolicyen.
Rekkjefølgja av kontrollar og kva kvart resultat betyr
Arbeid ovanfrå og ned og stopp ved første rad som sviktar. Kvart resultat peikar på ein annan eigar, og ingen av dei blir løyste ved å installere Android Studio på nytt.
| 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 |
Berre dei to siste radene er VPN-spørsmål i vanleg tyding, og berre den siste handlar om DNS-innhald. adb-dokumentasjonen dekkjer tenarporten og miljøvariablane som er nemnde her, nok til å halde transportsida ærleg medan du testar resten.