Mae LXD yn datgelu dyfais nod arbennig o'r gwesteiwr i gynhwysydd drwy ychwanegu nod dyfais, nid drwy ddysgu'r gwestai i greu un. Os nad oes gan y cynhwysydd /dev/net/tun, gall y ddyfais fod gan y gwesteiwr ac eto gall y gwestai fethu â'i hagor. Mae cofnod unix-char yn hanner y llwybr hwnnw ar ochr y rheolwr, ac mae'n fwriadol gulach na chynhwysydd braint. Dyna pam mae nod y gwesteiwr a nod y cynhwysydd yn haeddu gwiriadau ar wahân.

Mae'r mecanwaith yn ddigon byr i'w gadw mewn golwg: mae LXD yn datrys llwybr ar y gwesteiwr, yn creu nod cyfatebol y tu mewn i'r enghraifft ac yn ychwanegu'r ddyfais at cgroup dyfeisiau'r cynhwysydd. Wedyn mae angen caniatâd a gallu'r gwestai ei hun ar y broses westai i ddefnyddio'r nod at unrhyw beth.

Beth mae cofnod unix-char yn ei newid mewn gwirionedd

Mae dyfais unix-char yn dweud wrth LXD am ddatgelu un ddyfais nod arbennig o'r gwesteiwr ar lwybr a ddewiswyd y tu mewn i'r cynhwysydd. Mae gan y cofnod dair rhan sy'n bwysig: label y ddyfais a ddefnyddir gan y rheolwr, y llwybr source ar y gwesteiwr, a'r path a wêl y gwestai. Dim ond y ddau olaf sy'n disgrifio'r ddyfais ei hun. Mae gwall teip yn y naill neu'r llall yn cynhyrchu nod mewn man nad yw'r cleient byth yn ei agor.

Ar y gwesteiwr, y ddyfais yw /dev/net/tun fel arfer. Y tu mewn i'r cynhwysydd gallwch gadw'r un llwybr neu ddewis un arall, ond rhaid i'r llwybr gyfateb i'r hyn y mae'r cleient VPN yn ei ddisgwyl. Mae cadw /dev/net/tun yn osgoi ail broblem ffurfweddu, oherwydd bod y rhan fwyaf o gleientiaid yn agor y llwybr hwnnw heb ofyn.

Mae'r rheolwr yn cymhwyso'r cofnod pan fydd yr enghraifft yn cychwyn neu pan fydd y ddyfais yn cael ei phlygio'n boeth. Nid yw'n copïo gyrrwr i mewn i'r gwestai ac nid yw'n creu rhyngwyneb twnnel. Mae'n gwneud y nod yn weladwy ac yn caniatáu mynediad drwy grŵp rheoli dyfeisiau'r cynhwysydd.

Datganwch y ddyfais ar yr enghraifft, nid y tu mewn i'r gwestai

Ychwanegwch y cofnod o gyd-destun gweinyddiaeth LXD, gan enwi'r enghraifft a label y gallwch ei adnabod yn ddiweddarach. Ar gyfer cynhwysydd o'r enw vpnbox, y gorchymyn yw:

lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox

Mae label tun yn lleol i ffurfweddiad yr enghraifft. Nid yw'n enw rhyngwyneb ac nid oes rhaid iddo gyfateb i unrhyw beth yn y gwestai. Os yw proffil eisoes yn darparu'r un ddyfais, mae ychwanegu ail gofnod yn creu gwrthdaro yn hytrach na disodli, felly archwiliwch y ffurfweddiad effeithiol yn gyntaf.

Mae golygu ffeiliau y tu mewn i'r cynhwysydd yn haen anghywir. Gall mknod mewn sgript gychwyn ymddangos fel pe bai'n gweithio ar gynhwysydd braint, yna diflannu wrth ei ail-greu neu fethu ar un llai breintiedig. Mae'r rheolwr yn berchen ar set dyfeisiau'r enghraifft; gadewch iddo fod yn berchen ar y nod hefyd.

Cydweddwch berchnogaeth a modd â phroses y gwestai

Gall cofnod unix-char osod uid, gid a mode ar gyfer y nod y tu mewn i'r cynhwysydd. Defnyddiwch nhw i gyfateb i'r cyfrif sy'n rhedeg y cleient VPN, yn lle agor y ddyfais i bob defnyddiwr neu droi'r cynhwysydd i fodd braint.

Nid yw gwelededd yr un peth â chaniatâd. Mae nod sy'n perthyn i root â modd 600 yn weladwy i'r gwasanaeth sy'n rhedeg fel defnyddiwr heb fraint ac eto'n ambosibl ei agor ganddo. Gwiriwch gyfrif y gwestai yn gyntaf, yna gosodwch berchnogaeth i'r cyfrif hwnnw, a chadwch y modd heb fod yn lletach na'r hyn sydd ei angen ar y cleient.

Mae angen hefyd ar y broses am y gallu i ffurfweddu rhyngwyneb twnnel, fel arfer CAP_NET_ADMIN yn enw-goed y rhwydwaith y cynhwysydd. Nid yw trosglwyddo'r ddyfais yn rhoi'r gallu hwnnw, ac nid yw rhoi'r gallu yn darparu'r ddyfais; maent yn ofynion annibynnol.

Gwybyddwch beth nad yw'r cofnod yn ei roi

Nid yw nod gweladwy yn VPN sy'n gweithio. Mae angen gosod pecyn y cleient o hyd, mae angen i'r proffil fod yn ddilys o hyd, ac mae angen i'r gwasanaeth gychwyn o hyd. Mae dilysu, llwybrau a DNS yn parhau i fod yn waith y cleient, ac nid yw methiant yno'n dystiolaeth bod y cofnod dyfais yn anghywir.

Gall systemd ychwanegu cyfyngiad arall. Gall uned â DeviceAllow neu bolisi dyfeisiau caledgedig wadu mynediad i nod a ddarparwyd gan reolwr y cynhwysydd. Gwiriwch bolisi dyfeisiau'r uned pan fydd y nod yn bodoli ond bod y gwasanaeth yn adrodd gwall caniatâd, a newidiwch y polisi hwnnw yn lle ehangu'r cynhwysydd.

Mae plygio poeth yn ddewisol ac yn benodol. Mae cofnod â required=false angen llwybr ffynhonnell a gall ymddangos neu ddiflannu wrth i ddyfais y gwesteiwr newid. Mae'r cylch bywyd hwnnw'n addas i galedwedd sy'n dod ac yn mynd; ar gyfer dyfais TUN y mae'r VPN ei hangen wrth gychwyn, gall cofnod dewisol adael y gwasanaeth yn cychwyn cyn bod ei ragofyniad yn bodoli.

Gwiriwch welededd, agor a rhyngwyneb yn y drefn honno

Yn gyntaf cadarnhewch y nod y tu mewn i'r cynhwysydd a fwriadwyd. Dylai'r llwybr, y rhifau mawr a bach a'r berchnogaeth gyfateb i ddyfais y gwesteiwr a'r cofnod a ychwanegoch. Mae nod ar goll yn golygu na chymhwysodd y rheolwr y cofnod, neu ei fod wedi'i gymhwyso i enghraifft arall.

lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'

Nesaf cadarnhewch y gall cyfrif y gwasanaeth ei agor. Mae prawf byr fel y cyfrif hwnnw yn gwahanu problem berchnogaeth oddi wrth broblem gwasanaeth. Yn olaf, cychwynnwch y cleient a chadarnhau bod rhyngwyneb twnnel yn ymddangos; dim ond y trydydd cam hwnnw sy'n profi'r llwybr cyfan, oherwydd gall y ddau gyntaf lwyddo tra bod proffil neu allu'r cleient yn dal yn anghywir.

Cofnodwch yr enghraifft, label y ddyfais, ffynhonnell y gwesteiwr, llwybr y gwestai a'r cyfrif sy'n berchen pan fydd y newid yn cael ei gymeradwyo. Y pum gwerth hynny yw'r hyn y mae ail-greu, mudo neu newid proffil diweddarach yn gorfod ei gadw, ac maent yn llawer haws eu cymharu na gwall caniatâd heb gyd-destun.

Erthyglau cysylltiedig