OpenVPN stoppt mat enger errno 2-Beschwéier iwwer /dev/net/tun wärend lsmod de tun-Modul gemittlech oplëscht. Béid Fakten sinn zur selwechter Zäit wouer. De Modul liwwert en Treiber, an de Wee, deen de Client opmécht, ass e Geräteknoten, deen eppes Aneres muss uleeën. Béides als een Objet ze behandelen ass de Grond, firwat déi naheliegend Reparatur vum Modul nei ze lueden iwwerhaapt näischt ännert.

Zwee Objeten, zwee verschidden Propriétairen

E Kernelmodul an e Geräteknoten sinn onofhängeg Objeten mat onofhängege Liewenszyklusen. D'Luede vum Modul registréiert en Treiber, an op engem System mat devtmpfs freet de Kernel, datt de passenden Knoten ugeleet gëtt. Op engem System ouni devtmpfs leet näischt eppes un, an den Treiber sëtzt do ouni ee Wee, deen op en weist. De Modul kann zur selwechter Zäit gelueden, gesond a komplett onerreechbar iwwer de Fichiersystem sinn.

Dofir widdersprécht sech den Feelertext net mat der Modullëscht. De Client mécht e Wee op, de Wee existéiert net, an de Kernel gëtt ENOENT zréck, ier den tun-Treiber iwwerhaapt gefrot gëtt. De Modul nei lueden kann ee fehlenden Wee net reparéieren, an de Wee uleeën kann een fehlenden Treiber net reparéieren.

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

devtmpfs géint en explizitten mknod

Normalerweis leeën zwee Mechanismen dee Knoten un, an ze wëssen, wien dofir zoustänneg soll sinn, seet Iech, wat ze reparéieren ass. devtmpfs léisst de Kernel Geräteknoten an enger montéierter Instanz uleeën, an udev setzt Proprietéit a Rechter drop. En explizitten mknod ass de manuelle Wee fir Biller an Nummraim, wou keen vun deenen zwee beim Start leeft.

Vergläicht Resultater amplaz Absiichten. Wann devtmpfs op /dev montéiert ass an de Knoten ëmmer nach fehlt, ass den Treiber net deen, deen Dir unhëlt, oder eppes huet de Knoten nom Start ewechgeholl. Wann /dev en normale Verzeechnes an engem ausgepakte rootfs ass, gëtt et keen automatesche Mechanismus, an deen, deen d'Bild baut, muss de Knoten uleeën.

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

Wou keen vun de Mechanismen leeft, muss de Knoten vun Hand gemaach ginn, an d'Reiefolleg zielt. Leet als éischt d'Elterenverzeechnes un, well mknod et net erfinde kann, duerno den Zeechenapparat, duerno e Modus, deen en nëmme fir root beschreifbar léisst. Lued de Modul nei, ier Dir de Knoten uleet, a läscht en existéierende Wee eréischt, nodeems ls gewisen huet, datt et en Verzeechnes an keen Apparat ass.

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

Den Typ, deen stat mëttelt, ass den séiersten Ënnerscheeder, an en Verzeechnes op deem Wee ass déi heefegst Iwwerraschung a minimale Biller. En gutt gemengten mkdir an engem Dockerfile léisst genee dat zréck, a keng Quantitéit Modullueden ersetzt en Verzeechnes duerch en Zeechenapparat. Major 10 mat minor 200 ass dat registréiert Pair fir tun, hexadezimal als a an c8 ausgedréckt.

Véier Spueren, véier Ursaachen

Véier Ursaachen erkläre bal all Fall, an all hannerléisst eng aner Spuer an de Loggen. Fänkt mat der Startëmgebung un. Diskles Biller, agebaut Boerder an initramfs-Phase montéieren dacks weder devtmpfs nach en udev-verwalt /dev, sou datt kee Prozess je de Knoten schreift. Liest duerno d'Montéieroptiounen op deem, wat /devbeherbergt, well nodev erlaabt, datt de Wee existéiert, verweigert awer en opzemaachen, an eng bind-Montage vun engem gehäerte Host dréit de Fändel ouni sech ze mellen. Eng nëmme-Lies-Montage fält méi fréi a méi haart: mknod gëtt do EROFS zréck, wärend EPERM bedeit, datt dem Prozess d'Fähegkeet feelt an net, datt de Fichiersystem sech selwer schützt. Schlussendlech brauch eng Container-Laufzäit mat hirem eegene /dev tmpfs de Knoten an hireen eegene Nummraum injizéiert, an hir Apparat-cgroup muss d'Major- a Minor-Pair erlaben.

Kuckt d'Politikschicht un, ier Dir nach eng Kéier d'Rechter ännert. SELinux an AppArmor kënnen en Opmaachen afleenen, dat all Fichierattribut erlaabt, an déi Aflehnung erschéngt am Audit-Log an net an der Client-Ausgab. Eng Rechterännerung, déi ni an enger Aflehnung erschéngt, ass Zäit, déi op der komplett falscher Schicht verbruecht gëtt.

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

Beweist et mat enger Schnëttstell, net mat enger Lëscht

Eng erfollegräich Lëscht beweist, datt et ee Wee gëtt an näischt méi. Maacht en gesonden tun-Knoten op fir ze liesen, an den Opruff kënnt mat engem Feeler zréck, well den Apparat keng Lies-Sémantik huet an et eng normal Datei ass. Dee Feeler ass hei den Erfollegssignal, an en ze erkennen hält Iech dovun of, en als Stéierung ze verfollegen.

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

Den entscheedende Test leet eng Schnëttstell un, well en den Treiber, de Knoten an Är Privilegien an engem Schrëtt exercéiert. Wann d'Derbäisetzen geléngt an de Link erschéngt, schaffen déi dräi. Wann en feelt, trennt errno d'Ursaachen: ENOENT bedeit, datt et kee brauchbare Knoten gëtt, EPERM weist op Fähegkeet, Montagefändel oder Politik, an EBUSY bedeit, datt en anere Prozess d'Schnëttstell schonn huet.

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

Fuert deen Test an deem Kontext aus, deen tatsächlech feelt, well eng Servicenheet, en Container oder eng geplangte Aufgab en aneren Fähegkeetsset ka droen wéi Är Login-Shell. En Test, deen am falsche Kontext duerchgeet, beweist näischt iwwer deen, deen feelt.

Wann den Apparat net de Problem ass

Wann den Test vun der Schnëttstell geléngt an de Client ëmmer nach feelt, ass de reschtleche Problem de Profil, de Servicekontext oder d'Route, an den Apparat ass an der Rei. Dat ass de Moment, fir d'Änneren vu Geräteknoten opzehalen, well weider Ännerungen nëmmen den Ofstand zu engem funktionéierende System vergréisseren.

Fuert all Kéier déiselwecht fënnef Kontrollen aus, amplaz eng nei ze erfinden: ass de Modul ouni en konkurréierende Modul gelueden, ass de Wee en Zeechenapparat mam richtege Major a Minor, sinn d'Montéieroptiounen propper, dréit de Prozesskontext d'Fähegkeet, an gëtt et eng Politikaflehnung um Zäitstempel vum Feeler. E Feeler, deen all fënnef iwwerlieft, ass kee Apparatproblem, wat och ëmmer d'Messag soot.

Ähnlech Artikelen