Wakati skripti ya client-connect inatoka kwa msimbo usio sifuri, OpenVPN inamkataa mteja, na waendeshaji kwa kawaida hudhani skripti ya client-disconnect inayolingana itasafisha kila kitu. Mara nyingi haifanyi kazi kabisa, kwa sababu usindikaji wa disconnect unategemea kile ambacho awamu ya connect ilifanikiwa kukamilisha. Kuchukua kukataliwa na urudishaji kama utaratibu mmoja ndiko kunakobadilisha kuingia kushindikana kuwa kanuni ya firewall iliyovuja au rekodi yatima. Hizi ni wajibu mbili tofauti, na moja tu kati yao ni ya kiotomatiki. Soma njia ya kutoka ya hook yenyewe kabla ya kulaumu seva kwa kuacha hali.

Kutoka kwa msimbo usio sifuri kunamkataa mteja; hakuurudishi kazi yako

Hali ya kutoka ya client-connect ni uamuzi wa kukubali. Sifuri inamaanisha kubali, kitu kingine chochote kinamaanisha kubomoa kipengele kabla hakijaimarika kikamilifu. Hakuna kitu katika mkataba huo kinachokagua kile skripti imekwisha kufanya kwa dunia ya nje. Ikiwa skripti iliongeza kanuni ya iptables, ikaandika safu au ikaongeza kihesabu, mabadiliko hayo yanastahimili kukataliwa.

Utengano huo huo unatumika kwa programu-jalizi, ambapo kazi kadhaa za connect zinaweza kuendeshwa kwa kipengele kimoja. Kushindikana kwa baadaye hakubatilishi kwa nyuma mafanikio ya awali, na kazi ya awali haina njia ya kujua kwamba kazi dada imeshindikana.

Kukataliwa ni kiotomatiki, usafishaji sivyo

Mwongozo wa OpenVPN 2.6 unaunganisha usindikaji wa client-disconnect na mafanikio ya usindikaji wa connect uliotangulia. Isipokuwa iliyoandikwa inashughulikia minyororo ya kaskade: ikiwa hatua moja ya connect imekwisha kurudisha mafanikio, hatua zinazolingana za disconnect bado zinaendeshwa wakati kipengele kinabomolewa, hata kama hatua ya connect ya baadaye ilishindikana. Isipokuwa hilo ni jembamba na linategemea ni callback ngapi zimeundwa, ndiyo sababu kujaribu skripti moja ya shell hakukuambii chochote kuhusu mnyororo.

Panga usanidi halisi kabla ya kubuni kuzunguka: skripti gani, programu-jalizi gani na kwa mpangilio gani zinaendeshwa. Jedwali lililo hapa chini linaorodhesha kile usanidi usiokamilika unaacha nyuma.

What the hook did before failingWhat the client seesWhat stays behind
Created a firewall entryA rejection, with no tunnelA rule matching an address nobody owns
Wrote a state rowA rejection, with no tunnelA record of a session that never started
Allocated a tunnel addressA rejection, with no tunnelAn address marked busy until something releases it

Kila safu inaishia sawa kwa mteja na tofauti kwa mwenyeji. Mteja hawezi kujua ni ipi kati ya hizo ilitokea, kwa hivyo hook lazima irudishe kile ilichofanya kabla ya kurudisha hali ya kushindikana.

Fidia ndani ya skripti iliyoshindikana

Thibitisha kila kitu unachoweza kabla ya kugusa hali inayoshirikiwa: sehemu za cheti, upatikanaji wa anwani, kikundi ambacho mteja ni mwanachama. Kukataliwa kwa bei nafuu zaidi ni kule kunakotokea kabla ya mgao wowote. Usanidi unapojumuisha shughuli kadhaa za nje, weka kumbukumbu ya zipi zilikamilika na uzirudishe kwa mpangilio wa kinyume kabla ya kurudisha hali ya kushindikana.

Kisa mahususi: skripti inaunda ingizo la firewall kwa kila mteja, kisha inashindikana kuandika safu ya hali inayolielezea. Tawi linaloshindikana linapaswa kuondoa ingizo lililoundwa hivi punde kisha litoke kwa msimbo usio sifuri. Kusubiri tukio la disconnect ambalo huenda halitapangwa kamwe ndiyo njia ambayo kanuni inaishi muda mrefu kuliko kipindi ilichokusudiwa.

Fanya fidia iwe idempotent na yenye mmiliki

Usafishaji lazima uwe salama kuendeshwa mara mbili na uwe sahihi kuhusu kile unachoweza kufuta. Tukio la marehemu kutoka jaribio la awali halipaswi kuondoa mgao wa kipindi kipya zaidi kwa sababu tu zote zinashiriki jina la kawaida au anwani ya handaki iliyorejelezwa. Rekodi kishikio au kitambulisho cha operesheni mahususi pamoja na rasilimali, na ufute kwa ufunguo huo badala ya jina. Miamala ya hifadhidata husaidia tu na mabadiliko ya hifadhidata yenyewe; kanuni ya firewall nje ya mpaka huo inahitaji hatua ya fidia iliyo wazi.

Chukulia kuwa mchakato unaweza kufa kati ya mabadiliko na usafishaji, na ongeza kipatanishi kinacholinganisha hali ya nje na orodha ya wateja waliokubaliwa kwa ratiba.

Jaribu njia tatu ambazo kweli zinatofautiana

Fanya mazoezi ya visa vitatu: kukataliwa kabla ya kitu chochote kugawiwa, kimoja baada ya mgao wa sehemu, na kipindi cha kawaida kilichokubaliwa kinachoisha baadaye. Hivyo vitatu huzalisha mistari tofauti ya kumbukumbu na mabaki tofauti. Thibitisha hali ya nje baada ya kila kimoja, sio tu ujumbe wa kushindikana wa mteja, kwa sababu kushindikana kwa mteja ndiyo matokeo yanayotarajiwa katika viwili kati ya vitatu.

Rekodi awamu ya hook, hali ya kutoka na kile kilichogawiwa au kuachiliwa, bila vitambulisho. Kumbukumbu ya hook inayotaja rasilimali iliyoundwa ndiyo inayofanya kanuni iliyovuja ipatikane miezi sita baadaye.

Makala zinazohusiana