ADB en de Android-emulator falen achter een VPN: drie paden
ADB-detectie, de virtuele netwerkkaart van de emulator en de resolver van de host falen afzonderlijk achter een VPN. Test elk pad op volgorde voordat u de tunnel de schuld geeft.
U verbindt de VPN van kantoor en Android Studio verliest de draaiende emulator, adb start-server blijft hangen en een fysieke telefoon op Wi-Fi valt uit de apparatenlijst. Het lijkt of één tunnel één product blokkeert. In werkelijkheid falen drie afzonderlijke paden op drie manieren: ADB-apparaatdetectie, het virtuele netwerk van de emulator en de resolver van de host. De tunnel bezit meestal alleen het laatste, en vaak slechts een deel ervan.
Drie sockets, drie eigenaren
De adb-server luistert op poort 5037 op de host en spreekt met apparaten via USB of TCP, met mDNS voor netwerkdetectie. De emulator draait achter zijn eigen virtuele router: de gast is 10.0.2.15, de gateway is 10.0.2.2 en de DNS-server is 10.0.2.3, en het emulatorproces vertaalt dat alles naar sockets van de host. De resolver van de host is de plek waar de VPN-client DNS en zoekdomeinen installeert.
Die scheiding verklaart waarom een oplossing voor het ene hulpmiddel lijkt te werken en voor het andere niet. Een client die de resolver van de host wijzigt, laat een draaiend emulatorproces achter met de resolverstatus die het bij het starten las. Een client die multicast filtert, breekt de detectie zonder DNS aan te raken. Een client die virtuele adapters filtert, weigert de emulator terwijl de browser van de host blijft werken. Elk symptoom heeft een andere oorzaak, dus bepaal het falende pad voordat u een instelling wijzigt.
Begin met wat adb kan zien
Voer adb devices uit voordat u de VPN aanraakt. Een lege lijst is een transportprobleem, geen routeringsprobleem, en geen enkele tunnelinstelling repareert een apparaat dat de server nooit heeft opgesomd. Herstart de server schoon: eerst adb kill-server daarna adb start-server, en lees de uitvoer om te zien welke poort hij innam. Als het starten zelf blijft hangen, is mDNS-detectie de gebruikelijke verdachte op een netwerk dat multicast filtert; de gedocumenteerde oplossing is de server starten met detectie uitgeschakeld:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesVoor een fysiek apparaat is USB het kortste pad. Als u TCP nodig hebt, zet het apparaat in luistermodus met adb tcpip 5555 en verbind met het adres en de poort van het apparaat, adb connect 192.0.2.10:5555. Poort 5037 is de serverpoort van de host, niet de poort waarop een apparaat luistert.
Test de emulator van binnenuit
De emulator antwoordt op DNS vanaf 10.0.2.3, en die resolver wordt gevoed door het proces van de host. Wanneer de VPN-client de resolver van de host wijzigt, kan de emulator die erven; wanneer de client het emulatorproces filtert of de adapterlijst van de host na de start verandert, kan dat niet. Scheid beide met een numeriek doel en een naam uit dezelfde shell. adb shell ping -c 2 10.0.2.2 bewijst dat het virtuele netwerk de kant van de host bereikt. Een naamopzoeking daarna laat zien of de resolutie de grens overschreed.
Voer daarna dezelfde naamopzoeking uit op de host. De host lost op en de emulator niet betekent dat de breuk tussen de resolver van de host en het virtuele netwerk van de emulator zit, niet in de tunnel. Beide falen betekent dat de resolver van de host de plek is om te kijken. De emulator opnieuw starten na het verbinden van de VPN is één poging waard, omdat sommige clients een resolverstatus installeren die een draaiend emulatorproces niet oppikt.
Controleer de resolver van de host en de filters van de client
Een full-tunnelclient vervangt de resolver van de host door de zijne, en een split-DNS-client voegt zoekdomeinen en voorwaardelijke doorstuurders toe. Interne namen hangen vaak van die split-DNS-configuratie af, dus kijk wat de host gebruikt terwijl u verbonden bent: het resolveradres, het zoekdomein en of de interne zone naar de bedrijfs-DNS wordt gerouteerd. Een resolver die openbare namen beantwoordt maar geen interne, is een beleidskwestie, geen kapotte tunnel.
Sommige bedrijfsclients blokkeren ook verkeer van virtuele adapters. Voor een filterstuurprogramma ziet de emulator eruit als een virtuele adapter, dus de host kan perfect werken terwijl het beleid de emulator weigert. Dat beleid is niet zichtbaar vanaf het werkstation, en gissen naar proxyinstellingen onthult het niet. Als de host oplost en de emulator geblokkeerd blijft ongeacht de resolverinstellingen, is de juiste escalatie naar het team dat het clientbeleid bezit.
Volgorde van controles en wat elk resultaat betekent
Werk van boven naar beneden en stop bij de eerste rij die faalt. Elk resultaat wijst naar een andere eigenaar, en geen ervan wordt opgelost door Android Studio opnieuw te installeren.
| 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 |
Alleen de laatste twee rijen zijn VPN-vragen in de gebruikelijke zin, en alleen de laatste gaat over DNS-inhoud. De adb-documentatie dekt de serverpoort en de hier genoemde omgevingsvariabelen, genoeg om de transportkant eerlijk te houden terwijl u de rest test.