ADB dan emulator Android gagal di belakang VPN: tiga laluan
Penemuan ADB, kad rangkaian maya emulator dan penyelesai hos gagal secara berasingan di belakang VPN. Uji setiap laluan mengikut urutan sebelum menyalahkan terowong.
Anda menyambung VPN pejabat dan Android Studio kehilangan emulator yang sedang berjalan, adb start-server tergantung, dan telefon fizikal pada Wi-Fi tercicir daripada senarai peranti. Nampak seperti satu terowong menyekat satu produk. Sebenarnya tiga laluan berasingan gagal dengan tiga cara: penemuan peranti adb, rangkaian maya emulator dan penyelesai hos. Terowong biasanya hanya memiliki yang terakhir, dan selalunya hanya sebahagian daripadanya.
Tiga soket, tiga pemilik
Pelayan adb mendengar pada port 5037 pada hos dan bercakap dengan peranti melalui USB atau TCP, dengan mDNS untuk penemuan rangkaian. Emulator berjalan di belakang penghala mayanya sendiri: tetamu ialah 10.0.2.15, get laluan ialah 10.0.2.2 dan pelayan DNS ialah 10.0.2.3, dan proses emulator menterjemah semuanya kepada soket hos. Penyelesai hos ialah tempat klien VPN memasang DNS dan domain carian.
Pemisahan itu menjelaskan mengapa satu pembetulan kelihatan berkesan untuk satu alat dan tidak untuk yang lain. Klien yang menukar penyelesai hos meninggalkan proses emulator yang sedang berjalan dengan keadaan penyelesai yang dibacanya semasa mula. Klien yang menapis multicast merosakkan penemuan tanpa menyentuh DNS. Klien yang menapis penyesuai maya menolak emulator sementara pelayar hos terus berfungsi. Setiap gejala ada punca berbeza, jadi kenal pasti laluan yang gagal sebelum menukar apa-apa tetapan.
Mulakan dengan apa yang adb boleh lihat
Jalankan adb devices sebelum menyentuh VPN. Senarai kosong ialah masalah pengangkutan, bukan penghalaan, dan tiada tetapan terowong akan membaiki peranti yang pelayan tidak pernah senaraikan. Mulakan semula pelayan dengan bersih: dahulu adb kill-server kemudian adb start-server, dan baca output untuk melihat port yang diikatnya. Jika permulaan itu sendiri tergantung, penemuan mDNS ialah suspek biasa pada rangkaian yang menapis multicast; penyelesaian yang didokumenkan ialah memulakan pelayan dengan penemuan dimatikan:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesUntuk peranti fizikal, USB ialah laluan terpendek. Jika perlu TCP, letakkan peranti dalam mod mendengar dengan adb tcpip 5555 dan sambung ke alamat dan port peranti, adb connect 192.0.2.10:5555. Port 5037 ialah port pelayan hos, bukan port yang peranti dengar.
Uji emulator dari dalam
Emulator menjawab DNS dari 10.0.2.3, dan penyelesai itu dibekalkan oleh proses hos. Apabila klien VPN menukar penyelesai hos, emulator boleh mewarisinya; apabila klien menapis proses emulator atau senarai penyesuai hos berubah selepas permulaan, ia tidak boleh. Pisahkan kedua-duanya dengan sasaran berangka dan nama dari shell yang sama. adb shell ping -c 2 10.0.2.2 membuktikan rangkaian maya sampai ke sisi hos. Carian nama selepas itu menunjukkan sama ada penyelesaian melintasi sempadan.
Kemudian jalankan carian nama yang sama pada hos. Hos menyelesaikan dan emulator tidak bermakna pecahnya antara penyelesai hos dan rangkaian maya emulator, bukan di dalam terowong. Kedua-duanya gagal bermakna penyelesai hos ialah tempat untuk dilihat. Memulakan semula emulator selepas VPN disambung berbaloi satu percubaan, kerana sesetengah klien memasang keadaan penyelesai yang tidak diambil oleh proses emulator yang berjalan.
Periksa penyelesai hos dan penapis klien
Klien terowong penuh menggantikan penyelesai hos dengan miliknya, dan klien split-DNS menambah domain carian serta pemaju bersyarat. Nama dalaman selalunya bergantung pada konfigurasi split-DNS itu, jadi lihat apa yang hos gunakan semasa bersambung: alamat penyelesai, domain carian dan sama ada zon dalaman dihalakan ke DNS korporat. Penyelesai yang menjawab nama awam tetapi tidak nama dalaman ialah soal dasar, bukan terowong rosak.
Sesetengah klien korporat juga menyekat trafik daripada penyesuai maya. Bagi pemacu penapis, emulator kelihatan seperti penyesuai maya, jadi hos boleh berfungsi dengan sempurna sementara dasar menolak emulator. Dasar itu tidak kelihatan dari stesen kerja, dan meneka tetapan proksi tidak akan mendedahkannya. Jika hos menyelesaikan dan emulator disekat tanpa mengira tetapan penyelesai, eskalasi yang betul ialah kepada pasukan yang memiliki dasar klien.
Urutan pemeriksaan dan maksud setiap hasil
Bekerja dari atas ke bawah dan berhenti pada baris pertama yang gagal. Setiap hasil menunjuk pemilik berbeza, dan tiada satu pun diperbaiki dengan memasang semula 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 |
Hanya dua baris terakhir ialah soalan VPN dalam erti biasa, dan hanya yang terakhir tentang kandungan DNS. Dokumentasi adb merangkumi port pelayan dan pemboleh ubah persekitaran yang disebut di sini, cukup untuk memastikan sisi pengangkutan jujur semasa anda menguji selebihnya.