Me ya sa hanyar Android VpnService ta daina tura zirga-zirga
Imani huɗu game da VpnService da ke karyewa a aikin samarwa: rami ɗaya a lokaci, iyakar hanyoyi, jerin manhajoji da tsarin kashewa, tare da dubawa ga kowanne.
Zato huɗu game da Android VpnService sun cinye mini yawancin mako sau ɗaya, kuma babu ɗayansu da ya shafi ka'idar hanyar sadarwa. Manhajar ta ce an haɗa, gunkin maɓalli yana zaune a sandar matsayi, kuma zirga-zirgar tana fita ta hanyar da aka saba. Na ci gaba da ɗauka cewa ramin nawa ne har sai na dakatar da shi, cewa hanyoyin da na ƙara su ne hanyoyin da nake samu, kuma cewa kiran stopSelf zai saukar da mu'amala tare da shi. Sabis ɗin yana yin daidai yadda aka rubuta. Sashen da ya lalace shi ne tunanina.
Tatsuniya 1: ramin yana tsaye har sai ka dakatar da shi
Android yana riƙe da mu'amalar VPN ɗaya a lokaci. Kafa ta biyu kuma dandali ba ya saka ta a jere: yana kashe naka kuma yana kiran onRevoke() a sabis ɗinka. Idan lambar ka tana ruguza komai kawai lokacin danna maɓalli, karɓe mulki yana barin bayanin ma'auni da zaren karatu a baya, kuma farawa na gaba yana gadon duka biyun.
Bayanin VpnService ya bayyana sarai cewa prepare() yana mayar da null lokacin da manhajar tana da izini tuni, da Intent lokacin da mai amfani zai amince da shi. Wannan izinin yana isowa ne kawai idan ka isar da niyyar ta startActivityForResult(). Ka tsallake isar da ita kuma establish() yana mayar da null, wanda ake karantawa a matsayin gazawa shiru maimakon matsalar izini.
Always-on VPN yana ƙara mai shi wanda ba ka sarrafa shi. Tsarin na iya dawo da ramin bayan tashi ko bayan faɗuwa, kuma yana wuce manhajar VPN da mai amfani ya fara da hannu. Gina onRevoke() ta yadda zai rufe albarkatun da kashewar ka ta yau da kullum ke rufewa, kuma ka ɗauke shi a matsayin babbar hanyar tsayawa ba wai wani yanayi na gefe ba. Masu amfani suna canza manhajar VPN; lambar ka dole ta jimre da hakan.
Tatsuniya 2: addRoute yana kama daidai abin da ka jera
Hanyoyi ne ke yanke shawarar waɗanne fakiti ke isa bayanin ma'auninka, kuma kuskuren iyaka yana haifar da yanayin da ke fusata inda wani ɓangare na zirga-zirga ke bi ta rami wani kuma ba ya bi. addRoute("0.0.0.0", 0) yana ɗaukar dukan IPv4, wato kowane fakiti yanzu yana zuwa gare ka kuma dole a tura shi gaba ko a jefar da shi. /32 na mai masauki ɗaya kusan ba ya ɗaukar kome, kuma duk sauran suna yin kamar ba a taɓa shigar da VPN ɗinka ba.
Ana lissafin iyalai daban. Hanyar IPv4 kawai tana barin IPv6 a kan hanyar sadarwar ƙasa, don haka mai masaukin hawa biyu zai iya warwarewa da haɗawa a wajen rami yayin da yake kama da an haɗa shi sosai a ciki.
DNS yana bin wannan tunani. Sabar da aka ƙara da addDnsServer() suna zuwa manhajojin da ke amfani da mai warwarewar rami, yayin da manhaja mai nata ƙarshen DNS da aka rufa ko Private DNS da aka saita a sunan mai masauki ke watsi da su gaba ɗaya. Sa'ad da sunaye suka gaza wa manhaja ɗaya kuma suka yi aiki ga wata, duba hanyar mai warwarewa kafin ka taɓa ko hanyar guda ɗaya.
Tatsuniya 3: dokokin kowace manhaja makulli ne da za ka juya shi kowane gefe
addDisallowedApplication() da addAllowedApplication() yanayi biyu ne, ba tace biyu ba. Mai ginawa yana karɓar tsari ɗaya ga kowane rami, don haka manhajar da take son komai face ƙofa uku tana amfani da jerin da aka haramta kuma tana barin jerin da aka yarda da shi fanko. Su biyun suna kore juna, kuma mutane suna gano hakan a lokacin gudana bayan allon saituna ya riga ya bayar da duka maɓallan biyu.
Ganuwar ƙofa ita ma tana ciji. A Android 11 da bayansa za ka iya ambata ƙofofin da kake iya gani kawai, don haka jerin keɓancewar da aka gina daga tambayar da ba a yarda manhajarka ta gudanar ba zai yi watsi da shigarwar a shiru. Kwatanta jerin da abin da mai sarrafa ƙofa ke mayarwa da gaske kafin ka amince da shi.
Bayanan aiki na raba masu sauraro kuma. Ramin da aka fara a cikin bayanin yana rufe wannan bayanin da manhajojinsa, yayin da bangaren sirri yana riƙe da nasa haɗin. Wannan shawara ce ta iyaka da aka yanke sau ɗaya, kuma tana cikin mahaɗin ne ba cikin tikitin tallafi ba.
Tatsuniya 4: stopSelf yana kawo ƙarshen ramin
Ba ya yi haka. Mu'amalar tana rayuwa a cikin bayanin ma'aunin da establish() ke mayarwa, kuma abin sabis ɗin zai iya mutuwa yayin da wannan bayanin ke nan a buɗe. Ka rufe ParcelFileDescriptor da farko, ka saki ambato, ka haɗa ko ka katse zaren karatu da rubutu, sannan ka kira stopForeground(true) da stopSelf() a wannan tsari.
Manta da bayanin ma'auni shine dalilin da aka saba gani wanda sabis ɗin ke kama da ya tsira da nasa buƙatar tsayawa, kuma yana bayanin tsohuwar hanya da ta fi tsawon rayuwa fiye da manhajar da ta ƙara ta.
Kuskuren gaba shi ma ya zama ruwan dare: rufe bayanin yayin da zaren karatu ke tsakiyar karatu, sannan a bar wannan zaren ya riƙe wani keɓancewar da babu wanda ya rubuta mata lamba. Ka riƙe tsarin kashewa a wuri ɗaya kuma ka bar aikin mai amfani da onRevoke() duka su kira cikinsa.
Abin da za ka duba sa'ad da ramin ya yi kama da ya mutu
Ka kare soketi na dogon lokaci da protect() kafin ramin ya tashi. Ba tare da shi ba, jigilar ramin kanta tana komawa cikin ramin kuma haɗin yana tsayawa ta yadda yake kama da kuskuren uwar garke. Gwada da adireshin da ba ya wanzu sai a bayan hanyar sadarwa mai nisa, ba da wani shafi na jama'a da ke amsawa daga ajiya ko daga hanyar ƙasa ba.
Yi rikodin sakamakon establish(), hanyoyin, ƙofofin da aka cire da kuma dalilin kashewa. Waɗannan layuka huɗu suna raba matsalar izini daga matsalar iyaka da matsalar zagayowar rayuwa ba tare da kama fakiti ba.