ADB un Android emulators nedarbojas aiz VPN: trīs ceļi
ADB atklāšana, emulatora virtuālā tīkla karte un resursdatora atrisinātājs neizdodas atsevišķi aiz VPN. Pārbaudiet katru ceļu pēc kārtas, pirms vainot tuneli.
Jūs pieslēdzat biroja VPN, un Android Studio pazaudē darbojošos emulatoru, adb start-server iesprūst, un fiziskais tālrunis Wi-Fi tīklā izkrīt no ierīču saraksta. Izskatās, ka viens tunelis bloķē vienu produktu. Patiesībā neizdodas trīs atsevišķi ceļi trīs veidos: adb ierīču atklāšana, emulatora virtuālais tīkls un resursdatora atrisinātājs. Tunelis parasti pārvalda tikai pēdējo, un bieži vien tikai tā daļu.
Trīs ligzdas, trīs īpašnieki
adb serveris klausās 5037 portā uz resursdatora un sazinās ar ierīcēm pa USB vai TCP, tīkla atklāšanai izmanto mDNS. Emulators darbojas aiz sava virtuālā maršrutētāja: viesis ir 10.0.2.15, tā vārteja ir 10.0.2.2 un DNS serveris ir 10.0.2.3, un emulatora process to visu pārvērš resursdatora ligzdās. Resursdatora atrisinātājs ir vieta, kur VPN klients instalē DNS un meklēšanas domēnus.
Šī atdalīšana izskaidro, kāpēc labojums šķietami strādā vienam rīkam, bet ne otram. Klients, kas maina resursdatora atrisinātāju, atstāj darbojošos emulatora procesu ar atrisinātāja stāvokli, ko tas nolasīja palaišanas laikā. Klients, kas filtrē multicast, salauž atklāšanu, neaiztiekot DNS. Klients, kas filtrē virtuālos adapterus, atsaka emulatoru, kamēr resursdatora pārlūks turpina strādāt. Katram simptomam ir cits cēlonis, tāpēc nosakiet neveiksmīgo ceļu, pirms mainīt jebkuru iestatījumu.
Sāciet ar to, ko redz adb
Palaidiet adb devices pirms aiztikt VPN. Tukšs saraksts ir transporta, nevis maršrutēšanas problēma, un neviens tuneļa iestatījums nelabos ierīci, kuru serveris nekad nav uzskaitījis. Restartējiet serveri tīri: vispirms adb kill-server tad adb start-server, un izlasiet izvadi, lai redzētu, kuru portu tas aizņēma. Ja pati palaišana iesprūst, multicast filtrējošā tīklā mDNS atklāšana ir ierastais aizdomās turamais; dokumentētais risinājums ir palaist serveri ar izslēgtu atklāšanu:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesFiziskai ierīcei USB ir īsākais ceļš. Ja vajag TCP, ieslēdziet ierīci klausīšanās režīmā ar adb tcpip 5555 un pievienojieties ierīces adresei un portam, adb connect 192.0.2.10:5555. 5037 ports ir resursdatora servera ports, nevis ports, kurā klausās ierīce.
Pārbaudiet emulatoru no iekšpuses
Emulators atbild uz DNS no 10.0.2.3, un šo atrisinātāju baro resursdatora process. Kad VPN klients maina resursdatora atrisinātāju, emulators to var mantot; kad klients filtrē emulatora procesu vai pēc palaišanas mainās resursdatora adapteru saraksts, tas to nevar. Atdaliet abus ar skaitlisku mērķi un nosaukumu no tās pašas shell. adb shell ping -c 2 10.0.2.2 pierāda, ka virtuālais tīkls sasniedz resursdatora pusi. Nosaukuma meklēšana pēc tam parāda, vai atrisinājums šķērsoja robežu.
Pēc tam palaidiet to pašu nosaukuma meklēšanu uz resursdatora. Resursdators atrisina, bet emulators ne, nozīmē, ka pārtraukums ir starp resursdatora atrisinātāju un emulatora virtuālo tīklu, nevis tunelī. Abi neizdodas nozīmē, ka jāmeklē resursdatora atrisinātājs. Emulatora restarts pēc VPN pieslēgšanas ir viena mēģinājuma vērts, jo daži klienti instalē atrisinātāja stāvokli, ko darbojošos emulatora process neuzņem.
Pārbaudiet resursdatora atrisinātāju un klienta filtrus
Pilna tuneļa klients aizstāj resursdatora atrisinātāju ar savu, un split-DNS klients pievieno meklēšanas domēnus un nosacītus pārsūtītājus. Iekšējie nosaukumi bieži ir atkarīgi no šīs split-DNS konfigurācijas, tāpēc apskatiet, ko resursdators izmanto pieslēguma laikā: atrisinātāja adresi, meklēšanas domēnu un vai iekšējā zona tiek maršrutēta uz uzņēmuma DNS. Atrisinātājs, kas atbild uz publiskiem, bet ne uz iekšējiem nosaukumiem, ir politikas jautājums, nevis salauzts tunelis.
Daži uzņēmuma klienti bloķē arī datplūsmu no virtuālajiem adapteriem. Filtrēšanas draiverim emulators izskatās kā virtuālais adapters, tāpēc resursdators var strādāt nevainojami, kamēr politika atsaka emulatoru. Šī politika nav redzama no darbstacijas, un minējumi par starpniekservera iestatījumiem to neatklās. Ja resursdators atrisina un emulators ir bloķēts neatkarīgi no atrisinātāja iestatījumiem, pareizā eskalācija ir komandai, kas pārvalda klienta politiku.
Pārbaužu secība un ko nozīmē katrs rezultāts
Strādājiet no augšas uz leju un apstājieties pie pirmās neveiksmīgās rindas. Katrs rezultāts norāda uz citu īpašnieku, un neviens netiek novērsts, pārinstalējot 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 |
Tikai pēdējās divas rindas ir VPN jautājumi parastajā nozīmē, un tikai pēdējā ir par DNS saturu. adb dokumentācija aptver servera portu un šeit minētos vides mainīgos, ar ko pietiek, lai transporta puse paliktu godīga, kamēr testējat pārējo.