Du forbinder kontorets VPN, og Android Studio mister den kørende emulator, adb start-server hænger, og en fysisk telefon på Wi-Fi falder ud af enhedslisten. Det ser ud som om ét produkt blokeres af én tunnel. I praksis fejler tre separate veje på tre forskellige måder: ADB-enhedsopdagelse, emulatorens virtuelle netværk og værtens resolver. Tunnelen ejer normalt kun den sidste, og ofte kun en del af den.

Tre sockets, tre ejere

adb-serveren lytter på port 5037 på værten og taler med enheder over USB eller TCP, med mDNS til netværksopdagelse. Emulatoren kører bag sin egen virtuelle router: gæsten er 10.0.2.15, gatewayen er 10.0.2.2 og DNS-serveren er 10.0.2.3, og det hele oversætter emulatorprocessen til værtens sockets. Værtens resolver er stedet, hvor VPN-klienten installerer DNS og søgedomæner.

Den adskillelse forklarer, hvorfor en rettelse ser ud til at virke for ét værktøj og ikke for et andet. En klient, der ændrer værtens resolver, efterlader en kørende emulatorproces med den resolver-tilstand, den læste ved opstart. En klient, der filtrerer multicast, ødelægger opdagelsen uden at røre DNS. En klient, der filtrerer virtuelle adaptere, afviser emulatoren, mens værtens browser fortsat virker. Hvert symptom har sin egen årsag, så identificer den fejlende vej, før du ændrer en indstilling.

Start med det, adb kan se

Kør adb devices før du rører VPN. En tom liste er et transportproblem, ikke et routingproblem, og ingen tunnelindstilling reparerer en enhed, som serveren aldrig har opregnet. Genstart serveren rent: først adb kill-server derefter adb start-server, og læs output for at se, hvilken port den bandt. Hvis selve opstarten hænger, er mDNS-opdagelse den sædvanlige mistænkte på et netværk, der filtrerer multicast; den dokumenterede løsning er at starte serveren med opdagelse slået fra:

ADB_MDNS_OPENSCREEN=0 adb start-server
adb devices

Til en fysisk enhed er USB den korteste vej. Hvis du har brug for TCP, sæt enheden i lyttetilstand med adb tcpip 5555 og forbind til enhedens adresse og port, adb connect 192.0.2.10:5555. Port 5037 er værtens serverport og ikke den port, en enhed lytter på.

Test emulatoren indefra

Emulatoren svarer på DNS fra 10.0.2.3, og den resolver får sine svar fra værtens proces. Når VPN-klienten ændrer værtens resolver, kan emulatoren arve den; når klienten filtrerer emulatorprocessen, eller værtens adapterliste ændres efter emulatorens start, kan den ikke. Adskil de to med et numerisk mål og et navn fra samme shell. adb shell ping -c 2 10.0.2.2 beviser, at det virtuelle netværk kan nå værtens side. Et navneopslag bagefter viser, om opløsningen krydsede grænsen.

Kør derefter det samme navneopslag på værten. Værten opløser, og emulatoren gør ikke, betyder, at bruddet er mellem værtens resolver og emulatorens virtuelle netværk, ikke i tunnelen. Begge fejler betyder, at værtens resolver er stedet at kigge. Genstart af emulatoren efter VPN-forbindelsen er ét forsøg værd, fordi nogle klienter installerer en resolver-tilstand, som en kørende emulatorproces ikke fanger.

Kontroller værtens resolver og klientfiltre

En full-tunnel-klient erstatter værtens resolver med sin egen, og en split-DNS-klient tilføjer søgedomæner og betingede videresendere. Interne navne afhænger ofte af netop den split-DNS-konfiguration, så se, hvad værten bruger, mens du er forbundet: resolveradressen, søgedomænet og om den interne zone routes til virksomhedens DNS. En resolver, der svarer på offentlige navne men ikke interne, er et politikspørgsmål, ikke en ødelagt tunnel.

Nogle virksomhedsklienter blokerer også trafik fra virtuelle adaptere. For en filterdriver ligner emulatoren en virtuel adapter, så værten kan fungere perfekt, mens emulatoren afvises af politik. Den politik er ikke synlig fra arbejdsstationen, og gæt på proxyindstillinger afslører den ikke. Hvis værten opløser, og emulatoren er blokeret uanset resolverindstillinger, er den rigtige eskalering til det team, der ejer klientpolitikken.

Rækkefølge for kontroller, og hvad hvert resultat betyder

Arbejd fra top til bund, og stop ved den første række, der fejler. Hvert resultat peger på en anden ejer, og ingen af dem løses ved at geninstallere Android Studio.

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

Kun de sidste to rækker er VPN-spørgsmål i sædvanlig forstand, og kun den sidste handler om DNS-indhold. adb-dokumentationen dækker serverporten og de miljøvariabler, der nævnes her, nok til at holde transportsiden ærlig, mens du tester resten.

Relaterede artikler