Methiant client-connect OpenVPN: a yw glanhau disconnect yn cael ei warantu?
Nid yw cleient a wrthodwyd yn dadwneud rheol wal dân nac yn dileu cofnod. Cymharwch gontract y callback â’r dad-droi y mae’n rhaid i’ch hook ei wneud ei hun.
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 failing | What the client sees | What stays behind |
|---|---|---|
| Created a firewall entry | A rejection, with no tunnel | A rule matching an address nobody owns |
| Wrote a state row | A rejection, with no tunnel | A record of a session that never started |
| Allocated a tunnel address | A rejection, with no tunnel | An 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.