Pan fydd sgript client-connect yn gorffen â chod nad yw’n sero, mae OpenVPN yn gwrthod y cleient, ac mae gweithredwyr fel arfer yn tybio y bydd y sgript client-disconnect cyfatebol yn tacluso. Yn aml ni fydd byth yn rhedeg, oherwydd mae prosesu disconnect yn dibynnu ar yr hyn y llwyddodd y cam connect i’w gwblhau. Trin gwrthod a dad-droi fel un mecanwaith yw’r hyn sy’n troi mewngofnodi methiedig yn rheol wal dân sydd wedi gollwng neu’n gofnod amddifad. Dau rwymedigaeth ar wahân ydynt, a dim ond un ohonynt sy’n awtomatig. Darllenwch lwybr ymadael y hook ei hun cyn beio’r gweinydd am adael cyflwr ar ôl.

Mae ymadawiad nad yw’n sero yn gwrthod y cleient; nid yw’n dadwneud eich gwaith

Penderfyniad derbyn yw statws ymadael client-connect. Mae sero yn golygu derbyn, mae unrhyw beth arall yn golygu dymchwel yr enghraifft cyn iddi gael ei sefydlu’n llawn. Nid oes unrhyw beth yn y contract hwnnw yn archwilio’r hyn y mae’r sgript eisoes wedi’i wneud i’r byd allanol. Os ychwanegodd y sgript reol iptables, ysgrifennu rhes, neu godi rhifydd, mae’r newidiadau hynny’n goroesi’r gwrthodiad.

Mae’r un anghymesuredd yn berthnasol i ategion, lle gall sawl ffwythiant connect redeg ar gyfer un enghraifft. Nid yw methiant diweddarach yn canslo llwyddiant cynharach yn ôl-weithredol, ac nid oes ffordd gan y ffwythiant cynharach i ddysgu bod ffwythiant brawd wedi methu.

Mae gwrthod yn awtomatig, nid yw glanhau

Mae llawlyfr OpenVPN 2.6 yn cysylltu prosesu client-disconnect â llwyddiant prosesu connect cynharach. Mae eithriad wedi’i ddogfennu yn ymdrin â chadwyni cwympol: os yw un cam connect eisoes wedi dychwelyd llwyddiant, mae’r camau disconnect cyfatebol yn dal i redeg pan ddymchwelir yr enghraifft, hyd yn oed os methodd cam connect diweddarach. Mae’r eithriad hwnnw’n gul ac yn dibynnu ar faint o alwadau ôl a ffurfweddwyd, ac felly nid yw profi un sgript shell yn dweud dim wrthych am gadwyn.

Mapiwch y ffurfweddiad gwirioneddol cyn dylunio o’i gwmpas: pa sgript, pa ategyn, ac ym mha drefn y maent yn rhedeg. Mae’r tabl isod yn rhestru’r hyn y mae gosodiad hanner-gorffenedig yn ei adael ar ôl.

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

Mae pob rhes yn gorffen yr un ffordd i’r cleient ac yn wahanol i’r gwesteiwr. Ni all y cleient ddweud pa un ohonynt a ddigwyddodd, felly rhaid i’r hook ddad-droi’r hyn a wnaeth cyn dychwelyd y statws methiant.

Gwnewch iawndal o fewn y sgript a fethodd

Dilyswch bopeth y gallwch cyn cyffwrdd â chyflwr a rennir: meysydd tystysgrif, argaeledd cyfeiriad, y grŵp y mae’r cleient yn perthyn iddo. Y gwrthodiad rhataf yw’r un sy’n digwydd cyn unrhyw ddyraniad. Unwaith y bydd y gosodiad yn ymestyn dros sawl gweithrediad allanol, cadwch gofnod o’r rhai a gwblhawyd a’u dad-droi mewn trefn wrthdro cyn dychwelyd y statws methiant.

Achos pendant: mae’r sgript yn creu cofnod wal dân fesul cleient, yna’n methu ag ysgrifennu’r rhes gyflwr sy’n ei ddisgrifio. Dylai’r gangen sy’n methu dynnu’r cofnod a grëwyd ganddi newydd a wedyn ymadael â chod nad yw’n sero. Aros am ddigwyddiad disconnect na fydd efallai byth yn cael ei drefnu yw sut y mae rheol yn goroesi’r sesiwn y’i bwriadwyd ar ei chyfer.

Gwnewch iawndal yn idempotent ac yn berchenogol

Rhaid i lanhau fod yn ddiogel i’w redeg ddwywaith ac yn fanwl gywir ynglŷn â’r hyn y caiff ei ddileu. Ni ddylai digwyddiad hwyr o ymdrech gynharach dynnu dyraniad sesiwn mwy newydd yn unig oherwydd bod y ddau yn rhannu enw cyffredin neu gyfeiriad twnnel wedi’i ailgylchu. Cofnodwch yr handlen neu’r dynodydd gweithrediad penodol gyda’r adnodd, a dileu drwy’r allwedd honno yn hytrach nag wrth enw. Nid yw trafodion cronfa ddata ond yn helpu gyda newidiadau’r gronfa ddata ei hun; mae angen cam iawndal penodol ar reol wal dân y tu allan i’r ffin honno.

Cymerwch y gall y broses farw rhwng y newid a’r glanhau, ac ychwanegwch gydlynydd sy’n cymharu cyflwr allanol â’r rhestr cleientiaid a dderbyniwyd ar amserlen.

Profwch y tair llwybr sy’n wahanol mewn gwirionedd

Ymarferwch dri achos: gwrthodiad cyn i unrhyw beth gael ei ddyrannu, un ar ôl dyraniad rhannol, a sesiwn a dderbyniwyd yn normal sy’n gorffen yn ddiweddarach. Mae’r tri hynny’n cynhyrchu llinellau log gwahanol a gweddillion gwahanol. Cadarnhewch y cyflwr allanol ar ôl pob un, nid yn unig ar neges methiant y cleient, oherwydd methiant y cleient yw’r canlyniad disgwyliedig mewn dau o’r tri.

Cofnodwch gam y hook, y statws ymadael, a’r hyn a ddyrannwyd neu a ryddhawyd, heb gymwys manylion mewngofnodi. Log hook sy’n enwi’r adnodd a grëodd yw’r hyn sy’n gwneud rheol sydd wedi gollwng yn ddarganfyddadwy chwe mis yn ddiweddarach.

Erthyglau cysylltiedig