Hotunan kwantena na iya ɗauke da duk OpenVPN binary da fayilolin saitin da suke buƙata kuma har yanzu su kasa a kiran hanyar sadarwa na farko. Kuskuren ya ambaci /dev/net/tun saboda aikace-aikacen ya nemi kernel ɗin TUN interface kuma kwantenan ba shi da node ɗin na’urar ko ikon ƙirƙirar ɗaya. Waɗannan izini ne daban-daban guda biyu, kuma gyara ɗaya yana barin ɗayan daidai inda yake.

Raba su yana buƙatar umarni ɗaya kowanne. Saƙon kuskure bayan haka yana gaya maka a wace iyaka kake tsaye a zahiri.

Node ɗin na’ura da ikon kofofi biyu ne

Node ɗin na’ura abu ne na tsarin fayil, don haka kwantena na buƙatar ganinsa a cikin mount namespace ɗinsa. Ikon izini ne, don haka tsarin yana buƙatar CAP_NET_ADMIN a cikin namespace ɗin da za a ƙirƙiri interface ɗin. Ba da na’urar ba tare da ikon ba yana ba ka node da ke buɗewa da ioctl da ke kasawa. Ba da ikon ba tare da na’urar ba yana barin aikace-aikacen ya kasa buɗe komai, shi ya sa biyun sukan bayyana tare a misalai.

Saitin devices na Docker yana tsara na’urar host cikin kwantenan, yayin da cap_add ke daidaita saitin ikon. Bind mount na wannan hanyar yana sanya fayil ɗin a gani ba tare da amfani da ma’anar shiga na’urar ba.

Maimaita shi a wajen fayil ɗin Compose

Kafin gyara sabis ɗin, tabbatar cewa host ɗin yana da na’urar kuma kwantena tsirara na iya ƙirƙirar interface. Umarnin da ke ƙasa da gangan ne kaɗan, kuma manufarsa ɗaya ce ta raba matsalar host daga matsalar compose. Idan ya kasa, babu wani canjin compose da zai taimaka.

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'

Rashin node a host ɗin yana nufin module ɗin tun ba ya samuwa, wanda gyara ne a ɓangaren host ba na kwantenan ba. Node da yake akwai amma ba a iya buɗe shi a cikin kwantenan yana nuni ga shiga na’urar, kuma saƙon zai ce permission denied maimakon no such file. Tsarin waɗannan kasawa biyu shine duk binciken. Rubuta wanda ka gani kafin ka canza flag.

Kuskuren bayan TUN matsaloli ne daban

Da zarar interface ɗin ya bayyana, kasawar ta gaba tana da wani mai shi. Kuskuren tabbatarwa yana nufin tunnel ɗin ya isa server kuma an ƙi bayanan shiga, don haka canje-canjen ikon ba za su taimaka ba. Tunnel da ke kafawa yayin da aikace-aikace ke ci gaba da kasawa yana nuni ga hanyoyi, turawa, warware DNS a cikin kwantenan ko tsarin hanyar sadarwar kwantenan kansa. Kowanne daga cikinsu tambaya ce ta yau da kullum ta hanyar sadarwa da izinin TUN ba zai iya amsawa ba. Maimaita gwajin asali bayan kowane canji yana hana kasawar haɗuwa cikin ra’ayi ɗaya.

Kwafin kowane saiti daga misali mai aiki shine hanyar da gyara kaɗan ke zama bayanin sabis marar karantawa. Kawo waɗanda wannan turawar take buƙata kawai kuma rubuta dalilin kowanne.

Tabbatar da interface ɗin cikin kwantenan

Duba interface ɗin da saitin ikon daga cikin kwantenan da ke gudana ba daga host ba. Umarnin da ke ƙasa suna nuna node ɗin na’urar, jerin ikon, da ko za a iya ƙirƙirar interface kwata-kwata. Gudanar da su a cikin kwantenan da ke gudanar da client ɗin, kuma shigar da kayan aiki idan hoton kaɗan ne.

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

Ikon da ke cikin bounding set amma babu shi a effective set yana da hali daban da wanda ba a taɓa bayarwa ba, kuma capsh yana nuna duka biyun. Idan node ɗin yana nan kuma ikon yana nan yayin da ƙirƙira ke ci gaba da kasawa, runtime ɗin yana tilasta wani abu daban, kamar seccomp profile ko manufar AppArmor da ke iyakance aikin. Wannan iyaka ce ta uku, wadda runtime ke rubuta ba aikace-aikacen ba.

Rubuta flags ɗin kwantenan, hoton da ainihin kuskure daga kowane ƙoƙari. Mutum na gaba da ya karanta wannan bayanin zai iya gaya wace ƙofa aka rufe ba tare da maimaita duk binciken ba.

Labarai masu alaƙa