Prisijungiate prie biuro VPN ir „Android Studio“ praranda veikiantį emuliatorių, adb start-server užstringa, o fizinis telefonas per Wi-Fi iškrenta iš įrenginių sąrašo. Atrodo, kad vienas tunelis blokuoja vieną produktą. Iš tikrųjų nepavyksta trys atskiri keliai trimis būdais: ADB įrenginių aptikimas, virtualus emuliatoriaus tinklas ir pagrindinio kompiuterio rezolveris. Tunelis paprastai valdo tik paskutinį, ir dažnai tik jo dalį.

Trys lizdai, trys savininkai

adb serveris klausosi 5037 prievado pagrindiniame kompiuteryje ir kalba su įrenginiais per USB arba TCP, tinklo aptikimui naudoja mDNS. Emuliatorius veikia už savo virtualaus maršrutizatoriaus: svečias yra 10.0.2.15, jo šliuzas 10.0.2.2, o DNS serveris 10.0.2.3, ir emuliatoriaus procesas visa tai paverčia pagrindinio kompiuterio lizdais. Pagrindinio kompiuterio rezolveris yra vieta, kur VPN klientas įdiegia DNS ir paieškos domenus.

Šis atskyrimas paaiškina, kodėl pataisa atrodo veikianti vienam įrankiui, bet ne kitam. Klientas, keičiantis pagrindinio kompiuterio rezolverį, palieka veikiantį emuliatoriaus procesą su rezolverio būsena, kurią jis perskaitė paleidžiant. Klientas, filtruojantis multicast, sugadina aptikimą neliesdamas DNS. Klientas, filtruojantis virtualius adapterius, atsisako emuliatoriaus, kol pagrindinio kompiuterio naršyklė veikia toliau. Kiekvienas simptomas turi skirtingą priežastį, todėl nustatykite nepavykstantį kelią prieš keisdami bet kokį nustatymą.

Pradėkite nuo to, ką mato adb

Paleiskite adb devices prieš liesdami VPN. Tuščias sąrašas yra transportavimo, o ne maršrutizavimo problema, ir joks tunelio nustatymas nesutaisys įrenginio, kurio serveris niekada neišvardijo. Tvarkingai paleiskite serverį iš naujo: pirma adb kill-server tada adb start-server, ir perskaitykite išvestį, kad sužinotumėte, kurį prievadą jis užėmė. Jei pats paleidimas užstringa, multicast filtruojančiame tinkle mDNS aptikimas yra įprastas įtariamasis; dokumentuotas sprendimas yra paleisti serverį išjungus aptikimą:

ADB_MDNS_OPENSCREEN=0 adb start-server
adb devices

Fiziniam įrenginiui USB yra trumpiausias kelias. Jei reikia TCP, perjunkite įrenginį į klausymo režimą su adb tcpip 5555 ir prisijunkite prie įrenginio adreso ir prievado, adb connect 192.0.2.10:5555. 5037 prievadas yra pagrindinio kompiuterio serverio prievadas, o ne tas, kuriame klausosi įrenginys.

Išbandykite emuliatorių iš vidaus

Emuliatorius atsako į DNS iš 10.0.2.3, ir tą rezolverį maitina pagrindinio kompiuterio procesas. Kai VPN klientas pakeičia pagrindinio kompiuterio rezolverį, emuliatorius gali jį paveldėti; kai klientas filtruoja emuliatoriaus procesą arba po paleidimo pasikeičia pagrindinio kompiuterio adapterių sąrašas, jis negali. Atskirkite abu skaitiniu tikslu ir vardu iš tos pačios shell. adb shell ping -c 2 10.0.2.2 įrodo, kad virtualus tinklas pasiekia pagrindinio kompiuterio pusę. Vardo paieška po to parodo, ar sprendimas peržengė ribą.

Tada paleiskite tą pačią vardo paiešką pagrindiniame kompiuteryje. Pagrindinis kompiuteris išsprendžia, o emuliatorius ne, reiškia, kad lūžis yra tarp pagrindinio kompiuterio rezolverio ir virtualaus emuliatoriaus tinklo, o ne tunelyje. Abu nepavyksta reiškia, kad reikia žiūrėti pagrindinio kompiuterio rezolverį. Emuliatoriaus paleidimas iš naujo po VPN prisijungimo vertas vieno bandymo, nes kai kurie klientai įdiegia rezolverio būseną, kurios veikiantis emuliatoriaus procesas neperima.

Patikrinkite pagrindinio kompiuterio rezolverį ir kliento filtrus

Viso tunelio klientas pakeičia pagrindinio kompiuterio rezolverį savuoju, o split-DNS klientas prideda paieškos domenus ir sąlyginius persiuntėjus. Vidiniai vardai dažnai priklauso nuo tos split-DNS konfigūracijos, todėl pažiūrėkite, ką pagrindinis kompiuteris naudoja prisijungęs: rezolverio adresą, paieškos domeną ir ar vidinė zona nukreipta į įmonės DNS. Rezolveris, atsakantis į viešus, bet ne į vidinius vardus, yra politikos klausimas, o ne sugedęs tunelis.

Kai kurie įmonės klientai blokuoja ir srautą iš virtualių adapterių. Filtro tvarkyklei emuliatorius atrodo kaip virtualus adapteris, todėl pagrindinis kompiuteris gali veikti nepriekaištingai, kol politika atsisako emuliatoriaus. Ta politika nematoma iš darbo stoties, o spėliojimas apie tarpinio serverio nustatymus jos neatskleis. Jei pagrindinis kompiuteris išsprendžia, o emuliatorius blokuojamas nepriklausomai nuo rezolverio nustatymų, teisinga eskalacija yra komandai, kuri valdo kliento politiką.

Patikrų tvarka ir ką reiškia kiekvienas rezultatas

Dirbkite iš viršaus į apačią ir sustokite ties pirmąja nepavykusia eilute. Kiekvienas rezultatas nurodo kitą savininką, ir nė vienas neišsprendžiamas perdiegus „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

Tik paskutinės dvi eilutės yra VPN klausimai įprasta prasme, ir tik paskutinė apie DNS turinį. adb dokumentacija apima serverio prievadą ir čia paminėtus aplinkos kintamuosius, ko pakanka išlaikyti transportavimo pusę sąžiningą bandant likusią dalį.

Susiję straipsniai