/dev/net/tun haipo ingawa tun imepakiwa: rekebisha nodi ya kifaa
Moduli ya tun iliyopakiwa haithibitishi kuwa nodi ya kifaa ipo. Tenganisha dereva na nodi, ijenge upya kwa mpangilio na uthibitishe kwa kiolesura.
OpenVPN inasimama na malalamiko ya errno 2 kuhusu /dev/net/tun wakati lsmod inaorodhesha moduli ya tun kwa utulivu. Mambo yote mawili ni kweli kwa wakati mmoja. Moduli hutoa dereva, na njia ambayo mteja anafungua ni nodi ya kifaa ambayo kitu kingine lazima kiunde. Kuzichukulia kama kitu kimoja ndiyo sababu ya kwa nini marekebisho dhahiri ya kupakia moduli upya hayabadilishi chochote kabisa.
Vitu viwili, wamiliki wawili tofauti
Moduli ya kerneli na nodi ya kifaa ni vitu huru vyenye mizunguko huru ya maisha. Kupakia moduli husajili dereva, na katika mfumo wenye devtmpfs kerneli huomba nodi inayolingana iundwe. Katika mfumo usio na devtmpfs hakuna kinachounda chochote, na dereva hukaa hapo bila njia yoyote inayoelekeza kwake. Moduli inaweza kuwa imepakiwa, yenye afya na isiyoweza kufikiwa kabisa kupitia mfumo wa faili kwa wakati mmoja.
Ndiyo sababu maandishi ya hitilafu na orodha ya moduli hayapingani. Mteja hufungua njia, njia haipo, na kerneli hurudisha ENOENT kabla dereva wa tun kuulizwa hata. Kupakia moduli upya hakuwezi kurekebisha njia inayokosekana, na kuunda njia hakuwezi kurekebisha dereva anayekosekana.
lsmod | grep -w tun
stat -c "%F %t:%T" /dev/net/tun
grep " /dev " /proc/mounts
devtmpfs dhidi ya mknod iliyo wazi
Kwa kawaida mifumo miwili huunda nodi hiyo, na kujua ipi inapaswa kuwa na jukumu kunakuambia nini cha kurekebisha. devtmpfs humruhusu kerneli kuunda nodi za vifaa katika nakala iliyopachikwa, na udev huweka umiliki na ruhusa juu yao. mknod iliyo wazi ni njia ya mikono kwa picha na nafasi za majina ambapo hakuna hata mmoja wao anayefanya kazi wakati wa kuwasha.
Linganisha matokeo badala ya nia. Ikiwa devtmpfs imepachikwa kwenye /dev na nodi bado haipo, dereva si yule unayemdhani, au kitu kimeondoa nodi baada ya kuwasha. Ikiwa /dev ni saraka ya kawaida ndani ya rootfs iliyofunguliwa, hakuna utaratibu wa kiotomatiki na anayejenga picha lazima aunde nodi.
stat -c "%F major=%t minor=%T" /dev/net/tun
# expect: character special file major=a minor=c8
Mahali ambapo hakuna utaratibu wowote unaofanya kazi, nodi lazima ifanywe kwa mkono, na mpangilio ni muhimu. Kwanza unda saraka ya mzazi, kwa sababu mknod haiwezi kuibuni, kisha kifaa cha herufi, kisha hali inayoiacha ikiwa ya kuandikwa na root pekee. Pakia moduli upya kabla ya kuunda nodi, na uondoe njia iliyopo tu baada ya ls kuonyesha kuwa ni saraka na si kifaa.
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
Kitenganishi cha haraka zaidi ni aina inayoripotiwa na stat , na saraka kwenye njia hiyo ndiyo mshangao wa kawaida zaidi katika picha ndogo. mkdir yenye nia njema katika Dockerfile huacha hivyo hasa, na hakuna kiasi cha upakiaji wa moduli kinachobadilisha saraka na kifaa cha herufi. Major 10 pamoja na minor 200 ni jozi iliyosajiliwa kwa tun, ikionyeshwa kwa heksadesimali kama a na c8.
Alama nne, sababu nne
Sababu nne zinaeleza karibu kila kisa, na kila moja huacha alama tofauti kwenye kumbukumbu. Anza na mazingira ya kuwasha. Picha zisizo na diski, bodi zilizopachikwa na hatua za initramfs mara nyingi hazipachiki devtmpfs wala /devinayosimamiwa na udev, kwa hivyo hakuna mchakato unaoandika nodi. Kisha soma chaguo za upachikaji wa kile kinachopangisha /dev, kwa sababu nodev huruhusu njia kuwepo huku ikikataa kuifungua, na upachikaji wa bind uliochukuliwa kutoka kwa mwenyeji mgumu hubeba bendera hiyo bila kujitangaza. Upachikaji wa kusoma tu hushindwa mapema na kwa sauti kubwa: mknod hurudisha EROFS hapo, wakati EPERM inamaanisha mchakato hauna uwezo na si kwamba mfumo wa faili unajilinda. Mwishowe, runtime ya kontena yenye /dev tmpfs yake yenyewe inahitaji nodi idungwe katika nafasi yake ya majina, na cgroup yake ya vifaa lazima iruhusu jozi ya major na minor.
Kagua tabaka la sera kabla ya kubadilisha ruhusa tena. SELinux na AppArmor zinaweza kukataa ufunguzi ambao kila sifa ya faili inaruhusu, na kukataa huko kunaonekana kwenye kumbukumbu ya ukaguzi na si kwenye matokeo ya mteja. Mabadiliko ya ruhusa ambayo hayatokei kamwe katika kukataa ni wakati uliotumika kwenye tabaka lisilofaa kabisa.
sudo journalctl -k -n 20 --no-pager
sudo ausearch -m AVC -ts recent | tail -5
Thibitisha kwa kiolesura, si kwa orodha
Orodha iliyofanikiwa inathibitisha kuwa njia ipo na hakuna zaidi. Fungua nodi ya tun yenye afya kwa kusoma na wito hurudi na hitilafu, kwa sababu kifaa hakina maana ya kusoma na si faili ya kawaida. Hitilafu hiyo ni ishara ya mafanikio hapa, na kuigundua kunakuzuia kuifukuza kama hitilafu.
head -c 1 /dev/net/tun
head: error reading '/dev/net/tun': File descriptor in bad state
Jaribio la uamuzi huunda kiolesura, kwa sababu hufanya mazoezi ya dereva, nodi na mapendeleo yako kwa hatua moja. Ikiwa nyongeza itafanikiwa na kiungo kionekane, yote matatu yanafanya kazi. Inaposhindwa, errno hutenganisha sababu: ENOENT inamaanisha hakuna nodi inayoweza kutumika, EPERM inaelekeza kwenye uwezo, bendera za upachikaji au sera, na EBUSY inamaanisha mchakato mwingine tayari unamiliki kiolesura.
sudo ip tuntap add dev tun7 mode tun
ip -brief link show tun7
sudo ip tuntap del dev tun7 mode tun
Endesha jaribio hilo katika muktadha ambao hushindwa kweli, kwa sababu kitengo cha huduma, kontena au kazi iliyoratibiwa inaweza kubeba seti tofauti ya uwezo kuliko shell yako ya kuingia. Jaribio linalopita katika muktadha usiofaa halithibitishi chochote kuhusu lile linaloshindwa.
Wakati kifaa si tatizo
Ikiwa jaribio la kiolesura litafanikiwa na mteja bado ashindwe, tatizo lililobaki ni wasifu, muktadha wa huduma au njia, na kifaa kiko sawa. Huo ni wakati wa kuacha kuhariri nodi za vifaa, kwa sababu mabadiliko zaidi yanaongeza tu umbali kutoka kwa mfumo unaofanya kazi.
Endesha ukaguzi huo huo watano kila wakati badala ya kubuni mpya: moduli imepakiwa bila moduli mshindani, njia ni kifaa cha herufi chenye major na minor sahihi, chaguo za upachikaji ni safi, muktadha wa mchakato unabeba uwezo, na kuna kukataa kwa sera kwenye muhuri wa muda wa kushindwa. Hitilafu inayostahimili yote matano si tatizo la kifaa, chochote ujumbe unachotaja.