Mae a all sgript bachyn gyrraedd ochr arall y tiwnel yn dibynnu ar dri amod: pa ddigwyddiad y mae’n gysylltiedig ag ef, a yw OpenVPN yn dal o fewn ei ddilyniant cychwyn pan fydd y sgript yn rhedeg, ac a yw’r gwaith wedi’i wahanu oddi wrth y dilyniant hwnnw. Mae’r rhan fwyaf o sgriptiau yn methu ar y trydydd. Mae ychwanegu cwsg yn trin problem cylch bywyd fel problem amseru, ac mae’n gweithio’n ddigon aml i gamarwain.

Penderfynwch ar y digwyddiad yn gyntaf, yna’r mecanwaith ar gyfer gohirio gwaith, yna’r lle mae’r gwaith gohiriedig yn rhedeg. Mae’r tri phenderfyniad hyn yn annibynnol, a’u cymysgu yw sut mae bachyn dwy linell yn troi’n brynhawn.

Pam mae’r bachyn yn aros ar diwnel sy’n aros arno

OpenVPN yn galw ei fachynnau’n gydamserol, o fewn yr un broses sy’n symud pecynnau. Mae up yn tanio pan fydd y ddyfais tun neu tap yn bodoli ond cyn i unrhyw lwybr gael ei ychwanegu, ac mae route-up yn tanio ar ôl llwybrau; nid yw’r naill foment na’r llall yn addo y bydd cymar yn ateb. Tra bo sgript o’r naill fachyn neu’r llall yn dal i redeg, nid yw’r daemon yn anfon ymlaen, felly mae gorchymyn sy’n disgwyl i draffig groesi’r tiwnel yn aros ar diwnel sy’n aros ar y gorchymyn. Yr aros cylchol hwnnw yw’r rheswm pam mae rhediad â llaw yn llwyddo a’r bachyn yn goramser.

Mae’r plastr amlwg, sef cysgu ychydig eiliadau, weithiau’n gweithio oherwydd i’r pen pell godi ei hun, nid oherwydd i’r cwsg drwsio unrhyw beth. Mae cynorthwyydd sy’n arolygu parodrwydd yn ateb gwahanol: mae’r bachyn yn dychwelyd, mae anfon ymlaen yn dechrau, ac mae’r cynorthwyydd yn cael yr hyn sydd ei angen arno unwaith y bydd wir yno.

Dewiswch y bachyn yn ôl digwyddiad, nid yn ôl cyfleustra

Cysylltwch up â gwaith sydd ond angen y ddyfais, route-up â gwaith sydd angen llwybrau, a chadwch client-connect a client-disconnect ar gyfer tasgau fesul cleient ar ochr y gweinydd. Rhaid i lanhau wrth ddatgysylltu oddef cael ei redeg ddwywaith, gan nad yw ailgysylltu dros ryngwyneb parhaus yn dilyn yr un dilyniant ag ailgychwyn llawn. Ar y gweinydd, mae client-connect yn tanio pan fydd cleient yn dilysu yn hytrach na phan fydd y daemon yn cychwyn, sy’n werth ei gadarnhau cyn symud rhesymeg yno. Os yw’r gwaith yn perthyn i gylch bywyd y gwasanaeth yn hytrach nag i un cysylltiad, mae uned systemd yn gartref gwell nag unrhyw fachyn.

Mae’r daemon yn gweithredu gorchmynion bachyn yn uniongyrchol, heb gragen yn y canol, felly mae ifconfig_remote mewn llinell up yn cyrraedd fel testun llythrennol. Lapwch y gorchymyn mewn cragen benodol, neu cadwch y rhesymeg mewn sgript sy’n darllen yr amgylchedd. Mae ipchange yn un gyfarwyddeb sy’n ychwanegu ei dadleuon ei hun: mae’n rhoi’r cyfeiriad a’r porthladd i’r gorchymyn, felly mae sgript a ysgrifennwyd ar gyfer dim yn gweld dau annisgwyl.

Tair ffordd o wahanu’r gwaith

Yr opsiwn cyntaf yw rhoi’r cynorthwyydd yn y cefndir o fewn y bachyn: ei gychwyn gyda setsid neu systemd-run --scope, cau’r disgrifyddion a etifeddwyd, ac allan â sero ar unwaith. Yr ail yw i’r bachyn ysgrifennu ffeil cyflwr fach a gadael i amserydd systemd neu uned llwybr weithredu arni, sy’n cadw’r bachyn yn ddibwys ac yn rhoi’r polisi ailgynnig yn rhywle sydd â logiau. Y trydydd yw taflu’r bachyn yn gyfan gwbl a symud y gwaith i uned a drefnwyd ar ôl y gwasanaeth VPN, sef yr ateb cywir pan nad yw’r gwaith fesul cysylltiad o gwbl. Mae’r tri yn rhannu un rheol: rhaid i’r bachyn ddychwelyd cyn iddo fod angen y tiwnel.

Pa un bynnag a ddewiswch, gwnewch y cynorthwyydd yn idempotent ac yn weladwy. Ni ddylai dau alwad gorgyffwrdd redeg yr un weithred anghyfnewidiol ddwywaith, a rhaid i gynorthwyydd sy’n methu adael rhywbeth y gall dyn ei ddarllen.

Gwahaniaethwch fethodau blwch tywod oddi wrth fethodau cylch bywyd

Pan fydd sgript yn rhedeg o bromp root ac yn methu fel gwasanaeth, y rheswm fel arfer yw blwch tywod yn hytrach na’r rhwydwaith. Gall ProtectHome cyfyngol, ProtectSystem darllen-yn-unig, neu gyfeiriadur gwaith nad yw’n bodoli adael y sgript neu ei data yn un na ellir ei gyrraedd, ac ar westeiwr SELinux mae angen cyd-destun ar y ffeil hefyd sy’n caniatáu gweithredu. Darllenwch yr uned gyda systemctl cat openvpn-server@server a’r journal gyda journalctl -u openvpn-server@server -n 80, yna chwiliwch am wall caniatâd neu gyd-destun yn hytrach na goramser cysylltiad. Dylai analluogi’r blwch tywod fod y symudiad olaf, nid y cyntaf.

Mae methiant cylch bywyd yn edrych yn wahanol: mae’r bachyn yn cychwyn, mae’r cynorthwyydd yn rhedeg, ac nid yw’r soced yno eto. Ysgrifennwch linell â stamp amser o’r bachyn ei hun, datgysylltwch ac ailgysylltwch, a darllenwch y digwyddiadau mewn trefn. Pan fydd gwir angen y tiwnel ar y cynorthwyydd, gadewch iddo arolygu parodrwydd yn hytrach na chysgu am gyfnod sefydlog.

Mae tri maes yn gwneud yr adroddiad nesaf yn ddefnyddiol: pa fachyn a redodd, pa gyfrif a ddefnyddiodd, a ble y stopiodd. Hebddyn nhw, mae pob ymchwiliad diweddarach yn dechrau o’r dechrau.

Erthyglau cysylltiedig