Quan l’emulador no arriba a un servidor de compilació que el navegador de l’amfitrió obre sense problemes, la pregunta útil no és si el VPN funciona. És quin dels dos mecanismes falta al convidat. El dispositiu virtual executa la seva pròpia pila de xarxa darrere el NAT de l’emulador, i la seva llista de resolutors és una còpia presa en arrencar, així que un túnel que puja després canvia el camí de l’amfitrió sense canviar què demana el convidat. Entendre aquestes dues capes explica gairebé totes les variants d’aquest problema.

El convidat és una pila separada darrere un NAT fix

La xarxa QEMU en mode usuari posa el convidat a 10.0.2.15, la porta d’enllaç a 10.0.2.2 i el servei DNS a 10.0.2.3 fins a 10.0.2.6. El trànsit sortint del convidat no el reenvia el nucli de l’amfitrió; es tradueix en sòcols del costat de l’amfitrió, un per connexió del convidat, i aquests sòcols surten de l’espai d’adreces de l’amfitrió. Per això una connexió del convidat hereta la decisió d’encaminament de l’amfitrió en el moment de crear-se, i per això el convidat no té cap entrada a la taula d’encaminament que anomeni el vostre túnel.

El mateix mecanisme dona al convidat una sortida útil. 10.0.2.2 és un àlies de la interfície de bucle local de l’amfitrió, així que un servei que escolta a 127.0.0.1 a l’ordinador portàtil és abastable des del convidat en aquesta adreça. Tot el que el client exposa només al bucle local es pot abastar així, i aquesta és la base del muntatge de servidor intermedi descrit més avall.

El que el convidat no pot fer és observar la xarxa de l’amfitrió com si fos un espai de noms seu. No hi ha pont, ni taula d’encaminament compartida, ni resolutor heretat; només el servei NAT que accepta els seus paquets i la instantània que el llançador va prendre quan va arrencar el dispositiu virtual.

El DNS és una instantània, no una vista en directe

En arrencar, l’emulador llegeix la llista de resolutors de l’amfitrió i dona al convidat fins a quatre servidors, exposats a les adreces 10.0.2.3 a 10.0.2.6. Si el túnel estava aturat en aquell moment, la instantània conté qualsevol resolutor públic que fes servir el portàtil, i el convidat el continua demanant tota la vida. Els noms públics es resolen, els interns fallen, i cada símptoma apunta al VPN quan el valor obsolet real és una llista de resolutors capturada minuts abans que pugés el túnel.

Per tant, la correcció per ordre no és folklore. Connecteu primer el túnel, reinicieu després l’emulador i preferiu una arrencada freda a restaurar una instantània, perquè una imatge d’arrencada ràpida pot tornar amb l’estat de resolutor i d’encaminament que va desar abans. Si necessiteu veure què fa servir el convidat ara, pregunteu al dispositiu i no a l’amfitrió:

adb shell dumpsys connectivity | grep -i -A2 dns
adb shell ping -c 1 build.internal.example

L’emulador també accepta un resolutor explícit en arrencar, cosa útil quan sabeu exactament quin servidor ha de fer servir el convidat i perillosa quan aquest servidor és públic:

emulator -avd Pixel_API_34 -dns-server 203.0.113.53

Un resolutor públic no té cap còpia d’una zona interna, així que fixar-ne un converteix un problema d’ordre en un fracàs permanent. Si el perfil empeny DNS privat, deixeu que el túnel el proporcioni i feu una arrencada freda del convidat en lloc de codificar una adreça.

L’encaminament segueix l’amfitrió en el moment de la connexió

Com que les connexions del convidat esdevenen sòcols de l’amfitrió, la decisió d’encaminament es pren en crear el sòcol. Un túnel aixecat abans de la petició fa que la petició surti pel túnel segons les rutes del perfil. Un perfil de túnel dividit que només porta prefixos seleccionats deixarà la vostra subxarxa privada fora, així que l’abastabilitat de l’amfitrió és una hipòtesi sobre el convidat, no un resultat. Les connexions existents del convidat conserven el camí amb què es van crear, i per això un client que reconnecta no sempre arregla una baixada encallada dins de l’emulador.

La verificació va a la interfície de l’amfitrió, no a les estadístiques del convidat:

sudo tcpdump -ni tun0 'host 203.0.113.10'

Si la petició del convidat apareix a la interfície del túnel, l’encaminament funciona i el problema és per sobre. Si apareix a la interfície física, el perfil no cobreix aquell prefix, i cap reconfiguració al costat del convidat ho canviarà.

Quan el client només ofereix un servidor intermedi de bucle local

Alguns clients comercials no creen cap túnel de sistema. Expolen un oïdor HTTP o SOCKS a 127.0.0.1 i esperen que les aplicacions el facin servir. El convidat no pot veure aquest sòcol directament, però es pot dir a l’emulador que el faci servir, ja sigui pels controls ampliats (Configuració, després Servidor intermedi, mode manual, amfitrió 127.0.0.1 i el port que imprimeix el client) o en arrencar:

emulator -avd Pixel_API_34 -http-proxy http://127.0.0.1:8080

Copieu el port de la finestra del client; un port endevinat falla en silenci i sembla un túnel trencat. Tingueu present què cobreix això: la configuració de servidor intermedi HTTP l’honoren les aplicacions que el reconeixen, i els sòcols crus l’ignoren del tot. Si la càrrega és un binari natiu que obre les seves pròpies connexions, el camí del servidor intermedi no equival a un túnel i la comparació s’ha de fer explícitament.

Proveu el resultat des de dins del convidat

Separeu la resolució de l’encaminament amb dues proves a la mateixa sessió. Un nom que falla mentre l’adreça numèrica respon és un problema d’instantània de DNS, i la solució és l’ordre o un resolutor explícit. Si fallen tots dos, apunta a encaminament o política, i la propera comprovació és si l’aplicació s’executa en un perfil de treball amb restriccions de xarxa pròpies.

Finalment, sapigueu en quin convidat proveu. Imatges molt antigues de l’emulador es van distribuir sense el suport tun que necessita un client VPN al costat del convidat, així que cap perfil hi podia funcionar; les imatges actuals l’inclouen. Un client que falla en una imatge actual és un problema de client o de perfil, i reconstruir el túnel de l’amfitrió no canviarà el resultat.

Articles relacionats