OpenVPN an Docker kann /dev/net/tun net opmaachen: wat feelt
En TUN-Knued an d’Netzwierkfäegkeet sinn zwou gesonnerte Berechtegungen. Maacht béid op an liest duerno de nächste Feeler no sengen eegene Bedéngungen, amplaz déi selwecht Korrektur ze widderhuelen.
Container-Biller kënnen all déi néideg OpenVPN-Binär- a Konfiguratiounsdateie droen an trotzdem beim éischten Netzwierkufruff feelen. De Feeler nennt /dev/net/tun, well d’Applikatioun de Kernel no enger TUN-Schnittstell gefrot huet an de Container weder de Geräteknuet nach d’Fäegkeet hat, een ze maachen. Dat sinn zwou gesonnerte Berechtegungen, an eng ze fixéieren léisst déi aner genee do, wou se war.
Fir se ze trennen brauch et je een Uruff. D’Feeler-Message duerno seet Iech, un wéi enger Grenz Dir tatsächlech stungt.
De Geräteknuet an d’Fäegkeet sinn zwou Dieren
De Geräteknuet ass en Objet vum Dateiesystem, dofir muss en Container en a sengem eegene Mount-Namespace gesinn. D’Fäegkeet ass eng Berechtegung, dofir brauch de Prozess CAP_NET_ADMIN an deem Namespace, wou d’Schnittstell erstallt gëtt. De Gerät ouni d’Fäegkeet duerchzeginn gëtt Iech en Knued, deen sech opmécht, an en ioctl, deen feelt. D’Fäegkeet ouni de Gerät ze ginn, léisst d’Applikatioun näischt kënnen opmaachen, dofir erschéngen déi zwee an de Beispiller meeschtens zesummen.
Docker seng devices-Astellung mappt de Host-Gerät an de Container, wärend cap_add de Fäegkeetsset upasst. En Bind Mount vum selwechte Wee setzt d’Datei an d’Siicht, ouni d’Semantik vum Gerätszougang unzewenden.
Reproduzéiert et ausserhalb vun der Compose-Datei
Ier Dir de Service ännert, iwwerpréift, datt den Host de Gerät huet an datt en nackte Container eng Schnittstell ka maachen. De Befehl hei drënner ass bewosst minimal, an säin eenzegen Zweck ass et, en Hostproblem vun engem Compose-Problem ze trennen. Wann en feelt, hëlleft keng Compose-Ännerung.
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'
En feelenden Knued um Host heescht, datt den tun-Modul net disponibel ass, wat eng Korrektur op der Hostsäit an net am Container ass. En Knued, deen et gëtt, awer am Container net ka opgemaach ginn, weist op Gerätszougang, an d’Message wäert permission denied soen an net no such file. D’Reiefolleg vun deenen zwee Feeler ass déi ganz Diagnos. Schreift op, wéi een Dir gesinn hutt, ier Dir e Fändel ännert.
D’Feeler nom TUN sinn aner Problemer
Soubal d’Schnittstell erschéngt, huet den nächste Feeler en anere Besëtzer. Authentiséierungsfeeler heescht, datt den Tunnel de Server erreecht huet an d’Authentiséierungsdonnéeën ofgewisen goufen, dofir hëlleft keng Ännerung un de Fäegkeeten. En Tunnel, deen sech opbaut, während d’Applikatiounen nach ëmmer feelen, weist op Routen, Weiderleedung, DNS-Opléisung am Container oder de Container säin eegene Netzwierklayout. Jidderee vun dësen ass eng gewéinlech Netzwierkfro, déi d’TUN-Berechtegung net ka beäntweren. D’Originalprüfung no all Ännerung ze widderhuelen verhënnert, datt d’Feeler zu engem eenzegen Androck verschmëlzen.
All Astellung aus engem funktionéierende Beispill ze kopéieren ass de Wee, wéi aus enger minimaler Korrektur eng onliesbar Servicedefinitioun gëtt. Hëlt just déi mat, déi dës Deployement brauch, a schreift op, firwat jidderee vun hinnen do ass.
Iwwerpréift d’Schnittstell am Container
Iwwerpréift d’Schnittstell an de Fäegkeetsset vun bannen an deem lafenden Container an net vum Host. D’Befehler hei drënner weisen de Geräteknuet, d’Lëscht vun de Fäegkeeten a wat eng Schnittstell iwwerhaapt ka gemaach ginn. Fëllt se an deem selwechte Container aus, deen de Client lafe léisst, an installéiert d’Tools, wann d’Bild minimal ass.
ls -l /dev/net/tun
capsh --print | grep -i net_admin
ip link add dev tun9 type tun && ip link show tun9
Eng Fäegkeet, déi am bounding set ass, awer am effective set feelt, behält sech anescht wéi eng, déi ni ginn ass, an capsh weist béid. Wann de Knued existéiert an d’Fäegkeet do ass, während d’Erstelle weider feelt, forcéiert d’Laufzäit eppes anescht, wéi e seccomp-Profil oder eng AppArmor-Politik, déi d’Operatioun aschränkt. Dat ass eng drëtt Grenz, dokumentéiert vun der Laufzäit an net vun der Applikatioun.
Schreift d’Container-Fändelen, d’Bild an de geneeë Feeler vun all Versuch op. Déi nächst Persoun, déi dës Notiz liest, kann soen, wéi eng Dier zou war, ouni d’ganz Enquête ze widderhuelen.