ADB och Android-emulatorn misslyckas bakom ett VPN: tre vägar
ADB-upptäckt, emulatorns virtuella nätverkskort och värdens resolver misslyckas var för sig bakom ett VPN. Testa varje väg i ordning innan du skyller på tunneln.
Du ansluter kontorets VPN och Android Studio tappar den körande emulatorn, adb start-server hänger sig och en fysisk telefon på Wi-Fi faller ur enhetslistan. Det ser ut som att en tunnel blockerar en produkt. I praktiken misslyckas tre separata vägar på tre olika sätt: ADB-enhetsupptäckt, emulatorns virtuella nätverk och värdens resolver. Tunneln äger oftast bara den sista, och ofta bara en del av den.
Tre sockets, tre ägare
adb-servern lyssnar på port 5037 på värden och talar med enheter över USB eller TCP, med mDNS för nätverksupptäckt. Emulatorn kör bakom sin egen virtuella router: gästen är 10.0.2.15, gatewayen är 10.0.2.2 och DNS-servern är 10.0.2.3, och emulatorprocessen översätter allt till värdens sockets. Värdens resolver är platsen där VPN-klienten installerar DNS och sökdomäner.
Den uppdelningen förklarar varför en rättelse verkar fungera för ett verktyg men inte för ett annat. En klient som ändrar värdens resolver lämnar en körande emulatorprocess med det resolvertillstånd den läste vid start. En klient som filtrerar multicast bryter upptäckten utan att röra DNS. En klient som filtrerar virtuella adaptrar nekar emulatorn medan värdens webbläsare fortsätter att fungera. Varje symptom har olika orsak, så identifiera den felande vägen innan du ändrar en inställning.
Börja med det adb kan se
Kör adb devices innan du rör VPN:et. En tom lista är ett transportproblem, inte ett routingproblem, och ingen tunnelinställning reparerar en enhet som servern aldrig listade. Starta om servern rent: först adb kill-server sedan adb start-server, och läs utdata för att se vilken port den tog. Om själva starten hänger sig är mDNS-upptäckt den vanliga misstänkta i ett nätverk som filtrerar multicast; den dokumenterade lösningen är att starta servern med upptäckt avstängd:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesFör en fysisk enhet är USB den kortaste vägen. Om du behöver TCP, sätt enheten i lyssnarläge med adb tcpip 5555 och anslut till enhetens adress och port, adb connect 192.0.2.10:5555. Port 5037 är värdens serverport och inte den port en enhet lyssnar på.
Testa emulatorn inifrån
Emulatorn svarar på DNS från 10.0.2.3, och den resolvern matas av värdens process. När VPN-klienten ändrar värdens resolver kan emulatorn ärva den; när klienten filtrerar emulatorprocessen eller värdens adapterlista ändras efter start kan den inte. Separera de två med ett numeriskt mål och ett namn från samma shell. adb shell ping -c 2 10.0.2.2 bevisar att det virtuella nätverket når värdsidan. En namnsökning efteråt visar om uppslagningen korsade gränsen.
Kör sedan samma namnsökning på värden. Värden löser upp och emulatorn inte betyder att brottet ligger mellan värdens resolver och emulatorns virtuella nätverk, inte i tunneln. Båda misslyckas betyder att värdens resolver är platsen att titta på. Att starta om emulatorn efter VPN-anslutningen är ett försök värt, eftersom vissa klienter installerar ett resolvertillstånd som en körande emulatorprocess inte fångar upp.
Kontrollera värdens resolver och klientens filter
En fulltunnelklient ersätter värdens resolver med sin egen, och en split-DNS-klient lägger till sökdomäner och villkorliga vidarebefordrare. Interna namn beror ofta på just den split-DNS-konfigurationen, så titta på vad värden använder medan du är ansluten: resolveradressen, sökdomänen och om den interna zonen routas till företagets DNS. En resolver som svarar på offentliga men inte interna namn är en policyfråga, inte en trasig tunnel.
Vissa företagsklienter blockerar också trafik från virtuella adaptrar. För en filterdrivrutin ser emulatorn ut som en virtuell adapter, så värden kan fungera perfekt medan policyn nekar emulatorn. Den policyn syns inte från arbetsstationen, och gissningar om proxyinställningar avslöjar den inte. Om värden löser upp och emulatorn är blockerad oavsett resolverinställningar är rätt eskalering till teamet som äger klientpolicyn.
Ordningen på kontrollerna och vad varje resultat betyder
Arbeta uppifrån och ned och stanna vid första raden som misslyckas. Varje resultat pekar på en annan ägare, och ingen av dem löses genom att installera om Android Studio.
| 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 |
Bara de två sista raderna är VPN-frågor i vanlig mening, och bara den sista handlar om DNS-innehåll. adb-dokumentationen täcker serverporten och de miljövariabler som nämns här, nog för att hålla transportsidan ärlig medan du testar resten.