Simu inaanza upya, always-on imewaka, «zuia miunganisho bila VPN» imewaka, na handaki haitokei kamwe. Hakuna kitu kilichowekwa vibaya: uzuiaji unafanya kazi yake, na jaribio la mteja mwenyewe kufikia mwisho wake wa njia pia linakabiliwa na uzuiaji huo. Jina la mwisho wa njia lazima litatuliwe kabla handaki halipo, na mteja anayeruhusiwa kuzungumza na mtandao wakati programu nyingine zote haziruhusiwi. Kuelewa ni sehemu ipi inayofanya hivi, na kwa mpangilio gani, ndiko kunakobadilisha fumbo hili kuwa swali la usanidi.

Kile mjenzi wa VPN anachoomba kwa kweli

Programu ya VPN ya Android haitoi anwani ya seva kwa jukwaa. Inajenga kiolesura cha ndani: anwani na njia za handaki, vitatuzi ambavyo programu zinapaswa kutumia ndani yake, kisha establish() inarudisha kifafanua faili ambacho programu inasoma na kuandika kama pakiti mbichi za IP. Mwisho wa njia wa mbali hauonekani kabisa katika mjenzi huyo.

Hilo ni ukweli mkuu wa kimuundo. Jukwaa huunda kiolesura cha tun na kutekeleza sera juu yake; programu hutekeleza usafirishaji katika nafasi ya mtumiaji, kumaanisha kwamba programu yenyewe hutatua jina la mwisho wake wa njia na kufungua muunganisho uliosimbwa. Mwisho wa njia kwa umbo la jina la mwenyeji kwa hiyo unawezekana — si kwa sababu jukwaa linatumia majina, bali kwa sababu jukwaa haliuoni kamwe mwisho wa njia.

Sehemu moja ya mjenzi huchukua anwani: seva za DNS. Lazima ziwe anwani za nambari za vitatuzi, kwa kawaida zile ambazo mwendeshaji anataka kuuliza kupitia handaki. Sehemu hiyo inaeleza programu zinapotuma maswali baada ya handaki kuinuka. Haisemi chochote kuhusu jinsi mteja anavyopata mwisho wa njia, na kuzichukulia hizi mbili kama mpangilio mmoja ndiko kunakoanzisha mkanganyiko.

Maswali mawili ya DNS, si moja

Swali la kwanza ni: programu zinapotuma maswali baada ya handaki kuinuka? Jibu ni anwani ya kitatuzi ndani ya handaki, inayofikiwa kupitia kiolesura cha tun, na kwa muundo ni ya nambari.

Swali la pili ni: mteja anapataje mwisho wake wa njia kabla handaki hilo halipo? Utafutaji huo hufanyika nje ya handaki, kwenye mtandao wa msingi, katika mchakato wa mteja. Unaweza kutumia jina, na lazima utumie kitatuzi ambacho kifaa kinaweza kufikia bila VPN.

StageWho resolvesPathFailure looks like
Endpoint lookupThe VPN appUnderlying network, protected socketNever connects; no tunnel interface traffic
Peer authenticationClient and serverTunnel transportConnects then drops; certificate or key error
Private name lookupApps via the tunnelResolver inside the tunTunnel up, internal sites do not resolve

Hatua tatu, dalili tatu tofauti. Ujumbe mmoja wa hitilafu unaosema «haiwezi kuunganisha» huziunganisha pamoja, na ndiyo sababu watu huanza kuhariri sehemu ya seva ya DNS ili kurekebisha tatizo linalotokea kabla sehemu hiyo kusomwa hata mara moja.

Kwa nini bootstrap inaweza kukwama

Always-on na uzuiaji umewaka humaanisha kwamba trafiki isiyo ndani ya VPN inatupwa, ikiwa ni pamoja na trafiki ya programu inayomiliki VPN. Njia ya kutoka iko wazi: programu inaita protect() kwenye soketi, ambayo inaifunga kwenye mtandao wa msingi ili ipite handaki na iruhusiwe kutoka. Kila mteja wa VPN lazima afanye hivi kwa usafirishaji wake mwenyewe, la sivyo hatafika kamwe kwenye seva.

Sasa fikiria usambazaji ambapo kitatuzi pekee kinachojua jina la mwisho wa njia kiko ndani ya handaki. Mteja anahitaji handaki ili kutatua jina, na jina ili kujenga handaki. Hiyo ni tegemezi halisi la mzunguko, na hakuna usanidi wa mteja unaolitatua. Hilo ni kosa la muundo, si hitilafu ya programu.

Muda hufichua tegemezi hilo hilo kwa namna nyepesi. Wakati wa kuanza kabla ya kufunguliwa kwa mara ya kwanza, kifaa kinaweza kuwa hakina mtandao unaoweza kutumika bado; kwenye captive portal mtandao upo lakini huzuia kila kitu isipokuwa portal; wakati wa kuhama kutoka Wi-Fi kwenda mtandao wa simu, mtandao wa msingi wa soketi iliyolindwa hubadilika na mteja lazima agundue na kutatua upya. Kila moja ya haya ni tukio la bootstrap, na kila moja inafaa kupimwa kwa makusudi badala ya kugunduliwa saa 3 usiku.

Kwa nini kufunga jibu si suluhisho

Njia ya kuvutia ni kutatua jina mara moja na kubandika anwani inayopatikana kwenye sehemu ya nambari, au kuiweka kwa nguvu katika ujenzi maalum. Inaonekana inafanya kazi, na inabadilisha jina kuwa picha. Mwendeshaji anapohamisha mwisho wa njia — uhamishaji, mabadiliko ya anycast, anwani mpya ya kikanda — mteja anaendelea kupiga ile ya zamani na hakuna kitu kwenye kiolesura kinachoeleza kwa nini.

Rekodi za DNS zina muda wa uhai kwa sababu majibu yanaweza kubadilika; uhifadhi hufafanuliwa kwa muda huo, si milele. Kufunga jibu hutupa utaratibu unaofanya jina kuwa bora kuliko anwani, huku ukibakiza gharama ya uendeshaji ya kuwa umetumia jina.

Kufunga mara nyingi huenda pamoja na tabia mbaya ya pili: kulegeza ukaguzi wa utambulisho kwa sababu muunganisho sasa unashindwa kwa namna tofauti. Uthibitishaji wa utambulisho wa seva si sehemu ya tatizo la bootstrap, na kudhoofisha kwake hubadilisha usumbufu wa DNS na hatari ya kuingiliwa.

Miundo inayostahimili kuanza upya

Mpangilio wa kudumu hauna mvuto. Tumia mteja anayetekeleza soketi zilizolindwa ipasavyo na kutatua mwisho wake wa njia kwenye mtandao wa msingi, na mpe jina la mwisho wa njia linalotatuliwa hadharani, au kupitia kitatuzi kinachofikiwa kabla ya handaki. Acha uzuiaji uwe wazi; kuuzima kabisa ili DNS ifanye kazi kunaondoa sifa ambayo usambazaji upo kwa ajili yake.

Mahali ambapo mwisho wa njia lazima ubaki wa faragha, toa njia ya wazi ya bootstrap ambayo jukwaa linaweza kutumia — kitatuzi kinachofikiwa bila handaki, au muunganisho wa usimamizi unaodumishwa na mwendeshaji — na weka ubaguzi huo mwembamba na unaomilikiwa na sera, si na kitufe cha mtumiaji. Nyaraka za Android VpnService ndizo rejea ya kile jukwaa linahakikisha kuhusu ulinzi na mzunguko wa maisha, na rejea ya VpnService.Builder inathibitisha kuwa sehemu ya DNS inachukua anwani za nambari.

Kisha thibitisha hatua tatu, kwa mpangilio, kwenye muunganisho mpya baada ya kuanza upya: jina la mwisho wa njia linatatuliwa, handaki linaundwa na mwenzake anathibitishwa, na jina la faragha linatatuliwa kupitia kitatuzi cha handaki. Hatua ya kwanza ikishindwa, hakuna kitu kinachofuata kinachoweza kufanya kazi, na marekebisho yako kwenye njia ya bootstrap — kamwe si kwenye sehemu ya kitatuzi.

  • Utatuzi wa mwisho wa njia hufanyika ndani ya programu, nje ya handaki, kwenye soketi iliyolindwa.
  • Sehemu ya DNS kwenye mjenzi ni kwa programu zilizo ndani ya handaki, si kwa mwisho wa njia wa mteja mwenyewe.
  • Kitatuzi kinachofikiwa tu kupitia handaki ni kukwama, si kuanza polepole.
  • Pima mwisho wa njia, uthibitishaji na utafutaji wa faragha kivyake baada ya kuanza upya.

Makala zinazohusiana