Waxaad telefoonka ku heshaa qaybin Linux ah oo chroot hoos ku shaqeynaya, waxaad ku dhex dhigtaa macmiil VPN ah, oo shell-ku wuxuu ku dhawaaqaa in tunnelku dhammaaday. Kadib waxaad u gudubtaa browser-ka oo taraafikadu waxay uga baxdaa xogta mobaylka sidii waxba ma dhacine. Ama taa lidkeeda: app kasta oo telefoonka ku jira wuu lumiyaa xiriirka sababtoo ah macmiilku wuxuu dhigay waddo caadi ah namespace-ka Android-ku dhab ahaan isticmaalo. Labada calaamadood waxay ka yimaadaan isla qaybta maqan, mana aha midkood khalad ku jira macmiilka VPN.

Shell-ku wuxuu leeyahay waa xiran yahay, apps-yadu way isku raacsanayn

Natiijada koowaad waa tii caadiga ahayd. Tunnel ku jira meel isticmaale oo laga furay chroot wuxuu dhammayn karaa gacan-qabsashadiisa, daabici karaa tirakoobkiisa oo qaadi karaa taraafikada ay isla shell-ku soo saarto, halka apps-yada Android-ku ay sii wadaan isticmaalka shabakada caadiga ah ee telefoonka. Waxba ma joojinayaa iyaga, sababtoo ah waxba ma u sheegin Android in VPN jiro.

Natiijada labaad waa tii khatarta ahayd. Haddii chroot la wadaago namespace-ka shabakada Android, taas oo ay caadi ahaan sameyso, geedi socod leh awood ku filan wuxuu ku dari karaa waddooyin iyo interface TUN oo saameeya telefoonka oo dhan. Markaas tunnelku wuu u shaqeeyaa app kasta, oo ay ku jiraan kuwa aadan qorsheyn inaad mariso, xiriirka telefoonkana hadda wuxuu ku tiirsan yahay daemon aan lahayn maareynta wareegga nolosha, tilmaame xiriir iyo siyaasad had iyo jeer shaqeynaysa.

Midka labadaad heshay waxaa lagu go'aamin karaa hal amar. Isbarbardhig ip route gudaha chroot iyo isla amarkaas oo laga qaado shell Android oo dibadda ah. Natiijo isku mid ah waxay ka dhigan tahay chroot wuxuu ku jiraa namespace-ka martigeliyaha: isbeddel kasta oo shabakadeed oo uu sameeyo wuxuu saameeyaa telefoonka oo dhan. Natiijo kala duwan waxay ka dhigan tahay bilaabuhu wuxuu u abuuray namespace, tunnelkiisuna Android wuu u qarsoon yahay si dabiici ah.

Waxa chroot beddelay iyo waxa aanu beddelin

ObjectEffect of a chroot
Pathname resolutionChanged: lookups start at the new root
Kernel and driversUnchanged: the phone's kernel, its TUN driver, its limits
Network namespaceUnchanged unless the launcher creates one
Android VPN registrationUnchanged: no app consented, no VPN is selected

Wicitaanka nidaamka chroot wuxuu sameeyaa hal shay: wuxuu beddelaa galka loo isticmaalo xallinta magacyada waddooyinka. Bogga man wuxuu si cad u sheegayaa in aanu ahayn xad ammaan, waxbana ma sheegayo interface-yada, waddooyinka ama xaaladda VPN. Wax kasta oo dadku ka filaan Linux container — stack shabakadeed gaar ah, nidaam faylal la sifeeyay, xadka kheyraadka — waxay ka yimaadaan habab kale oo laga yaabo inuu bilaabuhu isticmaalay ama aanu isticmaalin.

Taasi waa sababta sheegashooyinka ah in chroot u go'doomiyo VPN ay caadi ahaan ka jawaabaan su'aal khaldan. Su'aasha habboon waa namespace-ka geeddi-socodku ku shaqeeyo iyo domain-ka SELinux uu ku xaddidan yahay, labaduna waa astaamaha sida loo bilaabay, ma aha erayga chroot.

TUN wuxuu u baahan yahay saddex shay, qanjirka qalabka waa mid keliya

Tunnel caadi ah oo meel isticmaale wuxuu u baahan yahay qalab TUN uu furi karo, taageero kernel oo qalabkaas ah, iyo fasax uu ku habeyn karo interface-ka iyo waddooyinka. Kuwani waa shuruudo gooni ah, abuurista magac waddo oo hoos yimaada /dev kaligeed ma buuxiso midkoodna:

ls -l /dev/net/tun
ip tuntap add dev tun0 mode tun

Android kernel-ku caadi ahaan wuxuu leeyahay taageero TUN oo la isku daray, sababtoo ah adeegga VPN ee madal laftiisu wuu isticmaalaa, laakiin taasi macnaheedu ma aha in geeddi-socodkaagu isticmaali karo. Habeynta interface-ka waxay u baahan tahay awood maamulka shabakada, SELinux-na wuxuu go'aamiyaa in geeddi-socodku gaari karo qanjirka qalabka. Diidmadu waxay u egtahay khalad fasax oo aan sabab cad lahayn, jawaabtuna waxay ku jirtaa raadraaca hantida:

dmesg | grep avc
logcat -d | grep "avc: denied"

Root ma xalliyo tan. SELinux wuxuu xaddidaa geeddi-socodyada ku shaqeeya uid 0 si la mid ah kuwa kale, sidaas darteed chroot laga bilaabay shell root weli waa laga diidi karaa qalab uu arko. Daminta fulinta si bareeg hore u shaqeeyo waa go'aan telefoonka oo dhan lehna cawaaqib aad uga fog tunnelka, mana aha hagaajin binary duugoobay.

Sababta apps-yada Android u ignoreeyaan tunnelkaaga

Muuqaalka Android taageerto waa app VPN oo iska diiwaangeliya adeegga VPN ee madal, hal mar waydiista ogolaanshaha isticmaalaha oo hesha descriptor fayl oo tunnelkeeda ah. Kadib madalku wuxuu taraafikada u jiheeyaa descriptor-kaas oo fuliya baaxadda apps-ka uu isticmaalaha ama maamuluhu doortay, taasina waa sababta isla hannaankaas u noqon karo mid app kasta, profile kasta oo lagu daro dejinta had iyo jeer shaqeynaysa iyo xannibaadda bilaa VPN. Hagaha horumarinta VPN ee Android wuxuu sharraxayaa gacan-qabsashadaas, qodobka muhiimka ahuna waa in ay tahay diiwaangelin, ma aha khiyaano waddo-maris.

Daemon ku jira chroot marnaba ma iska diiwaangeliyo. Ma jiro wada-hadal ogolaansho, ma jiro calaamad fure oo ku jirta bar-taagan, ma jiro liis lagu daro ama laga saaro app kasta, oo ma jiro ka-qaybgal siyaasadda had iyo jeer shaqeynaysa. Sidaas darteed apps-yadu waxay sii wadaan isticmaalka shabakada caadiga ah, tunnelkuna wuxuu qaadaa oo keliya waxa shell-ku laftiisu diro.

U socodka dhinaca kale sidoo kale ma caawiyo. Waddooyinka ku riixidda namespace-ka martigeliyaha waxay qabataa wax walba, oo ay ku jiraan taraafikada madalku filayay inuu gudaha sii ahaado, taasna waxay ku sameysaa iyada oo aan lahayn kontorool app kasta iyo iyada oo aan isticmaalaha u suurtagelin inuu arko ama buriyo. Ma jiro dejinta dhexdhexaad ah oo daemon chroot u mariso taraafikada hal app oo keliya.

Isku-duubnaanta binary waa derbi gooni ah

Xitaa marka dhinaca shabakadu xiiso leh yahay, faylka la fulin karo wuxuu leeyahay shuruudo u gaar ah: dhismaha CPU, loader dynamic, maktabadda C, iyo tas-hiilaadka kernel ee uu filayo. Android wuxuu isticmaalaa bionic halkii glibc, bareeg hore oo loo dhisay qaybinta desktop waxaa laga yaabaa inuu u baahdo maktabado aan hadda qalabka ku jirin.

Ku xirista magaca faylka maktabadda si calaamadeed nooc cusub ma abuurto isku-duubnaan ABI, maktabadda cryptographic oo laga kaydiyay xidhmo toban sano jir ah ma aha qayb la ilaaliyo. Haddii qorshuhu taas ku tiirsan yahay, qorshuhu waa in lagu wado kood aan la ilaalin oo leh awood shabakadeed telefoonka.

Ku caddee macnaha Android oo nadiifi kadib

Tijaabi waxa dhab ahaan kuu muhiim ah, dhinaca muhiimka ah: fur appka gaar ah, gaar yoolka gaarka ah ee qarsoodiga ah, xaqiiji yaa resolver ah oo jawaabay, kadib jar tunnelka oo xaqiiji habdhaqanka la diiwaangeliyay. Natiijo ka timaadda terminal ku jira chroot waa caddayn ku saabsan macnaha fulinta terminalkaas oo aan wax dheeraad ah ahayn.

Haddii aad beddeshay waddooyinka martigeliyaha intaad tijaabinayso, soo celi oo qor waxaad beddeshay. Kadib hubi in telefoonku leeyahay VPN had iyo jeer shaqeynaya oo la habeeyay, sababtoo ah tijaabo hore oo xeer ka tagtay ayaa u ekaan karta cilad madal bilo kadib.

Baahida dhabta ah ee gelitaanka fog, isticmaal macmiilka la taageeray ee adeegga ama naqshad gateway la ansixiyay. Su'aasha istaahilta in la weydiiyo ma aha in bareeg root leh la shaqeyn karo, laakiin in fulinta la taageeray ay ka gudubto xadka aad ujeedday apps-ka aad u baahan tahay, iyada oo aan qalabka kaga tegin isbeddello mudnaan leh oo aan mulkiile lahayn.

Maqaallo la xiriira