Houerbeelde kan elke OpenVPN-program en konfigurasielêer hê wat hulle nodig het en steeds by die eerste netwerkoproep misluk. Die fout noem /dev/net/tun omdat die program die kernel om ’n TUN-koppelvlak gevra het en die houer nóg die toestelnodus nóg die vermoë gehad het om een te skep. Dit is twee afsonderlike toestemmings, en om die een reg te maak laat die ander presies waar dit was.

Om hulle te skei kos een opdrag elk. Die foutboodskap daarna sê vir jou by watter grens jy werklik gestaan het.

Die toestelnodus en die vermoë is twee deure

Die toestelnodus is ’n lêerstelselobjek, so ’n houer moet dit in sy eie monteernamespasie sien. Die vermoë is ’n toestemming, so die proses benodig CAP_NET_ADMIN in die namespasie waar die koppelvlak geskep sal word. Om die toestel deur te gee sonder die vermoë gee jou ’n nodus wat oopmaak en ’n ioctl wat misluk. Om die vermoë toe te ken sonder die toestel laat die program niks hoegenaamd kan oopmaak nie, en daarom verskyn die twee gewoonlik saam in voorbeelde.

Docker se toestelinstelling beeld die gasheertoestel in die houer in, terwyl cap_add die vermoënstel aanpas. ’n Bindmontering van dieselfde pad plaas die lêer in die gesigveld sonder om toesteltoegang-semantiek toe te pas.

Reproduseer dit buite die Compose-lêer

Kontroleer voor jy die diens wysig dat die gasheer die toestel het en dat ’n kaal houer ’n koppelvlak kan skep. Die opdrag hieronder is doelbewus minimaal, en die enigste doel daarvan is om ’n gasheerprobleem van ’n compose-probleem te skei. As dit misluk, sal geen compose-wysiging help nie.

ls -l /dev/net/tun
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun:/dev/net/tun alpine sh -c 'apk add -q iproute2 && ip tuntap add dev tun9 mode tun && ip link show tun9'

’n Ontbrekende nodus op die gasheer beteken die tun-module is nie beskikbaar nie, wat ’n oplossing aan die gasheerkant is eerder as een vir die houer. ’n Nodus wat bestaan maar nie in die houer oopgemaak kan word nie, dui op toesteltoegang, en die boodskap sal permission denied sê eerder as no such file. Die volgorde van daardie twee mislukkings is die hele diagnose. Skryf neer watter een jy gesien het voordat jy ’n vlag verander.

Die foute ná TUN is ander probleme

Sodra die koppelvlak verskyn, het die volgende mislukking ’n ander eienaar. Verifikasiefoute beteken die tonnel het die bediener bereik en die geloofsbriewe is verwerp, so vermoëveranderinge sal nie help nie. ’n Tonnel wat tot stand kom terwyl programme steeds misluk, dui op roetes, aanstuur, DNS-resolusie binne die houer, of die houer se eie netwerkuitleg. Elkeen daarvan is ’n gewone netwerkvraag wat die TUN-toestemming nie kan beantwoord nie. Om die oorspronklike toets ná elke verandering te herhaal, keer dat die mislukkings in een indruk saamsmelt.

Om elke instelling uit ’n werkende voorbeeld oor te neem, is hoe ’n minimale oplossing ’n onleesbare diensdefinisie word. Neem net die oor wat hierdie ontplooiing nodig het en teken aan waarom elkeen daar is.

Verifieer die koppelvlak binne die houer

Kontroleer die koppelvlak en die vermoënstel van binne die lopende houer eerder as vanaf die gasheer. Die opdragte hieronder wys die toestelnodus, die vermoëlys en of ’n koppelvlak hoegenaamd geskep kan word. Voer hulle in dieselfde houer uit as wat die kliënt laat loop, en installeer die gereedskap as die beeld minimaal is.

ls -l /dev/net/tun
capsh --print | grep -i net_admin
ip link add dev tun9 type tun && ip link show tun9

’n Vermoë wat in die bounding-stel teenwoordig is maar in die effektiewe stel ontbreek, gedra hom anders as een wat nooit toegeken is nie, en capsh wys albei. As die nodus bestaan en die vermoë daar is terwyl skepping steeds misluk, dwing die looptyd iets anders af, soos ’n seccomp-profiel of ’n AppArmor-beleid wat die bewerking beperk. Dit is ’n derde grens, gedokumenteer deur die looptyd eerder as deur die program.

Teken die houervlagte, die beeld en die presiese fout van elke poging aan. Die volgende persoon wat daardie nota lees, kan sien watter deur gesluit was sonder om die hele ondersoek te herhaal.

Verwante artikels