In ôfskiedingsrecord komt oan nei’t in twadde ferbining ûnder deselde namme al begûn is, en in handler dy’t de nijste rige foar dy brûker bywurket, slút de ferkearde sesje. De flater is net de tiidstimpelfergeliking sels. It is de oanname dat in namme plus in hiele sekonde ien sesje identifisearje. Hookbarren beskriuwe ferbiningen, en in ferbining hat in kaai nedich dy’t allinnich by har heart.

Begjin mei wat de ôfskiedingsfariabelen eins betsjutte. Pas dan hat de kar fan identifikaasje sin.

Wat de ôfskiedingshook echt draacht

Yn Community OpenVPN 2.6 definiearret de hookreferinsje time_unix as it momint dat de klant ferbûn; it wurdt ynsteld foar’t de ferbiningshook rint, en it wurdt net opnij definiearre as de ôfskiedingshook letter ôfgiet. time_duration jout de lingte fan dy sesje yn sekonden, dat it ein is rûchwei de ferbiningstiid plus de doer. Beide binne hiele sekonden, en gjin fan beide is it momint dat jo databank it barren ferwurke hat. Dy trije tiden apart hâlde is wat in korrelaasje hâlde lit, ynstee fan allinnich ûnder testen goed te lykjen.

Dizze rekkenkunde fertsjinnet it om opskreaun te wurden, want it is de iennichste eintiid dy’t de hook sels biedt. Ferwurkingsfertraging en klokferskillen tusken hosts bliuwe der noch bûten.

Wêrom’t it foar de hân lizzende pear net unyk is

It pearen fan de namme mei de ferbiningstiid ferneaut de syktocht en identifisearret noch altyd gjin sesje. In klant kin binnen deselde sekonde wer ferbine, dat twa sesjes kinne beide wearden diele. Twa daemon-eksimplaren, of in serverferfanging dy’t deselde konfiguraasje hâldt, kinne dat pear út ferskate prosessen meitsje. Tunneladressen wurde om deselde reden werbrûkt, wat se attributen fan in sesje makket ynstee fan identifikaasjes foar ien.

De flatermodus is stil. In lette ôfskieding foar de earste sesje past by de nijste rige en beëiniget in tawizing dy’t de twadde sesje noch brûkt, dat de brûker ûnderfynt in tafallich ferlies fan tagong dat er neat dien hat om te feroarsaakjen. In rigetal dat dêrnei goed liket, makket it probleem hurder om te spotten.

Wêr’t in stabile identiteit wei komt

De behearinterface jout elke klant in klanteksimplaar-identifikaasje, en dy identifikaasje is beheind ta it daemon-eksimplaar dat him útjûn hat. In wurkbere eksterne kaai kombinearret in stabile serveridentifikaasje, in epoke dy’t feroaret as de daemon start, en dy klant-ID. De epoke is wichtich om’t identifikaasjes mei it proses opnij begjinne, en in bleate proses-ID kin letter troch eat ûnferbannens werbrûkt wurde.

Omjouwingsfariabelen dy’t yn in bernferbiningsskript ynsteld wurde, reizgje net nei it lettere ôfskiedingsskript fan ’e âlderdaemon, om’t dy skripts as aparte prosessen mei har eigen omjouwings rinne. It generearjen fan in UUID op ferbiningstiid is dêrom heal in oplossing. De ôfskiedingskant moat deselde UUID neame kinne, wat betsjut dat de identiteit earne libje moat dêr’t beide barren komme kinne.

Meitsje ôfsluting betingst en idempotint

Slút ôf by sesje-eigner, net by brûker. In handler dy’t alle tawizing dy’t op dit stuit by in namme heart fuortsmyt, sil úteinlik de ferkearde fuortsmite, en de iennichste ferdigening is kontrolearje dat it record dat fuortsmiten wurdt it record is dat dit barren beskriuwt.

De behearinterface akseptearret ien ferbûn behearclient tagelyk, dus yntegrearje mei wa’t it al hat ynstee fan in twadde waarnimmer ta te foegjen dy’t om deselde socket stridelet.

Behannel werhelle barren sûnder de útkomst twa kear te feroarjen, en bewarje net-peare barren foar fermoedsoening ynstee fan se fuort te smiten. In ôfskiedingscallback hat dokumintearre libbenssyklusbetingsten en komt nei in crash of in hurde stop miskien nea, dus it ûntwerp hat in manier nedich om in sesje foar te stellen waans einbarren ûntbrekt.

Test de ûngemaklike gefallen mei sin: twa werferbiningen binnen ien sekonde, twa daemon-eksimplaren, in ferbining waans ferwurking mislearre, en in daemonwerstart midden yn in sesje. In kaai dy’t alle fjouwer oerlibbet is in kaai dy’t fertrouwe wurdich is.

Relatearre artikelen