ADB і эмулятар Android не працуюць за VPN: тры шляхі
Выяўленне ADB, віртуальная сеткавая карта эмулятара і рэзалвер хаста збайваюць паасобку за VPN. Правярайце кожны шлях па чарзе, перш чым вінаваціць тунель.
Вы падключаеце офісны VPN, і Android Studio губляе запушчаны эмулятар, adb start-server завісае, а фізічны тэлефон па Wi-Fi знікае са спісу прылад. Выглядае, што адзін прадукт блакуе адзін тунель. На практыцы тры асобныя шляхі збайваюць па-рознаму: выяўленне прылад adb, віртуальная сетка эмулятара і рэзалвер хаста. Тунель звычайна валодае толькі апошнім, і часта толькі яго часткай.
Тры сокеты, тры ўласнікі
Сервер adb слухае порт 5037 на хасте і размаўляе з прыладамі праз USB або TCP, а для сеткавага выяўлення выкарыстоўвае mDNS. Эмулятар працуе за ўласным віртуальным маршрутызатарам: госць 10.0.2.15, шлюз 10.0.2.2 і DNS-сервер 10.0.2.3, і ўсё гэта працэс эмулятара пераводзіць у сокеты хаста. Рэзалвер хаста — гэта месца, дзе кліент VPN усталёўвае DNS і пошукавыя дамены.
Гэтае размежаванне тлумачыць, чаму выпраўленне працуе для аднаго інструмента і не працуе для іншага. Кліент, які змяняе рэзалвер хаста, пакідае запушчаны працэс эмулятара з тым станам рэзалвера, які ён прачытаў пры запуску. Кліент, які фільтруе multicast, ламае выяўленне, не кранаючы DNS. Кліент, які фільтруе віртуальныя адаптары, адмаўляе эмулятару, пакуль браўзер хаста працягвае працаваць. Кожны сімптом мае сваю прычыну, таму вызначце шлях, які збайвае, перш чым змяняць налады.
Пачніце з таго, што бачыць adb
Запусціце adb devices перш чым кранаць VPN. Пусты спіс — гэта праблема транспарту, а не маршрутызацыі, і ніякая налада тунеля не выправіць прыладу, якую сервер так і не пералічыў. Перазапусціце сервер чыста: спачатку adb kill-server затым adb start-server, і прачытайце вывад, каб даведацца, які порт ён заняў. Калі завісае сам запуск, звычайны падазраваны ў сетцы з фільтрацыяй multicast — выяўленне праз mDNS; дакументаваны абыход — запусціць сервер з адключаным выяўленнем:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesДля фізічнай прылады USB — самы кароткі шлях. Калі патрэбны TCP, перавядзіце прыладу ў рэжым праслухоўвання: adb tcpip 5555 і падключыцеся да адраса і порта прылады, adb connect 192.0.2.10:5555. Порт 5037 — гэта порт сервера хаста, а не порт, які слухае прылада.
Праверце эмулятар знутры
Эмулятар адказвае на DNS з 10.0.2.3, і гэты рэзалвер сілкуецца працэсам хаста. Калі кліент VPN змяняе рэзалвер хаста, эмулятар можа атрымаць яго ў спадчыну; калі кліент фільтруе працэс эмулятара або спіс адаптараў хаста змяніўся пасля запуску эмулятара, то не можа. Аддзяліце адно ад другога лікавай цэллю і імем з той жа абалонкі. adb shell ping -c 2 10.0.2.2 даказвае, што віртуальная сетка дасягае боку хаста. Пошук імені пасля гэтага пакажа, ці перасягнула развязанне мяжу.
Затым выканайце той жа пошук імені на хасте. Хаст развязвае, а эмулятар не — значыць разрыў паміж рэзалверам хаста і віртуальнай сеткай эмулятара, а не ў самім тунелі. Абодва збайваюць — значыць шукаць трэба рэзалвер хаста. Перазапуск эмулятара пасля падключэння VPN варты адной спробы, бо некаторыя кліенты ўсталёўваюць стан рэзалвера, які запушчаны працэс эмулятара не падхоплівае.
Праверце рэзалвер хаста і фільтры кліента
Кліент поўнага тунеля замяняе рэзалвер хаста сваім, а кліент split-DNS дадае пошукавыя дамены і ўмоўныя перанакіравальнікі. Унутраныя імёны часта залежаць ад гэтай налады split-DNS, таму паглядзіце, што выкарыстоўвае хаст падчас падключэння: адрас рэзалвера, пошукавы дамен і ці накіравана ўнутраная зона на карпаратыўны DNS. Рэзалвер, які адказвае на публічныя імёны, але не на ўнутраныя, — гэта пытанне палітыкі, а не зламаны тунель.
Некаторыя карпаратыўныя кліенты таксама блокуюць трафік з віртуальных адаптараў. Для драйвера фільтрацыі эмулятар выглядае як віртуальны адаптар, таму хаст можа працаваць бездакорна, пакуль эмулятару адмаўляе палітыка. Гэтая палітыка не бачная з працоўнай станцыі, і здагадкі пра налады проксі яе не выявяць. Калі хаст развязвае, а эмулятар заблакаваны незалежна ад налад рэзалвера, правільнае эскалаванне — да каманды, якая валодае палітыкай кліента.
Парадак праверак і што азначае кожны вынік
Ідзіце зверху ўніз і спыняйцеся на першым радку, які збайвае. Кожны вынік паказвае на іншага ўласніка, і ніводзін не выпраўляецца пераўсталёўкай 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 |
Толькі апошнія два радкі — пытанні VPN у звычайным сэнсе, і толькі апошні пра змест DNS. Дакументацыя adb ахоплівае порт сервера і згаданыя тут зменныя асяроддзя, чаго дастаткова, каб трымаць бок транспарту сумленным, пакуль вы правяраеце астатняе.