Tunnelka qaybsan ee Android VpnService: waxa dhab ahaan la marin karo
VpnService waxay u gudbisaa kaliya baakadaha uu builder ku ridayo tilmaameheeda. Hubi horudhacyada, xaqiijinta proxy, DNS iyo liisaska abka ka hor inta aanad eedayn tunnelka qaybsan.
Tunnelka qaybsan ee abka VpnService wuxuu ka jabaa dhowr meelood oo gaar ah, samaynta mid kastana way ka duwan tahay. Macmiilku wuxuu tusaa kaliya hal meel oo guuldareysatay, marka shaqada koowaad waa in la ogaado qaybtan aad ku dhacayso: wadooyinka uu builder helay, proxy-ga aadan xaqiijin karin, resolver-ka aad kaliya ku dhawaaqday, ama liiska abka ee madal u adeegsato isticmaale kasta. Taasi waa sababta aan u hayo hubin afar tallaabo ah. Waxay u socotaa sida hoos ku qoran oo waxay joogsataa guuldarada koowaad.
Xaqiiji waxa builder siiyay madasha
VpnService.Builder waa liis caddayn ah. establish() waxay soo celisaa ParcelFileDescriptor loogu talagalay interface-ka macmalka ah, madashuna waxay u dirtay tilmaamahaas kaliya taraafikada u dhigma horudhacyada addAddress iyo addRoute; addDnsServer waxay u sheegtaa macmiillada resolver-ka ay weydiiyaan. Meel ka baxsan dhammaan horudhacyada aad ku dartay weligeed ma gaarto abkaaga, wax kasta oo interface-ku ballan qaado. Xaqiiqadan kaliya waxay sharraxaysaa inta badan warbixinnada tunnelka qaybsan oo jaban ka hor inta aan code la beddelin.
Diiwaangeli liisaska cinwaanka, wadooyinka iyo DNS ee builder-kaagu ururiyay, kadibna barbar dhig kuwaas iyo meelaha guuldareysta. /32 maqan oo loogu talagalay martigeliyaha maamulka ayaa aad uga caadi ah tunnel jaban. Haddii liisku sax yahay, horay u soco; haddii uu khaldan yahay, inta kale ee liiska hubintu waa dadaal lumo.
excludeRoute wuxuu jiraa oo kaliya laga bilaabo API 33
Ka-saarista ku salaysan meesha loo socdo waa codsiga inta badan noqda dun xiriir taageero ah. builder.excludeRoute(IpPrefix) waxay timid API 33; ka hor intaas, qaabka kaliya ee la taageeray waa in lagu daro wadooyin wax kasta oo aan ahayn horudhaca la saaray, taas oo macnaheedu yahay inaad adigu xisaabiso horudhacyada buuxiya. Labada wicidood ma aha sawirro muraayad ah: mid waxay ka jartaa jaangooyada wadooyinka interface-ka, tan kalena waxay jaangooyada ka dhisaa eber, qalabka duuganna wuxuu tuurayaa ama si aamusan u dhex galaa wicid aanu aqoon. Laamo ku salaysan Build.VERSION.SDK_INT oo labada waddo ku tijaabi qalab dhab ah.
Markaad xisaabinayso buuxinta, u fiirso isku-toosnaanta horudhacyada. Ka-saarista /24 oo ku jirta waddo /16 waxay u baahan tahay horudhacyada daboolaya ee dhab ahaan sharraxaya inta hadhay, ma aha hal /8 oo qalloocan. Diiwaangeli liiska ugu dambeeya oo xaqiiji in martigeliyaha la saaray weli lagu xalliyo waddo ka baxsan tunnelka.
Aqoonsiga proxy-ga lama sheegi karo
setHttpProxy(ProxyInfo) waxay interface-ka u jeedisaa proxy HTTP ama SOCKS, URL-ka PAC-na wuxuu u kala dooran karaa labada meel kasta. ProxyInfo ama qaabka PAC midkoodna ma qaado magaca isticmaalaha iyo furaha sirta ah, sidaas darteed proxy-ga u baahan xaqiijin wuxuu ku harayaa banaanka API-ga madasha. Abka u baahan waxay caadi ahaan ku daraan stack-ka goobta isticmaalaha, tun2socks ama mishiin la mid ah, oo iyagu ka jawaabaan caqabadda 407.
Doorashadaas waxay leedahay cawaaqib. Stack-ka goobta isticmaalaha wuxuu arkaa kaliya taraafikada aad u jeediso, marka waa inuu ku noolaado isla xadka tilmaamaha, wuxuuna dhaxlaa isla shuruudda protect() ee socket-kiisa kore. Haddii aad ka tagto protect(), tunnelku wuxuu qabtaa gaadiidkiisa, taas oo u muuqata gacan-qaad idlaaday ka dib baakadda koowaad. Ku tijaabi proxy dalbanaya aqoonsi, maxaa yeelay proxy furan wuxuu maraa wadada madasha oo waxba ma caddeeyo.
Liisaska ab kasta iyo DNS sidoo kale waa caddayn
Builder waxay leedahay addAllowedApplication iyo addDisallowedApplication, oo midba midka kale wuu diidayaa: labadaba wiciddoodu waxay tuurtaa ka-reeb. Si kastaba ha ahaatee liiska waxaa lagu adeegsadaa isticmaale kasta marka interface-ka la dejinayo, marka abka profile-ka shaqada waxaa maamula tunnelka profile-ka shaqada ee ma aha kaaga. Waxa aan API na siinin waa xakamaynta go'aanka ab kale: kama riixin kartid baakad tunnelkaaga banaanka, lamana xiri kartid ama dib loo habayn karin VPN hore u firfircoon.
DNS waxay raacdaa isla qaabkaas. addDnsServer waxay ku dhawaaqdaa cinwaanka resolver; kama ogola abkaaga inuu ka jawaabo weydiimaha. Haddii aad rabto inaad adigu xalliso magacyada, socodsii resolver oo cinwaankiisa u jeedi tunnelka. Abka isticmaala DoT ama DoH oo u socda magac martigeliye go'an waxay dhaafi karaan cinwaanka aad ku dhawaaqday, marka u qaado xallinta magacyada dadaal ugu fiican ilaa aad sidoo kale joojiso wadada weydiinta.
Manifest, always-on iyo imtixaanka afar tallaabo
U-qalmitaanku waxa lagu caddeeyaa manifest-ka: BIND_VPN_SERVICE, shaandhada intent-ka android.net.VpnService iyo adeeg hore haddii tunnelku ku sii noolaado gadaal. Always-on VPN waxay sidoo kale u baahan tahay onRevoke nadiif ah, maxaa yeelay nidaamku wuxuu wacaa marka isticmaalahu beddelo dejinta ama ab kale xakamaynta qaato.
Ku socodsii hubinnada si kala horumar ah oo joogso guuldarada koowaad. Marka hore, soo saar liisaska cinwaanka, wadooyinka iyo DNS ee la siiyay builder. Marka labaad, xaqiiji in establish() soo celisay tilmaame iyo in socket-ka gaadiidka la ilaaliyay. Marka saddexaad, codso hal meel oo ku jirta horudhac lagu daray iyo mid ku jirta horudhac la saaray. Marka afraad, hubi resolver-ka dhab ahaan jawaabay adiga oo weydiiya magac martigeliye oo kaliya resolver-kaaga xallin karo.
Gacan-qaad dhammaystiran ma caddeeyo mid ka mid ah tallaabooyinka dambe. Hubin kastaa waxay go'doomisaa hal lakab, marka guusha tallaabada labaad waxba kama sheegto tan afraad.
Tixraaca VpnService.Builder wuxuu taxaa dhammaan dushiisa builder. Wax kasta oo aad uga baahan tahay wixii ka baxsan waa API kale, ab kale ama stack-kaaga goobta isticmaalaha, taasna waa go'aan naqshadeed ee ma aha cillad tunnel qaybsan.