Waxaad domain ku dartay liiska fasaxa, weydiintu waxay gaartaa app-kaaga, isbarbardhiguhu wuxuu soo celiyaa la fasaxay, boggana weligii ma soo dego. Waqtigaas dadka badankoodu waxay bilaabaan inay dib u qoraan isbarbardhiga oo ay ku daraan isbarbardhig wildcard ah. Khibradayda isbarbardhigu inta badan waa sax, cilad-dhacuna wuxuu ku yaal hal lakab hoose: jawaabta DNS ee aad sameysay, wadada aad rakibtay, ama socketka aad u isticmaashay inaad weydiinta u gudbiso. Liisku waa qaybta fudud; wadada baakaddu waa halka liisaska fasaxa ku jabaan.

Isbarbardhigu dhif buu dembiile yahay

Marka hore waa in la kala saaro xanniban iyo jaban. Magac xanniban waa inuu si degdeg ah oo muuqda u guuldareysto, sababta oo ah browserku wuxuu helaa jawaab sheegaysa in magacu uusan jirin wuuna istaagaa. Magac jaban wuu isku dhegaa, wuxuu dib ugu celiyaa IPv6, wuxuu u gudbaa gaadiid kale, wuxuuna kaa taga tiir wareegaya. Haddii aad aragto tiir wareegaya, liiskaaga fasaxa waxay u badan tahay inuu ka jawaabayo wax macmiilku wax ka qaban karin.

Diiwaanka A ee madhan waa khaladka caadiga ah. Soo celinta NOERROR oo leh eber jawaabood waxay u ekaanaysaa jawaab ansax ah, sidaas darteed xalliyaha stub wuu aqbalaa, browserku dib buu isku dayaa, wuxuu isku dayaa AAAA, wuxuu isku dayaa xalliye kale, wuuna ka quustaa waqti aad u dambeeya. Kowdka jawaabta 3, oo ah NXDOMAIN, oo leh qaybta su'aasha oo la celiyay iyo aqoonsiga macaamilka oo la koobiyeeyay, wuxuu hadalka isla markiiba dhammeeyaa. U isticmaal magac kasta oo aad si ula kac ah u diiddo.

IPv6 sidoo kale wuxuu mudan yahay go'aan la mid ah halkii uu ka ahaan lahaa qiime caadi ah. Haddii aad A uga jawaabto NXDOMAIN oo aad u ogolaato AAAA, macmiilku wuxuu ku gaari karaa magaca xanniban IPv6, filtarkuna wuu daadanayaa. Qaar ka mid ah hirgelinta waxay ka jawaabaan weydiimaha AAAA xanniban cinwaan loopback ah si xiriirku isla markiiba u guuldareysto halkii uu u gudbi lahaa beddelka. Dooro hal siyaasad, ku dabaq labada nooc ee diiwaanka, oo labadaba diiwaangeli.

Waddo qabata wax walba ayaa leh wax walba

Naqshad kaliya DNS waligeed ma ku darto addRoute("0.0.0.0", 0), sidaas darteed kaliya weydiimaha ayaa gala interface-ka TUN wax kasta oo kale waxay sii waddaa isticmaalka shabakadda hoose. Taasi waa qaabka badbaadada leh, waxayna kaloo sharraxaysaa sababta liisaska fasaxa qaarkood ugu muuqdaan inay Wi-Fi ku shaqeeyaan oo ay ku guuldareystaan shabakadda mobilka.

Waqtiga uu jiro waddo caadi ah, qulqul kastaa adigaa leh. Baakad TCP oo yimaadda interface-ka oo aan la gudbin ama aan jawaab la helin waxay fadhiisataa safka ilaa macmiilku waqtigiisu dhammaado, khaladna lama diiwaangelin karo sababta oo ah waxba khalad ma aha. Waxaan arkay qof maalin galab ah ku qaatay liis fasax oo jaban oo dhab ahaan ahaa gudbiye maqan oo loogu talagalay dekedda 443. Diiwaangeli borotokoolka iyo meesha baakad kasta oo aad go'aansato inaad tuurto.

Socketka xalliyaha waa inuu ka baxaa tunnelka

Gudbintu waa halka dabinka xiga uu yaal. Xalliyaha shirkadda isgaarsiinta waxay inta badan ku noolaadaan cinwaan gaar ah oo tunnelku aanu gaari karin, sidaas darteed weydiinta aad gudbiso meelna ma tagto app-kuna wuxuu soo sheegaa waqtiga akhrinta oo dhammaaday. U dir weydiimaha la ansixiyay xalliye aad ogtahay inuu gaari karo, oo marka hore socketkaas sii VpnService.protect(). Socket aan la ilaalin wuxuu weydiinta ku celiyaa tunnelkaaga, halkaas oo ay mar kale app-ka u timaaddo oo ay wareegto ilaa waqtiga xaddidanuu shaqeeyo.

Guuldarradu waxay u ekaanaysaa sida go'itaanka shabakadda, taasina waa sababta ay warbixinnada khaladaadka ugu sii noolaato. Hayso tirakoobka weydiimaha la diray iyo jawaabaha la helay: haddii lambarka koowaad kor u kaco oo kan labaad eber ku sii nagaado, waxaad fiirinaysaa socketka, ma aha liiska.

Cabbirka iyo checksum-yada waxay ku guuldareystaan farriin la'aan

Tuurista aamusan waxay sidoo kale ka timaaddaa cabbirka. Jawaab DNS oo leh jaangooyo jawaab oo weyn, ama gacan-qabasho TCP oo leh ikhtiyaaro ballaaran, ayaa dhaafi kara MTU waddo oo aadan waligaa si cad u dejin. Qaybtu waxay ku lumaa kor, macmiilkuna ama wuu isku dayaa mid yar ama wuu joojinayaa isku dayga. Dejinta MTU interface-ka 1280 waa doorasho muxaafid ah oo u adkaysata waddooyinka mobilka badankood, oo caddayntu ka fiican tahay dhaxal qaadashada qiime caadi ah oo aan qofna qiyaasin.

Haddii aad baakadaha keligaa dhisato, checksumku waa dilaa kale oo aamusan. Checksum UDP oo lagu xisaabiyay madax-madhan been abuur ah oo ka tagaya dhererka UDP ama goobta borotokoolka wuxuu soo saaraa baakad dhankaaga u muuqda mid si fiican u qaabaysan oo qaataha ku tuuro calaamad la'aan. Isbarbardhig madax-madhankaaga tilmaamaha goob-goob, oo daabac checksumka la xisaabiyay ee hal qulqul oo la yaqaan inta aad debuggaraynayso.

Waxa VpnService aanu adiga kaaga qaban doonin

Laba xaddidaad ayaa mudan in la ogaado ka hor inta aadan ku wareegsan naqshadayn. Ma jiro app caadi ah oo dhejin kara proxy nidaamka oo dhan ama fayl PAC dibadda Wi-Fi, qaybtaasna ma aysan is beddelin. Waddada app kasta way is beddeshay: ka hor API 29 VpnService.Builder ma qaadi karin proxy haba yaraatee, API 29-na setHttpProxy(ProxyInfo.buildPacProxy(uri)) wuxuu platformka siiya script PAC si loo qiimeeyo shabakadda VPN. Qiimee xeerarka koodkaaga marka aad bartilmaameedsanayso API duug ah ama marka qaabka PAC uusan xeerka sheegi karin. UDP-na ma aha bilaash: browser-yadu waxay SOCKS proxy ka soo mariyaan TCP oo keliya, badanaa macmiilada SOCKS5 waligood ma hirgeliyaan UDP ASSOCIATE, sidaas darteed naqshad ku salaysan proxy waxay tuurtaa ama daadisaa UDP inta TCP caafimaad qaba u muuqdo.

Xaddidaadda labaadeed waa sababta borotokool ku salaysan UDP ugu shaqeyn karo shabakad caadi ah oo ugu guuldareysto daqiiqada VPN-kaagu isku xidho. Haddii la filayo in tunnelku qaado UDP, gudbiyuhu waa inuu hirgeliyaa waddada gudbinta arrintaas, ma aha kaliya waddada TCP oo leh nooc socket oo kale.

U hubi nidaamkan

Liiska u mari nidaam ahaan oo jooji marxaladda ugu horreysa ee guuldareysta, sababta oo ah hubin kasta oo dambe waa qaylo ilaa tan hore ay socoto.

  1. Tax waddooyinka la rakibay oo xaqiiji haddii baakadaha aan DNS ahayn ay galaan interface-ka TUN.
  2. Diiwaangeli magaca weydiinta, go'aanka iyo kowdka jawaabta hal magac xanniban iyo hal la ansixiyay.
  3. Xaqiiji in socketka xalliyaha la ilaaliyay iyo in xalliyaha la doortay uu ka jawaabo gudaha tunnelka.
  4. Xaqiiji MTU interface-ka iyo checksumka hal jawaab oo gacanta lagu dhisay.
  5. Ku celi isla boggii Wi-Fi iyo shabakadda mobilka, sababta oo ah xalliyaha isgaarsiinta iyo MTU waddadu way kala duwan yihiin.

Haddii shanta oo dhan ay socdaan oo boggu wali isku dhegaan, tuhmanaha xiga waa gudbiyaha laftiisa: isbarbardhig codsi la qabtay iyo jawaab la qabtay oo raadi tiro byte maqan ama socket badh ka xiran. Tixraaca VpnService.Builder wuxuu daboolaa heshiisyada waddada, DNS iyo MTU, protect()-na waa wicitaan VpnService gooni ah ee ma aha ikhtiyaar builder; interface ku xiran waxay kaliya ka dhigan tahay in heshiiska koowaad la fuliyay.

Maqaallo la xiriira