/dev/net/tun nieqes għalkemm tun hu mgħobbi: sewwi l-għoqda tal-apparat
Modulu tun mgħobbi ma jippruvax li l-għoqda tal-apparat teżisti. Aqsam id-driver mill-għoqda, ibni mill-ġdid bl-ordni u ivverifika b'interfaċċa.
OpenVPN jieqaf b'lament errno 2 dwar /dev/net/tun filwaqt li lsmod jelenka l-modulu tun bil-kwiet. Iż-żewġ fatti huma veri fl-istess ħin. Il-modulu jipprovdi driver, u l-passaġġ li jiftaħ il-klijent hija għoqda tal-apparat li xi ħaġa oħra trid toħloq. Li tittrattahom bħala oġġett wieħed huwa r-raġuni għaliex is-sewwa ovvju li terġa' tgħabbi l-modulu ma jbiddel xejn.
Żewġ oġġetti, żewġ sidien differenti
Modulu tal-kernel u għoqda tal-apparat huma oġġetti indipendenti b'ċikli tal-ħajja indipendenti. It-tagħbija tal-modulu tirreġistra driver, u f'sistema b'devtmpfs il-kernel jitlob li tinħoloq l-għoqda li taqbel. F'sistema mingħajr devtmpfs xejn ma joħloq xejn, u d-driver jibqa' bilqiegħda hemm mingħajr ebda passaġġ li jindika lejh. Il-modulu jista' jkun mgħobbi, f'saħħtu u kompletament inaċċessibbli permezz tas-sistema tal-fajls fl-istess mument.
Għalhekk it-test tal-iżball u l-lista tal-moduli ma jikkontradixxux lil xulxin. Il-klijent jiftaħ passaġġ, il-passaġġ ma jeżistix, u l-kernel jirritorna ENOENT qabel ma d-driver tun jiġi kkonsultat xejn. It-tagħbija mill-ġdid tal-modulu ma tistax issewwi passaġġ nieqes, u l-ħolqien tal-passaġġ ma jistax issewwi driver nieqes.
lsmod | grep -w tun
stat -c "%F %t:%T" /dev/net/tun
grep " /dev " /proc/mounts
devtmpfs kontra mknod espliċitu
Normalment żewġ mekkaniżmi joħolqu dik l-għoqda, u li tkun taf liema wieħed suppost huwa responsabbli jgħidlek x'għandek issewwi. devtmpfs iħalli lill-kernel joħloq għoqod tal-apparat f'istanza mmuntata, u udev japplika s-sjieda u l-permessi fuqhom. mknod espliċitu huwa l-passaġġ manwali għall-immaġni u l-ispazji tal-ismijiet fejn ebda wieħed minnhom ma jaħdem waqt il-boot.
Qabbel ir-riżultati mhux l-intenzjonijiet. Jekk devtmpfs huwa mmuntat fuq /dev u l-għoqda għadha nieqsa, id-driver mhuwiex dak li qed tassumi, jew xi ħaġa neħħiet l-għoqda wara l-boot. Jekk /dev hija direttorju ordinarju ġewwa rootfs miftuħa, m'hemmx mekkaniżmu awtomatiku u min jibni l-immaġni jrid joħloq l-għoqda.
stat -c "%F major=%t minor=%T" /dev/net/tun
# expect: character special file major=a minor=c8
Fejn l-ebda mekkaniżmu ma jaħdem, l-għoqda trid issir bl-idejn, u l-ordni hija importanti. Oħloq l-ewwel id-direttorju ġenitur, għax mknod ma jistax jaħdimha, imbagħad it-tagħmir tal-karattri, imbagħad mod li jħalliha tinkiteb mill-root biss. Erġa' għabbi l-modulu qabel ma toħloq l-għoqda, u neħħi passaġġ eżistenti biss wara li ls ikun wera li huwa direttorju u mhux tagħmir.
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
L-aktar distinzjoni mgħaġġla hija t-tip li jirrapporta stat u direttorju f'dak il-passaġġ huwa l-aktar sorpriża komuni fl-immaġni minimi. mkdir b'ħsieb tajjeb f'Dockerfile iħalli eżattament dak, u l-ebda ammont ta' tagħbija tal-moduli ma jissostitwixxi direttorju b'tagħmir tal-karattri. Major 10 ma' minor 200 huwa l-par reġistrat għal tun, espress f'esadeċimali bħala a u c8.
Erba' traċċi, erba' kawżi
Erba' kawżi jispjegaw kważi kull każ, u kull waħda tħalli traċċa differenti fil-logs. Ibda mill-ambjent tal-boot. Immaġni mingħajr diska, bordijiet inkorporati u fażijiet initramfs spiss ma jimmuntawx la devtmpfs u lanqas /devimmexxi minn udev, għalhekk l-ebda proċess qatt ma jikteb l-għoqda. Imbagħad aqra l-għażliet tal-muntaġġ fuq kull ma jospita /dev, għax nodev jippermetti li l-passaġġ jeżisti filwaqt li jirrifjuta li jiftħu, u muntaġġ bind meħud minn host imwebbes iġorr il-bandiera mingħajr ma jħabbar lilu nnifsu. Muntaġġ biss-qari jonqos aktar kmieni u aktar qawwi: mknod jirritorna EROFS hemmhekk, filwaqt li EPERM ifisser li l-proċess nieqes mill-kapaċità u mhux li s-sistema tal-fajls tipproteġi lilha nnifisha. Fl-aħħar, runtime tal-kontenituri bis- /dev tmpfs tiegħu stess jeħtieġ li l-għoqda tiġi injettata fl-ispazju tal-ismijiet tiegħu stess, u l-cgroup tal-apparat tiegħu trid tippermetti l-par major u minor.
Iċċekkja s-saff tal-politika qabel ma terġa' tbiddel il-permessi. SELinux u AppArmor jistgħu jirrifjutaw ftuħ li kull attribut tal-fajl jippermetti, u dak ir-rifjut jidher fil-log tal-awditjar u mhux fl-output tal-klijent. Bidla fil-permessi li qatt ma tidher f'rifjut hija ħin mitluf fuq is-saff kompletament żbaljat.
sudo journalctl -k -n 20 --no-pager
sudo ausearch -m AVC -ts recent | tail -5
Ipprova b'interfaċċa, mhux b'lista
Lista ta' suċċess tipprova li passaġġ jeżisti u xejn aktar. Iftaħ għoqda tun f'saħħitha għall-qari u s-sejħa terġa' lura bi żball, għax it-tagħmir m'għandux semantika tal-qari u mhuwiex fajl ordinarju. Dak l-iżball huwa hawn is-sinjal tas-suċċess, u li tagħrafu jżommok milli tiġri warajh bħala ħsara.
head -c 1 /dev/net/tun
head: error reading '/dev/net/tun': File descriptor in bad state
It-test deċiżiv joħloq interfaċċa, għax jeżerċita d-driver, l-għoqda u l-privileġġi tiegħek fi pass wieħed. Jekk iż-żieda tirnexxi u l-link jidher, it-tlieta qed jaħdmu. Meta jonqos, errno jifred il-kawżi: ENOENT ifisser li m'hemmx għoqda użabbli, EPERM jindika kapaċità, bandieri tal-muntaġġ jew politika, u EBUSY ifisser li proċess ieħor diġà għandu l-interfaċċa.
sudo ip tuntap add dev tun7 mode tun
ip -brief link show tun7
sudo ip tuntap del dev tun7 mode tun
Mexxi dak it-test fil-kuntest li tassew jonqos, għax unità tas-servizz, kontenitur jew xogħol skedat jistgħu jġorru sett ta' kapaċitajiet differenti minn dak tal-shell tal-login tiegħek. Test li jgħaddi fil-kuntest żbaljat ma jipprova xejn dwar dak li jonqos.
Meta t-tagħmir mhuwiex il-problema
Jekk it-test tal-interfaċċa jirnexxi u l-klijent xorta jonqos, il-problema li tibqa' hija l-profil, il-kuntest tas-servizz jew ir-rotta, u t-tagħmir huwa tajjeb. Dak huwa l-mument biex tieqaf teditja l-għoqod tal-apparat, għax aktar bidliet iżidu biss id-distanza minn sistema li taħdem.
Mexxi l-istess ħames verifiki kull darba minflok ma toħloq waħda ġdida: il-modulu huwa mgħobbi mingħajr modulu rivali, il-passaġġ huwa tagħmir tal-karattri bil-major u l-minor korretti, l-għażliet tal-muntaġġ huma nodfa, il-kuntest tal-proċess iġorr il-kapaċità, u hemm rifjut tal-politika fit-timestamp tal-ħsara. Ħsara li tgħaddi minn ħomsha mhijiex problema tat-tagħmir, tkun xi tkun li ssemmi l-messaġġ.