OpenVPN stopann le gearán errno 2 faoi /dev/net/tun agus lsmod ag liostáil an mhodúil tun go réidh. Tá an dá fhíric fíor ag an am céanna. Soláthraíonn an modúl tiománaí, agus is nód feiste é an cosán a osclaíonn an cliant a chaithfidh rud éigin eile a chruthú. Is é an dá rud a láimhseáil mar aon rud amháin an chúis nach n-athraíonn an deisiú soiléir — an modúl a athlódáil — aon rud ar chor ar bith.

Dhá rud, dhá úinéir éagsúla

Is rudaí neamhspleácha iad modúl eithne agus nód feiste le saolréanna neamhspleácha. Cláraíonn lódáil an mhodúil tiománaí, agus ar chóras a bhfuil devtmpfs air iarrann an eithne an nód comhfhreagrach a chruthú. Ar chóras gan devtmpfs ní chruthaíonn aon rud aon rud, agus suíonn an tiománaí ansin gan aon chosán a dhíríonn air. Is féidir leis an modúl a bheith luchtaithe, sláintiúil agus go hiomlán doshroichte tríd an gcóras comhad ag an am céanna.

Sin an fáth nach bhfuil téacs na hearráide agus liosta na modúl ag teacht salach ar a chéile. Osclaíonn an cliant cosán, níl an cosán ann, agus seolann an eithne ENOENT ar ais sula gcuirtear ceist ar an tiománaí tun ar chor ar bith. Ní féidir le hathlódáil an mhodúil cosán atá ar iarraidh a dheisiú, agus ní féidir le cruthú an chosáin tiománaí atá ar iarraidh a dheisiú.

lsmod | grep -w tun
stat -c "%F %t:%T" /dev/net/tun
grep " /dev " /proc/mounts

devtmpfs i gcoinne mknod sainráite

De ghnáth cruthaíonn dhá mheicníocht an nód sin, agus insíonn a fhios agat cé acu a cheaptar a bheith freagrach duit cad atá le deisiú. Ligeann devtmpfs don eithne nóid feiste a chruthú i sampla feistithe, agus cuireann udev úinéireacht agus ceadanna orthu. Is é mknod sainráite an cosán láimhe le haghaidh íomhánna agus spásanna ainmneacha nach ritheann ceachtar acu ag am tosaithe.

Déan comparáid idir torthaí seach rúin. Má tá devtmpfs feistithe ag /dev agus an nód fós ar iarraidh, ní hé an tiománaí an ceann a ghlacann tú leis, nó bhain rud éigin an nód tar éis tosaithe. Má tá /dev ina ghnáth-eolaire laistigh de rootfs neamhphacáilte, níl aon mheicníocht uathoibríoch ann agus caithfidh an té a thógann an íomhá an nód a chruthú.

stat -c "%F major=%t minor=%T" /dev/net/tun
# expect: character special file major=a minor=c8

San áit nach ritheann ceachtar meicníocht, caithfear an nód a dhéanamh de láimh, agus tá tábhacht leis an ord. Cruthaigh an t-eolaire tuismitheora ar dtús, mar ní féidir le mknod ceann a chumadh, ansin an fheiste charachtair, ansin mód a fhágann go bhfuil sé inscribhne do root amháin. Athlódáil an modúl sula gcruthaíonn tú an nód, agus ná bain cosán atá ann ach tar éis do ls a thaispeáint gur eolaire atá ann seach feiste.

sudo modprobe tun
sudo mkdir -p /dev/net
sudo mknod /dev/net/tun c 10 200
sudo chmod 600 /dev/net/tun
ls -l /dev/net/tun

Is é an cineál a thuairiscíonn stat an idirdhealaitheoir is tapúla, agus is é eolaire ar an gcosán sin an t-iontas is coitianta in íomhánna íosta. Fágann mkdir dea-rún i Dockerfile go díreach sin, agus ní chuirfidh aon mhéid lódála modúl eolaire in ionad feiste charachtair. Is é Major 10 le minor 200 an péire cláraithe do tun, curtha in iúl i heicsidheachúil mar a agus c8.

Ceithre lorg, ceithre chúis

Míníonn ceithre chúis beagnach gach cás, agus fágann gach ceann lorg difriúil sna logaí. Tosaigh leis an timpeallacht tosaithe. Is minic nach bhfeistíonn íomhánna gan diosca, boird leabaithe agus céimeanna initramfs ceachtar de devtmpfs ná /devá bhainistiú ag udev, mar sin ní scríobhann aon phróiseas an nód riamh. Ansin léigh na roghanna feistithe ar cibé rud a óstálann /dev, mar ceadaíonn nodev don chosán a bheith ann agus é ag diúltú é a oscailt, agus iompraíonn feistiú bind a tógadh ó óstach cruaite an bhratach gan é féin a fhógairt. Teipeann feistiú inléithe amháin níos luaithe agus níos airde: seolann mknod EROFS ar ais ansin, agus ciallaíonn EPERM go bhfuil an cumas in easnamh ar an bpróiseas seach go bhfuil an córas comhad á chosaint féin. Ar deireadh, teastaíonn ó am rite coimeádán a bhfuil a /dev tmpfs féin aige go ndéanfaí an nód a instealladh ina spás ainm féin, agus caithfidh a cgroup feiste an péire major agus minor a cheadú.

Seiceáil an tsraith bheartais sula n-athraíonn tú ceadanna arís. Is féidir le SELinux agus AppArmor oscailt a dhiúltú a cheadaíonn gach tréith comhad, agus tagann an diúltú sin chun solais sa log iniúchóireachta seach in aschur an chliaint. Is é athrú ceada nach dtagann riamh chun solais i ndiúltú ná am a chaitear ar an tsraith iomlán mícheart.

sudo journalctl -k -n 20 --no-pager
sudo ausearch -m AVC -ts recent | tail -5

Cruthaigh é le comhéadan, ní le liosta

Cruthaíonn liosta rathúil go bhfuil cosán ann agus ní rud ar bith eile. Oscail nód tun sláintiúil le léamh agus tagann an glao ar ais le hearráid, mar níl aon tséimeantaic léithe ag an bhfeiste agus ní comhad rialta í. Is é an earraid sin an comhartha rathúil anseo, agus coinníonn a haithint ó í a leanúint mar locht thú.

head -c 1 /dev/net/tun
head: error reading '/dev/net/tun': File descriptor in bad state

Cruthaíonn an tástáil chinntitheach comhéadan, mar fheidhmíonn sí an tiománaí, an nód agus do phribhléidí in aon chéim amháin. Má éiríonn leis an suimiú agus má thagann an nasc chun solais, oibríonn an triúr. Nuair a theipeann sé, deighleann errno na cúiseanna: ciallaíonn ENOENT nach bhfuil aon nód inúsáidte ann, díríonn EPERM ar chumas, ar bhratacha feistithe nó ar bheartas, agus ciallaíonn EBUSY go bhfuil an comhéadan ag próiseas eile cheana féin.

sudo ip tuntap add dev tun7 mode tun
ip -brief link show tun7
sudo ip tuntap del dev tun7 mode tun

Rith an tástáil sin sa chomhthéacs a theipeann i ndáiríre, mar is féidir le haonad seirbhíse, coimeádán nó tasc sceidealta tacar cumais éagsúil a iompar ná do bhlaosc logála isteach. Ní chruthaíonn tástáil a n-éiríonn léi sa chomhthéacs mícheart aon rud faoin gceann a theipeann.

Nuair nach í an fheiste an fhadhb

Má éiríonn le tástáil an chomhéadain agus má theipeann ar an gcliant fós, is é an próifíl, comhthéacs na seirbhíse nó an bealach atá fágtha mar fhadhb, agus tá an fheiste go maith. Sin an nóiméad chun stopadh ag eagarthóireacht nód feiste, mar ní chuireann tuilleadh athruithe ach achar leis ó chóras atá ag obair.

Rith na cúig sheiceáil chéanna gach uair seach ceann nua a chumadh: an bhfuil an modúl luchtaithe gan modúl iomaíoch, an bhfuil an cosán ina fheiste charachtair leis an major agus an minor ceart, an bhfuil na roghanna feistithe glan, an iompraíonn comhthéacs an phróisis an cumas, agus an bhfuil diúltú beartais ag stampa ama na teipe. Ní fadhb feiste é locht a mhaireann trí na cúig, cibé rud a luann an teachtaireacht.

Ailt ghaolmhara