client-connect script batek zero ez den kodearekin irteten duenean, OpenVPNa bezeroa baztertzen du, eta operadoreek normalean suposatzen dute dagokion client-disconnect script-ak dena txukunduko duela. Askotan ez da inoiz exekutatzen, disconnect prozesamendua connect faseak zer osatu ahal izan zuenaren mende dagoelako. Bazterketa eta atzerakada mekanismo bakartzat hartzea da saio-hasiera huts bat suebaki-arau filtratu edo erregistro umezurtz bihurtzen duena. Bi betebehar bereizi dira, eta horietako bat baino ez da automatikoa. Irakurri hook-aren irteera-bide propioa zerbitzaria egoera uzteagatik erruztatu aurretik.

Zero ez den irteerak bezeroa baztertzen du; ez du zure lana desegiten

client-connect-en irteera-egoera onarpen-erabakia da. Zero onartu esan nahi du, beste edozein baliok instantzia erabat ezarri aurretik eraistea esan nahi du. Kontratu horretan ezerk ez du aztertzen script-ak kanpoko munduan dagoeneko egin duena. Script-ak iptables arau bat gehitu, errenkada bat idatzi edo kontagailu bat handitu badu, aldaketa horiek bazterketari eutsi egiten diote.

Asimetria bera aplikatzen zaie pluginei, non instantzia bakarrerako connect funtzio batzuk exekuta baitaitezke. Geroagoko hutsegiteak ez du atzeraeraginez bertan behera uzten aurretiko arrakasta, eta aurretiko funtzioak ez du modurik jakiteko funtzio ahizpa batek huts egin duenik.

Bazterketa automatikoa da, garbiketa ez

OpenVPN 2.6 eskuliburuak client-disconnect prozesamendua aurreko connect prozesamendua arrakastatsua izateari lotzen dio. Salbuespen dokumentatu batek kaskada-kateak estaltzen ditu: connect urrats batek arrakasta itzuli badu, dagokion disconnect urratsek instantzia eraistean oraindik exekutatzen dira, geroagoko connect urrats batek huts egin badu ere. Salbuespen hori estu-muina da eta zenbat callback konfiguratuta dauden araberakoa da, horregatik shell script bakarra probatzeak ez dizu kate bati buruz ezer esaten.

Kartografiatu benetako konfigurazioa haren inguruan diseinatu aurretik: zein script, zein plugin eta zein ordenatan exekutatzen diren. Beheko taulak erdi-osatutako ezarpen batek atzean uzten duena zerrendatzen du.

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

Errenkada bakoitza modu berean amaitzen da bezeroarentzat eta desberdin ostalariarentzat. Bezeroak ezin du jakin zein gertatu zen, beraz hook-ak egin duena desegin behar du hutsegite-egoera itzuli aurretik.

Konpentsatu huts egin zuen script-aren barruan

Baliozkotu ahal duzun guztia egoera partekatua ukitu aurretik: ziurtagiriaren eremuak, helbidearen erabilgarritasuna, bezeroa dagokion taldea. Bazterketa merkeena edozein esleipen baino lehen gertatzen dena da. Ezarpenean kanpoko eragiketa batzuk sartzen direnean, eraman erregistro bat zein osatu ziren eta desegin itzazu alderantzizko ordenan hutsegite-egoera itzuli aurretik.

Kasu zehatza: script-ak bezero bakoitzeko suebaki-sarrera bat sortzen du, eta gero hura deskribatzen duen egoera-errenkada idazten huts egiten du. Huts egiten duen adarrak sortu berri duen sarrera kendu beharko luke eta gero zero ez den kodearekin irten. Inoiz programatuko ez den disconnect gertaera baten zain egotea da arau bat pentsatuta zegoen saioa baino gehiago bizitzen egiteko modua.

Egin konpentsazioa idempotentea eta jabeduna

Garbiketak bi aldiz exekutatzeko segurua izan behar du eta zehatza zer ezabatu dezakeen. Aurreko saiakera bateko gertaera berantiarrak ez luke saio berriago baten esleipena kenduko, biok izen komun bat edo birziklatutako tunel-helbide bat partekatzen dutelako bakarrik. Erregistratu helduleku edo eragiketa-id zehatza baliabidearekin, eta ezabatu gako horren arabera, ez izenaren arabera. Datu-baseko transakzioek datu-basearen beraren aldaketetan soilik laguntzen dute; muga horretatik kanpoko suebaki-arau batek konpentsazio-urrats esplizitua behar du.

Hartu prozesua aldaketaren eta garbiketaren artean hil daitekeela, eta gehitu adiskidetzaile bat kanpoko egoera onartutako bezeroen zerrendarekin alderatzen duena ordutegi baten arabera.

Probatu benetan desberdinak diren hiru bideak

Praktikatu hiru kasu: ezer esleitu aurretik bazterketa, esleipen partzial baten ondorengo bazterketa, eta geroago amaitzen den onartutako saio normal bat. Hirurok log-lerro desberdinak eta hondar desberdinak sortzen dituzte. Egiaztatu kanpoko egoera bakoitzaren ondoren, ez soilik bezeroaren hutsegite-mezua, hiruretatik bitan bezeroaren hutsegitea baita espero den emaitza.

Erregistratu hook-aren fasea, irteera-egoera eta zer esleitu edo askatu zen, kredentzialak kanpo utzita. Sortu zuen baliabidea izendatzen duen hook-erregistroak egiten du arau filtratua sei hilabete geroago aurkigarri.

Erlazionatutako artikuluak