ADB ja Android-emulaattori epäonnistuvat VPN:n takana: kolme polkua
ADB:n laitetunnistus, emulaattorin virtuaalinen verkkokortti ja isännän resolveri epäonnistuvat erikseen VPN:n takana. Testaa jokainen polku järjestyksessä ennen kuin syytät tunnelia.
Yhdistät toimiston VPN:hen ja Android Studio menettää käynnissä olevan emulaattorin, adb start-server jumiutuu ja Wi-Fi:ssä oleva fyysinen puhelin putoaa laiteluettelosta. Näyttää siltä kuin yksi tunneli estäisi yhtä tuotetta. Käytännössä kolme erillistä polkua epäonnistuu kolmella tavalla: adb:n laitetunnistus, emulaattorin virtuaaliverkko ja isännän resolveri. Tunneli omistaa yleensä vain viimeisen ja usein vain osan siitä.
Kolme socketia, kolme omistajaa
adb-palvelin kuuntelee isännän porttia 5037 ja puhuu laitteiden kanssa USB:n tai TCP:n kautta, verkkotunnistukseen se käyttää mDNS:ää. Emulaattori toimii oman virtuaalireitittimensä takana: vieras on 10.0.2.15, yhdyskäytävä 10.0.2.2 ja DNS-palvelin 10.0.2.3, ja emulaattoriprosessi kääntää kaiken isännän socketeiksi. Isännän resolveri on paikka, johon VPN-asiakas asentaa DNS:n ja hakudomainit.
Tämä erottelu selittää, miksi korjaus näyttää toimivan yhdelle työkalulle ja ei toiselle. Isännän resolverin vaihtava asiakas jättää käynnissä olevan emulaattoriprosessin sen resolveritilan kanssa, jonka se luki käynnistyksessä. Multicastia suodattava asiakas rikkoo tunnistuksen koskematta DNS:ään. Virtuaalisovittimia suodattava asiakas kieltää emulaattorin, kun isännän selain toimii edelleen. Jokaisella oireella on eri syy, joten tunnista epäonnistuva polku ennen minkään asetuksen muuttamista.
Aloita siitä, mitä adb näkee
Suorita adb devices ennen kuin kosket VPN:hen. Tyhjä luettelo on siirto-ongelma, ei reititysongelma, eikä mikään tunneliasetus korjaa laitetta, jota palvelin ei koskaan luetellut. Käynnistä palvelin puhtaasti uudelleen: ensin adb kill-server sitten adb start-server, ja lue tulosteesta, mihin porttiin se tarttui. Jos käynnistys itsessään jumittuu, mDNS-tunnistus on tavallinen epäilty verkossa, joka suodattaa multicastia; dokumentoitu kiertotie on käynnistää palvelin tunnistus pois päältä:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesFyysiselle laitteelle USB on lyhin polku. Jos tarvitset TCP:tä, aseta laite kuuntelutilaan komennolla adb tcpip 5555 ja yhdistä laitteen osoitteeseen ja porttiin, adb connect 192.0.2.10:5555. Portti 5037 on isännän palvelinportti, ei portti, jossa laite kuuntelee.
Testaa emulaattoria sisältä
Emulaattori vastaa DNS:ään osoitteesta 10.0.2.3, ja sitä resolveria ruokkii isännän prosessi. Kun VPN-asiakas vaihtaa isännän resolverin, emulaattori voi periä sen; kun asiakas suodattaa emulaattoriprosessin tai isännän sovitinluettelo muuttuu emulaattorin käynnistymisen jälkeen, se ei voi. Erottele ne numeerisella kohteella ja nimellä samasta shellistä. adb shell ping -c 2 10.0.2.2 todistaa, että virtuaaliverkko tavoittaa isännän puolen. Sen jälkeinen nimikysely kertoo, ylittikö ratkaisu rajan.
Aja sitten sama nimikysely isännällä. Isäntä ratkaisee ja emulaattori ei tarkoittaa, että katkos on isännän resolverin ja emulaattorin virtuaaliverkon välissä, ei tunnelissa. Molemmat epäonnistuvat tarkoittaa, että isännän resolveri on katsottava paikka. Emulaattorin uudelleenkäynnistys VPN:n yhdistämisen jälkeen on yhden yrityksen arvoinen, koska jotkin asiakkaat asentavat resolveritilan, jota käynnissä oleva emulaattoriprosessi ei nappaa.
Tarkista isännän resolveri ja asiakkaan suodattimet
Koko tunnelin asiakas korvaa isännän resolverin omallaan ja split-DNS-asiakas lisää hakudomainit ja ehdolliset edelleenlähettäjät. Sisäiset nimet riippuvat usein juuri tästä split-DNS-asetuksesta, joten katso, mitä isäntä käyttää yhdistettynä: resolverin osoite, hakudomain ja reititetäänkö sisäinen vyöhyke yrityksen DNS:ään. Resolveri, joka vastaa julkisiin mutta ei sisäisiin nimiin, on politiikkakysymys, ei rikki mennyt tunneli.
Jotkin yritysasiakkaat estävät myös virtuaalisovittimien liikenteen. Suodatinajurille emulaattori näyttää virtuaalisovittimelta, joten isäntä voi toimia moitteettomasti, kun politiikka kieltää emulaattorin. Tämä politiikka ei näy työasemalta, eikä proxyasetusten arvailu paljasta sitä. Jos isäntä ratkaisee ja emulaattori on estetty resolveriasetuksista riippumatta, oikea eskalointi on asiakaspolitiikan omistavalle tiimille.
Tarkistusten järjestys ja mitä kukin tulos tarkoittaa
Työskentele ylhäältä alas ja pysähdy ensimmäiseen epäonnistuvaan riviin. Jokainen tulos osoittaa eri omistajaan, eikä mikään korjaannu asentamalla Android Studio uudelleen.
| 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 |
Vain kaksi viimeistä riviä ovat VPN-kysymyksiä tavallisessa mielessä, ja vain viimeinen koskee DNS-sisältöä. adb-dokumentaatio kattaa palvelinportin ja tässä mainitut ympäristömuuttujat, mikä riittää pitämään siirtopuolen rehellisenä testatessasi muuta.