L-emulatur Android u l-VPN tal-host: Snapshot tad-DNS u NAT
Il-guest joqgħod wara n-NAT tal-emulatur u jżomm il-lista tad-DNS ikkupjata waqt il-boot. Qabbad it-tunnel qabel il-boot, imbagħad ittestja r-riżoluzzjoni minn ġewwa l-guest.
Meta l-emulatur ma jirnexxilux jilħaq server tal-build li l-browser tal-host jiftaħ mingħajr problema, il-mistoqsija utli mhijiex jekk il-VPN taħdimx. Il-mistoqsija hija liema mill-mekkaniżmi tnejn jonqos lill-guest. Il-mezz virtwali jħaddem l-istack tan-netwerk tiegħu stess wara n-NAT tal-emulatur, u il-lista tar-resolver tiegħu hija kopja meħuda waqt il-boot, għalhekk tunnel li jiġi wara jbiddel il-mogħdija tal-host mingħajr ma jbiddel dak li jistaqsi l-guest. Li tifhem dawn iż-żewġ saffi jispjega kważi kull varjant ta' dan il-problema.
Il-guest huwa stack separat wara NAT fiss
In-netwerk tal-mode tal-utent ta' QEMU iqiegħed il-guest fuq 10.0.2.15 b'gateway fuq 10.0.2.2, u s-servizz DNS fuq 10.0.2.3 sa 10.0.2.6. It-traffiku li joħroġ mill-guest mhuwiex mgħoddi mill-kernel tal-host; huwa tradott fi sockets fuq in-naħa tal-host, wieħed għal kull konnessjoni tal-guest, u dawk is-sockets joħorġu mill-ispazju tal-indirizzi tal-host. Għalhekk konnessjoni tal-guest tirret il-deċiżjoni tar-routing tal-host fil-mument li tinħoloq, u għalhekk il-guest m'għandux entrata fit-tabella tal-mogħdijiet li ssemmi t-tunnel tiegħek.
L-istess mekkaniżmu jagħti lill-guest ħarġa utli. 10.0.2.2 huwa alias għall-interfaċċa loopback tal-host, għalhekk servizz li jisma' fuq 127.0.0.1 fuq il-laptop jintlaħaq mill-guest f'dak l-indirizz. Kull ma l-klijent jesponi biss fuq il-loopback jintlaħaq b'dan il-mod, u din hija l-bażi tal-arranġament tal-proxy deskritt hawn taħt.
Dak li l-guest ma jistax jagħmel hu li josserva n-netwerk tal-host bħallikieku kien namespace tiegħu. M'hemm l-ebda bridge, l-ebda tabella tal-mogħdijiet kondiviża u l-ebda resolver ereditat; hemm biss is-servizz NAT li jaċċetta l-pakketti tiegħu u s-snapshot li ħa l-lancaster meta beda l-mezz virtwali.
Id-DNS huwa snapshot, mhux veduta ħajja
Fil-bidu l-emulatur jaqra l-lista tar-resolver tal-host u jagħti lill-guest sa erba' servers, esposti fl-indirizzi 10.0.2.3 sa 10.0.2.6. Jekk it-tunnel kien niżel f'dak il-mument, is-snapshot fih ir-resolver pubbliku li uża l-laptop, u l-guest jibqa' jistaqsih għall-ħajja kollha tiegħu. L-ismijiet pubbliċi jiġu riżolti, l-ismijiet interni jonqsu, u kull sintomu jindika lejn il-VPN waqt li l-valur antik veru hija lista tar-resolver meħuda ftit minuti qabel ma tela' t-tunnel.
Għalhekk il-korrezzjoni tal-ordni mhijiex folklor. Qabbad it-tunnel l-ewwel, imbagħad erġa' ibda l-emulatur, u ppreferi cold boot mill-irkupru ta' snapshot, għax immaġni quick-boot tista' tirritorna bl-istat tar-resolver u tal-mogħdijiet li salvata qabel. Jekk trid tara x'qed juża l-guest bħalissa, staqsi lill-apparat, mhux lill-host:
adb shell dumpsys connectivity | grep -i -A2 dns
adb shell ping -c 1 build.internal.exampleL-emulatur jaċċetta wkoll resolver espliċitu waqt it-tnedija, li huwa utli meta tkun taf eżatt liema server għandu juża l-guest u perikoluż meta dak is-server ikun pubbliku:
emulator -avd Pixel_API_34 -dns-server 203.0.113.53Resolver pubbliku m'għandux kopja ta' żona interna, għalhekk li tippinna wieħed ibiddel problema tal-ordni fi ħsara permanenti. Jekk il-profil jimbutta DNS privat, ħalli t-tunnel jipprovdih u cold boot il-guest minflok ma tittastja indirizz.
Ir-routing isegwi lill-host fil-ħin tal-konnessjoni
Peress li l-konnessjonijiet tal-guest isiru sockets tal-host, id-deċiżjoni tar-routing tittieħed meta jinħoloq is-socket. Tunnel 'il fuq qabel it-talba jfisser li t-talba toħroġ mit-tunnel, suġġetta għall-mogħdijiet tal-profil. Profil split-tunnel li jġorr biss prefissi magħżula se jħalli s-subnet privat tiegħek barra bil-pjaċir, għalhekk il-kapaċità li jintlaħaq il-host hija ipoteżi dwar il-guest, mhux riżultat. Il-konnessjonijiet eżistenti tal-guest iżommu l-mogħdija li biha nħolqu, u għalhekk klijent li jerġa' jqabbad mhux dejjem isewwi tniżżil imblukkat fl-emulatur.
Il-verifika tappartjeni lill-interfaċċa tal-host, mhux lill-istatistika tal-guest:
sudo tcpdump -ni tun0 'host 203.0.113.10'Jekk it-talba tal-guest tidher fuq l-interfaċċa tat-tunnel, ir-routing qed jaħdem u l-problema hija fuqha. Jekk tidher fuq l-interfaċċa fiżika, il-profil ma jkoprix dak il-prefiss, u l-ebda konfigurazzjoni mill-ġdid fuq in-naħa tal-guest mhi se tibdilha.
Meta l-klijent joffri biss proxy tal-loopback
Xi klijenti kummerċjali ma joħolqux tunnel tas-sistema xejn. Huma jesponu listener HTTP jew SOCKS fuq 127.0.0.1 u jistennew li l-applikazzjonijiet jużawh. Il-guest ma jistax jara dak is-socket direttament, imma l-emulatur jista' jingħadlu jużah, jew permezz tal-kontrolli estiżi (Settings, imbagħad Proxy, modalità manwali, host 127.0.0.1 u l-port stampat mill-klijent) jew waqt it-tnedija:
emulator -avd Pixel_API_34 -http-proxy http://127.0.0.1:8080Ikkopja l-port mit-tieqa tal-klijent; port imbassar jonqos b'mod sieket u jidher bħal tunnel miksur. Żomm f'moħħok x'ikopri dan: is-setting tal-proxy HTTP jiġi rispettat mill-applikazzjonijiet li jafu bil-proxy, u s-sockets mhux maħduma jinjorawh għal kollox. Jekk ix-xogħol huwa native binary li jiftaħ il-konnessjonijiet tiegħu stess, il-mogħdija tal-proxy mhijiex ekwivalenti għal tunnel u t-tqabbil għandu jsir b'mod espliċitu.
Ipprova r-riżultat minn ġewwa l-guest
Issepara r-riżoluzzjoni mir-routing b'żewġ testijiet fl-istess sessjoni. Isem li jonqos waqt li l-indirizz numeriku jwieġeb hija problema ta' snapshot tad-DNS, u s-soluzzjoni hija l-ordni jew resolver espliċitu. It-tnejn jonqsu jindika routing jew politika, u l-kontroll li jmiss huwa jekk l-app taħdimx ġewwa work profile bil-limiti tan-netwerk tagħha stess.
Fl-aħħar, kun af liema guest qed tittestja. Immaġnijiet tal-emulatur antiki ħafna ħarġu mingħajr l-appoġġ tat-tun li jeħtieġ klijent tal-VPN fuq in-naħa tal-guest, għalhekk l-ebda profil ma seta' jaħdem hemm; l-immaġnijiet attwali jinkluduh. Klijent li jonqos fuq immaġni attwali hija problema tal-klijent jew tal-profil, u li terġa' tibni t-tunnel tal-host mhux se tbiddel ir-riżultat.