Podłączasz firmowy VPN i Android Studio traci działający emulator, adb start-server zawiesza się, a fizyczny telefon w Wi-Fi wypada z listy urządzeń. Wygląda to tak, jakby jeden tunel blokował jeden produkt. W praktyce zawodzą trzy odrębne ścieżki na trzy sposoby: wykrywanie urządzeń przez adb, sieć wirtualna emulatora i resolver hosta. Tunel zwykle posiada tylko tę ostatnią, i to często tylko jej część.

Trzy gniazda, trzech właścicieli

Serwer adb nasłuchuje na porcie 5037 na hoście i rozmawia z urządzeniami przez USB lub TCP, a do wykrywania w sieci używa mDNS. Emulator działa za własnym wirtualnym routerem: gość to 10.0.2.15, brama to 10.0.2.2, a serwer DNS to 10.0.2.3, i proces emulatora tłumaczy to wszystko na gniazda hosta. Resolver hosta to miejsce, w którym klient VPN instaluje DNS i domeny wyszukiwania.

To rozdzielenie wyjaśnia, dlaczego poprawka wydaje się działać dla jednego narzędzia, a nie dla innego. Klient, który zmienia resolver hosta, zostawia działający proces emulatora ze stanem resolvera odczytanym przy starcie. Klient, który filtruje multicast, psuje wykrywanie bez dotykania DNS. Klient, który filtruje wirtualne adaptery, odmawia emulatorowi, podczas gdy przeglądarka hosta nadal działa. Każdy objaw ma inną przyczynę, więc zanim zmienisz jakiekolwiek ustawienie, ustal, która ścieżka zawodzi.

Zacznij od tego, co widzi adb

Uruchom adb devices przed dotknięciem VPN. Pusta lista to problem transportu, nie routingu, i żadne ustawienie tunelu nie naprawi urządzenia, którego serwer nigdy nie wylistował. Zrestartuj serwer czysto: najpierw adb kill-server potem adb start-server, i odczytaj wynik, aby zobaczyć, który port zajął. Jeśli samo uruchomienie się zawiesza, wykrywanie mDNS jest zwykłym podejrzanym w sieci filtrującej multicast; udokumentowanym obejściem jest uruchomienie serwera z wyłączonym wykrywaniem:

ADB_MDNS_OPENSCREEN=0 adb start-server
adb devices

Dla fizycznego urządzenia USB to najkrótsza droga. Jeśli potrzebujesz TCP, przełącz urządzenie w tryb nasłuchu poleceniem adb tcpip 5555 i połącz się z adresem oraz portem urządzenia, adb connect 192.0.2.10:5555. Port 5037 to port serwera hosta, a nie port, na którym nasłuchuje urządzenie.

Przetestuj emulator od środka

Emulator odpowiada na DNS z 10.0.2.3, a ten resolver jest zasilany przez proces hosta. Gdy klient VPN zmienia resolver hosta, emulator może go odziedziczyć; gdy klient filtruje proces emulatora albo lista adapterów hosta zmieni się po starcie, nie może. Rozdziel oba za pomocą celu liczbowego i nazwy z tej samej powłoki. adb shell ping -c 2 10.0.2.2 dowodzi, że sieć wirtualna dociera do strony hosta. Późniejsze wyszukanie nazwy pokazuje, czy rozwiązanie przekroczyło granicę.

Następnie uruchom to samo wyszukanie nazwy na hoście. Host rozwiązuje, a emulator nie, oznacza, że przerwa jest między resolverem hosta a siecią wirtualną emulatora, a nie w tunelu. Oba zawodzą oznacza, że trzeba patrzeć na resolver hosta. Restart emulatora po połączeniu VPN jest wart jednej próby, bo niektórzy klienci instalują stan resolvera, którego działający proces emulatora nie przejmuje.

Sprawdź resolver hosta i filtry klienta

Klient pełnego tunelu zastępuje resolver hosta swoim, a klient split-DNS dodaje domeny wyszukiwania i przekazywanie warunkowe. Nazwy wewnętrzne często zależą właśnie od tej konfiguracji split-DNS, więc sprawdź, czego używa host podczas połączenia: adresu resolvera, domeny wyszukiwania i tego, czy strefa wewnętrzna jest kierowana do firmowego DNS. Resolver, który odpowiada na nazwy publiczne, ale nie na wewnętrzne, to kwestia polityki, a nie zepsuty tunel.

Niektóre klienty firmowe blokują też ruch z wirtualnych adapterów. Dla sterownika filtra emulator wygląda jak adapter wirtualny, więc host może działać bez zarzutu, podczas gdy polityka odmawia emulatorowi. Ta polityka nie jest widoczna ze stacji roboczej, a zgadywanie ustawień proxy jej nie ujawni. Jeśli host rozwiązuje, a emulator jest zablokowany niezależnie od ustawień resolvera, właściwa eskalacja prowadzi do zespołu odpowiedzialnego za politykę klienta.

Kolejność kontroli i co oznacza każdy wynik

Pracuj od góry do dołu i zatrzymaj się na pierwszym wierszu, który zawodzi. Każdy wynik wskazuje innego właściciela, a żadnego nie naprawia reinstalacja 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

Tylko dwa ostatnie wiersze to pytania o VPN w zwykłym sensie, a tylko ostatni dotyczy zawartości DNS. Dokumentacja adb obejmuje port serwera i wymienione tu zmienne środowiskowe, co wystarcza, by strona transportu pozostała rzetelna podczas testowania reszty.

Powiązane artykuły