Me ya sa Android VpnService ke kama wasu zirga-zirga ba duka ba
Hanyoyi, shigarwar DNS da iyakar kowace manhaja suna ƙayyade waɗanne fakiti ke isa na'urar tun, me ya sa na'urorin gida ke ɓacewa, da abin da maginin ke ƙi.
Babu wani abu a cikin VpnService da ke kama zirga-zirga da kansa. Yana neman tsarin ya ba shi mu'amalar tun, yana ba wannan mu'amalar tarin adireshi da hanyoyi, kuma daga wannan lokacin kernel yana kwafin kowane fakiti da ya dace da waɗannan hanyoyi cikin mai bayyana fayil da manhajar za ta iya karantawa. Lambar manhajar ba ta taɓa ganin fakitan da hanyoyin ba su zaɓa ba, don haka iyakar rami tambaya ce ta teburin turawa kafin ta zama tambaya ta shirye-shirye. Shi ya sa wannan aiwatarwar sabis ɗaya za ta iya haɗiye kowane kwarara a waya ɗaya kuma kaɗan kawai a wata, kuma shi ya sa ƙara hanya wani lokaci yana gyara ramin da ya yi kama da karyayye. Abin da ka samu shi ne abin da ka bayyana, ban da duk abin da maginin ya ƙi a rufe.
Hanyoyi suna ƙayyade waɗanne fakiti ke zuwa
Builder.addRoute(prefix, prefixLength) yana saka prefix cikin teburin turawa na cibiyar sadarwar VPN. Tsarin yana ɗaukar wannan cibiyar a matsayin ta asali ga manhajojin da ke cikin iyaka, don haka ana duba shigarwarta kafin hanyar asali ta cibiyar sadarwar zahiri kuma prefix mai dacewa ya isa ya karkatar da kwarara. Don haka hanya ta 0.0.0.0/0 tana ɗaukar IPv4 gaba ɗaya, har da firinta, makasudin cast da shafin gudanarwa na na'urar sadarwa.
Abokan ciniki da suke son wannan rufin ba tare da share shigarwar asali ta zahiri ba suna amfani da ma'auratan 0.0.0.0/1 da 128.0.0.0/1 maimakon haka. Hanyoyi biyu da suka fi ƙayyatu suna cin hanyar asali, tare suna rufe dukan filin adireshi, kuma shigarwar asali ta wayar kanta tana zama a teburin ga ƙwanƙolin da har yanzu ke daure da cibiyar sadarwar zahiri.
Adireshi da shigarwar DNS suna zuwa daga magini ɗaya kuma suna amsa wata tambaya dabam. addAddress yana ba mu'amalar adireshi mai tsawon prefix, kuma addDnsServer yana saka mai warwarewa wanda manhajojin cikin iyaka za su tambaya ta hanyar mu'amar. Dukansu iyalai biyu na iya zama a kan mu'amala ɗaya, don haka tarin hanyoyin IPv4 kawai kusa da adireshin IPv6 tsari ne da ke karantawa daidai kuma har yanzu yana ɓoyewa. Idan ka tura wani iyali da mu'amar ba ta da adireshi a ciki, kernel ba shi da adireshin asali ga waɗannan fakitan kuma ba sa taɓa bayyana a mai bayyanawa.
Abin da establish() ke mayarwa
establish() yana mayar da ParcelFileDescriptor, ko null lokacin da manhajar ba ta da izini. Null yanayin yarjejeniya ne ba kuskuren cibiyar sadarwa ba: dole VpnService.prepare() ya riga ya mayar da null, ko kuma mai amfani ya amince da maganar tsarin kafin kiran. Ana iya soke yarjejeniya yayin da sabis ɗin ke gudana, kuma mu'amar tana rufe a ƙarƙashinka ba tare da wani kira na dawowa cikin madaukin karatunka ba.
Mai bayyanawa ba ya toshewa sai ka faɗi akasin haka, don haka karatu yana dawowa nan take ba tare da bayanai ba maimakon ya ajiye zaren. Madauki da aka rubuta don ƙwanƙoli mai toshewa yana ƙone core ɗaya, kuma madauki da ke ɗaukar karatu mara komai a matsayin mai mutuwa yana yayyaga ramin cikin daƙiƙa marar aiki. Builder.setBlocking(true) yana canza wannan ɗabi'a, kuma farashin shine zaren da ke jira cikin karatun.
Ana tabbatar da gardamar hanya da adireshi a matsayin ƙimar LinkAddress, kuma ana ƙi maƙasudin multicast kamar 224.0.0.0/4 kai tsaye. Mu'amar tun ta tsaye-zuwa-tsaye ma ba ta da yankin watsawa, don haka gano multicast ta cikinta yana buƙatar wani tsari dabam maimakon ƙarin hanya guda. Littafin VpnService.Builder shine jerin da za a duba kafin ka yanke shawarar cewa an yi watsi da kira.
Iyakar kowace manhaja tana taƙaita tarin, ba ramin ba
Daga API 21 maginin yana karɓar addAllowedApplication da addDisallowedApplication, kuma jerin biyu suna cin karo da juna cikin magini ɗaya. Jerin izini yana sa ramin ya kasance ga waɗannan fakitan yayin da duk sauran ke riƙe cibiyar sadarwar zahiri; jerin hani yana kama komai ban da fakitan da aka ambata, abin da abokin ciniki ke bayarwa a matsayin raba rami. Kafin API 21 babu wata hanyar dandali kwata-kwata, kuma ɗabi'ar kowace manhaja ta zo daga abokan ciniki na ɓangare na uku waɗanda ke tacewa da UID cikin mai tura nasu. Bambancin yana da muhimmanci lokacin gyara kuskure, domin ramin kowace manhaja da jerin izini na fakiti ɗaya kusan ba ya samar da zirga-zirga kuma wannan daidaitaccen ɗabi'a ne, ba karyayyen hanya ba.
Ko iyakar mecece, ƙwanƙolin da manhajarka ke buɗewa zuwa uwar garken VPN ba dole ya bi ta ramin da yake ginawa ba. VpnService.protect(socket) yana daure wannan ƙwanƙoli da cibiyar sadarwar da ke ƙasa domin fakitan sa su tsallake na'urar tun. Idan ka tsallake kiran, mu'amar da ya kamata ta ɗaga musafaha tana haɗiye musafahar.
VpnService.setUnderlyingNetworks yana rufe da'irar ta hanyar gaya wa tsarin wace cibiyar sadarwa ce ke ɗaukar ramin. Wannan ƙimar tana ƙayyade yadda VPN ke ba da rahoton haɗi ga sauran manhajoji, kuma null ko tsohuwar ƙima sanannen sanadi ne na ramin da aka haɗa wanda sauran wayar ke ɗauka a matsayin ba ta kan layi. Sabunta shi idan cibiyar sadarwar da ke ƙasa ta canza, ba kawai a lokacin farawa ba.
Jimlar dubawa da MTU: inda madaidaitan hanya har yanzu ke kasawa
Da zarar fakiti sun zo, cikakkun bayanai biyu a matakin fakiti suna ƙayyade ko wani abu yana aiki daga ƙarshe zuwa ƙarshe. Na farko shine adireshin asali: da yawa adireshin mu'amala kernel na iya aika fakitan da ke ɗauke da na farko, don haka mai tura da ke sake rubuta kanun dole ya gyara adireshin da jimlar dubawar da ke rufe shi.
Na biyu shine iyakar jimlar dubawa. Lokacin da manhajar ke gina fakitan TCP ko UDP da kanta, jimlar dubawa tana rufe pseudo-kanun da ke ɗauke da adireshin asali, adireshin manufa, lambar yarjejeniya da tsawon jigila, kuma barin ɗaya daga cikinsu yana ba da fakitan da suke zuwa a jefar da su. Wannan gazawar tana kama da ƙarewar lokaci bayan amsar da ba ta taɓa zuwa ba, abin da ke mayar da yawancin mutane zuwa hanyoyin. setMtu yana ƙayyade MTU na mu'amala, kuma kowane karatu yana mayar da fakiti IP cikakke ɗaya daidai, don haka buffer da aka rubuta don kwararar baiti zai gutsure nazarinka ba fakiti ba.
Ziyarar tabbatarwa da ke raba matakan
Domin gano inda iyakar ta yi kuskure, gwada matakan a jere. Tambayi na'urar waɗanne hanyoyi ne cibiyar sadarwar VPN ke riƙe da gaske, sannan duba ko kwarara zuwa sanannen adireshi tana bayyana a matsayin karatu a mai bayyanawa, sannan duba ko fakitin da mai turanka ke aikawa yana da tsari mai kyau. Matsalar hanya ba ta nuna komai a mai bayyanawa, yayin da matsalar jimlar dubawa tana nuna fakitin da ke zuwa ya ɓace.
Idan babu abin da ya isa mai bayyanawa, tarin hanyoyi ne ake zargi ba mai karatu ba: tabbatar da prefix ɗin, tabbatar da akwai adireshi a cikin iyali ɗaya, kuma tabbatar manhajar tana cikin iyakar da ka saita. Idan fakiti sun isa mai bayyanawa amma babu abin da ke dawowa, duba protect() da ƙimar cibiyar sadarwar da ke ƙasa kafin ka sake taɓa hanya. Idan gefen nesa yana ba da rahoton ɓatattun fakiti, jimlar dubawa da MTU su ne wuraren da za a duba. Bincike ɗaya a kowane mataki yana ceton yini ɗaya na hasashe.