Ayaw buksan ng container ang tunnel nito, kaya idinagdag ang privileged flag, at ngayon gumagana na. Ang pagkakasunod-sunod na iyon ay nagpatunay lamang na kulang ang kahit isang pahintulot, at wala itong sinasabi kung alin. Ang privileged mode ay nagbibigay ng isang set ng mga kakayahan at access sa device na mas malawak kaysa kailangan ng isang tunnel interface.

Ano ang talagang binabago ng flag

Ang privileged container ay tumatanggap ng malawak na kakayahan at access sa mga device ng host, na mas malaking pagpapahintulot kaysa hinihingi ng network path. Ang eksaktong set ay dokumentado ng runtime environment at hindi itinatakda ng alamat, at ang dokumentasyon ng Docker tungkol sa pagpapatakbo ng container ay naglalarawan ng mga available na opsyon sa privilege. Isang pagbasa lang ay sapat para makita na ang tunnel ay maliit na bahagi ng kabuuan.

Dalawang mas makitid na pangangailangan ang sumasaklaw sa karamihan ng VPN container. Ang pag-configure ng interface ay nangangailangan ng kakayahan sa pamamahala ng network, at ang pagbukas ng tunnel device ay nangangailangan ng access sa partikular na device node na iyon. Ito ay magkakahiwalay na pagpapahintulot, at kahit pareho ay mas makitid pa rin kaysa pangkalahatang opsyon. Ang natitirang bahagi ng privileged set ay walang kinalaman sa tunnel. Umiiral ito para sa mga workload na talagang nangangailangan ng access sa antas ng host, at ang VPN container ay karaniwang hindi isa sa kanila.

Itugma ang bawat error sa isang paunang kundisyon

Sinasabi ng mensahe ng error kung aling paunang kundisyon ang kulang kung babasahin mo ito bago ito pigilan. Ang mensahe tungkol sa device node ay pinapangalanan ang device, ang mensahe tungkol sa operasyong hindi pinapayagan ay pinapangalanan ang isang kakayahan, at ang mensahe tungkol sa module o sysctl ay pinapangalanan ang suporta ng kernel. Bawat isa sa kanila ay may ibang pagwawasto, at isa lamang sa kanila ang kakayahan.

Ang kulang na configuration file ay nananatiling kulang pagkatapos ibigay ang lahat ng kakayahan, kaya kung minsan ay wala talagang binabago ang privileged mode. Nagsisimula ang container, nabibigo pa rin ang tunnel, at ang tunay na error ay hindi kailanman tungkol sa mga pahintulot. Ang suporta ng kernel ay ang ikatlong kaso at ang pinakamadaling mabasa nang mali. Ang module na hindi naka-load sa host ay hindi maaaring i-load mula sa loob ng isang container na walang privilege, at ang pagbibigay ng mas maraming kakayahan sa loob ng container ay hindi nagbabago sa kalagayan ng host.

Suriin ang pangangailangan, hindi ang sintomas

Magsimula sa pinakamaliit na invocation na dokumentado ng image, patakbuhin ito, at itago ang eksaktong teksto ng pagpalya. Pagkatapos ay magdagdag ng isang pagpapahintulot sa isang pagkakataon at itala kung aling dagdag ang nagbago ng resulta.

ls -l /dev/net/tun
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun image:tag
ip -br link show type tun

Ang container na nakikita ang device at may kakayahan pero nabibigo pa rin ay nagsasabi sa iyo na ang problema ay sa ibang lugar. Iyon ay isang kapaki-pakinabang na resulta, at hihintuin sana ito ng privileged mode.

Suriin din ang mga pahintulot ng device sa host, dahil ang tamang ibinigay na device node na may maling pagmamay-ari ng grupo ay gumagawa ng parehong error tulad ng kulang na pagpapahintulot.

Itala ang pinakamakitid na pagpapahintulot na gumagana

Itala ang bawat device at kakayahan na kailangan ng deployment, kasama ang error na nagbigay-katwiran sa kanila. Ang talaang iyon ang nagpapahintulot sa susunod na tao na mag-alis ng isang bagay nang ligtas, at iyon din ang hihilingin ng auditor kapag iniulat na privileged ang isang container.

Balikan din ang nakapaligid na konteksto, dahil ang host networking, host mounts at mga opsyon ng runtime environment ay bawat isa ay maaaring magpalawak ng epekto ng isang pagpapahintulot. Ang isang nakahiwalay na pagsubok sa laboratoryo na pinagsasama ang lahat ng iyon ay hindi isang production configuration, gaano man ito kahusay gumana. Subukan ang application, ang pag-uugali nito sa DNS at isang pagpalya ng tunnel bago mo sabihing tapos na ang deployment. Ang pahintulot na gumawa ng interface ay hindi patakaran sa palabas, at ang container na perpektong nakakapagtunnel ay nagruruta pa rin ng lahat ng ipinapadala ng application.

Kaugnay na mga artikulo