Imazhet e kontejnerëve mund të mbajnë çdo binar dhe skedar konfigurimi të OpenVPN që u nevojitet dhe prapë të dështojnë në thirrjen e parë të rrjetit. Gabimi përmend /dev/net/tun sepse aplikacioni i kërkoi kernelit një ndërfaqe TUN dhe kontejneri nuk kishte as nyjën e pajisjes as aftësinë për të krijuar një. Këto janë dy leje të ndara, dhe rregullimi i njërës e lë tjetrën pikërisht aty ku ishte.

Ndarja e tyre kërkon një komandë për secilën. Mesazhi i gabimit pas kësaj ju tregon se në cilin kufi qëndronit në të vërtetë.

Nyja e pajisjes dhe aftësia janë dy dyer

Nyja e pajisjes është objekt i sistemit të skedarëve, prandaj një kontejner duhet ta shohë në hapësirën e vet të emrave të montimit. Aftësia është leje, prandaj procesi ka nevojë për CAP_NET_ADMIN në hapësirën e emrave ku do të krijohet ndërfaqja. Kalimi i pajisjes pa aftësinë ju jep një nyje që hapet dhe një ioctl që dështon. Dhënia e aftësisë pa pajisjen e lë aplikacionin të pafuqishëm të hapë çfarëdo, prandaj të dyja zakonisht shfaqen bashkë në shembuj.

Cilësimi devices i Docker e harton pajisjen e hostit brenda kontejnerit, ndërsa cap_add rregullon grupin e aftësive. Një bind mount i të njëjtës rrugë e vendos skedarin në pamje pa zbatuar semantikën e aksesit të pajisjes.

Riprodhojeni jashtë skedarit Compose

Përpara se të modifikoni shërbimin, kontrolloni që hosti e ka pajisjen dhe që një kontejner i zhveshur mund të krijojë një ndërfaqe. Komanda më poshtë është qëllimisht minimale, dhe qëllimi i vetëm i saj është të ndajë një problem të hostit nga një problem i compose. Nëse dështon, asnjë ndryshim në compose nuk do të ndihmojë.

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'

Një nyje që mungon në host do të thotë që moduli tun nuk është i disponueshëm, gjë që është rregullim nga ana e hostit dhe jo e kontejnerit. Një nyje që ekziston por nuk hapet brenda kontejnerit tregon aksesin e pajisjes, dhe mesazhi do të thotë permission denied në vend të no such file. Radha e këtyre dy dështimeve është e gjithë diagnoza. Shkruani cilën patë, përpara se të ndryshoni ndonjë flamur.

Gabimet pas TUN janë probleme të tjera

Sapo shfaqet ndërfaqja, dështimi tjetër ka pronar tjetër. Gabimet e vërtetimit tregojnë se tuneli arriti te serveri dhe kredencialet u refuzuan, prandaj ndryshimet e aftësisë nuk do të ndihmojnë. Një tunel që vendoset ndërsa aplikacionet ende dështojnë tregon rrugë, përcjellje, zgjidhje DNS brenda kontejnerit ose vetë strukturën e rrjetit të kontejnerit. Secila prej tyre është një pyetje e zakonshme rrjeti të cilës leja TUN nuk mund t'i përgjigjet. Përsëritja e provës origjinale pas çdo ndryshimi i pengon dështimet të shkrihen në një përshtypje të vetme.

Kopjimi i çdo cilësimi nga një shembull që funksionon është mënyra se si një rregullim minimal bëhet një përkufizim shërbimi i palexueshëm. Sillni vetëm ato që i nevojiten këtij vendosjeje dhe shkruani pse është secili aty.

Verifikoni ndërfaqen brenda kontejnerit

Kontrolloni ndërfaqen dhe grupin e aftësive nga brenda kontejnerit që po ekzekutohet dhe jo nga hosti. Komandat më poshtë tregojnë nyjën e pajisjes, listën e aftësive dhe nëse mund të krijohet fare një ndërfaqe. Ekzekutojini në të njëjtin kontejner që ekzekuton klientin, dhe instaloni mjetet nëse imazhi është minimal.

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

Një aftësi e pranishme në bounding set por që mungon në effective set sillet ndryshe nga një që nuk është dhënë kurrë, dhe capsh i tregon të dyja. Nëse nyja ekziston dhe aftësia është aty ndërsa krijimi ende dështon, mjedisi i ekzekutimit po imponon diçka tjetër, si një profil seccomp ose një politikë AppArmor që kufizon operacionin. Ky është një kufi i tretë, i dokumentuar nga mjedisi i ekzekutimit dhe jo nga aplikacioni.

Shkruani flamujt e kontejnerit, imazhin dhe gabimin e saktë të çdo përpjekjeje. Personi tjetër që lexon atë shënim mund të thotë cila derë ishte e mbyllur pa përsëritur të gjithë hetimin.

Artikuj të ngjashëm