OpenVPN nínú Docker kò lè ṣí /dev/net/tun: kí ni ó ṣe àìsí
Nódù TUN àti agbára nẹ́tíwọ́kì jẹ́ ìyọ̀ǹda méjì ọ̀tọ̀ọ̀tọ̀. Ṣí àwọn méjèèjì, kí o sì ka àṣìṣe tó kàn ní ìbámu pẹ̀lú àwọn ipò tirẹ̀ dípò kíkó àtúnṣe kan náà lẹ́ẹ̀kan sí i.
Àwọn àwòrán kọ́ńtéínà lè ní gbogbo fáìlì OpenVPN bínárì àti ìṣètò tí wọ́n nílò kí wọ́n sì ṣì kùnà ní ìpè nẹ́tíwọ́kì àkọ́kọ́. Àṣìṣe náà dárúkọ /dev/net/tun nítorí pé ohun-èlò náà béèrè fún ẹ̀ka TUN lọ́wọ́ kẹ́rnẹ́lì, kọ́ńtéínà náà sì kò ní nódù ẹ̀rọ tàbí agbára láti dá ọ̀kan. Ìwọ̀nyí jẹ́ ìyọ̀ǹda méjì ọ̀tọ̀ọ̀tọ̀, títún ọ̀kan ṣe á fi èkejì sílẹ̀ ní ibi tí ó wà.
Pípín wọn kò gbà ju àṣẹ kan fún ọ̀kọ̀ọ̀kan. Ìfiránṣẹ́ àṣìṣe lẹ́yìn náà sọ fún ọ ní ààlà tí o gbà dájú tí o dúró.
Nódù ẹ̀rọ àti agbára jẹ́ ilẹ̀kùn méjì
Nódù ẹ̀rọ jẹ́ ohun kan nínú ẹ̀rọ fáìlì, nítorí náà kọ́ńtéínà gbọ́dọ̀ rí i nínú ààyè orúkọ ìsopọ̀ tirẹ̀. Agbára jẹ́ ìyọ̀ǹda, nítorí náà ìlànà nílò CAP_NET_ADMIN nínú ààyè orúkọ tí a ó ti dá ẹ̀ka náà. Pípá ẹ̀rọ náà kọjá láìsí agbára fún ọ ní nódù tí ó ṣí àti ioctl tí ó kùnà. Fífún ni agbára láìsí ẹ̀rọ jẹ́ kí ohun-èlò náà má lè ṣí nkankan rárá, ìdí nìyí tí àwọn méjèèjì fi máa ń farahàn papọ̀ nínú àwọn àpẹẹrẹ.
Ìṣètò devices ti Docker yí ẹ̀rọ olùgbàlejò náà sínú kọ́ńtéínà, nígbà tí cap_add ń ṣàtúnṣe àkójọ agbára. Bind mount ti ọ̀nà kan náà fi fáìlì náà hàn láìlo ìtumọ̀ àwọlé ẹ̀rọ.
Tún un ṣe ní ìta fáìlì Compose
Kí o tó ṣàtúnṣe iṣẹ́ náà, ṣàyẹ̀wò pé olùgbàlejò ní ẹ̀rọ náà àti pé kọ́ńtéínà òfo lè dá ẹ̀ka kan. Àṣẹ tó wà nísàlẹ̀ kéré púpọ̀ lọ́nà àmọ̀ọ́mọ̀, àti pé èròǹgbà rẹ̀ kan ṣoṣo ni láti ya ìṣòro olùgbàlejò kúrò nínú ìṣòro compose. Tí ó bá kùnà, kò sí ìyípadà compose tí yóò ràn.
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'
Àìsí nódù lórí olùgbàlejò túmọ̀ sí pé mọ́dùùlù tun kò sí, èyí jẹ́ àtúnṣe ní ẹ̀gbẹ́ olùgbàlejò kì í ṣe ti kọ́ńtéínà. Nódù tí ó wà ṣùgbọ́n tí a kò lè ṣí nínú kọ́ńtéínà ń tọ́ka sí àwọlé ẹ̀rọ, ìfiránṣẹ́ yóò sì sọ permission denied dípò no such file. Ìtòlẹ́sẹẹsẹ àwọn ìkùnà méjì yìí ni ìwádìí gbogbo. Kọ ẹyọ tí o rí sílẹ̀ kí o tó yí àsíá kankan padà.
Àwọn àṣìṣe lẹ́yìn TUN jẹ́ ìṣòro mìíràn
Bí ẹ̀ka náà bá farahàn, ìkùnà tó kàn ní olówó mìíràn. Àwọn àṣìṣe ìjẹ́rìí túmọ̀ sí pé ọ̀nà náà dé ọ̀dọ̀ sáfà àti pé a kọ àwọn ẹ̀rí náà, nítorí náà àwọn ìyípadà agbára kò ní ràn. Ọ̀nà tí ń dá sílẹ̀ nígbà tí àwọn ohun-èlò ṣì ń kùnà ń tọ́ka sí àwọn ipa-ọ̀nà, gbígbé, yíyan DNS nínú kọ́ńtéínà tàbí ìtòlẹ́sẹẹsẹ nẹ́tíwọ́kì kọ́ńtéínà fúnra rẹ̀. Ọ̀kọ̀ọ̀kan wọ̀nyí jẹ́ ìbéèrè nẹ́tíwọ́kì lasan tí ìyọ̀ǹda TUN kò lè dáhùn. Kíkó ìdánwò ìpilẹ̀ lẹ́yìn ìyípadà kọ̀ọ̀kan máa ń dá àwọn ìkùnà dúró láti dàpọ̀ di ìmọ̀lára kan.
Dídàákọ gbogbo ìṣètò láti inú àpẹẹrẹ tí ń ṣiṣẹ́ ni ọ̀nà tí àtúnṣe kékeré fi di ìtumọ̀ iṣẹ́ tí kò ṣeé kà. Mú kìkì àwọn tí ìṣàfilọ́lẹ̀ yìí nílò wá kí o sì kọ ìdí tí ọ̀kọ̀ọ̀kan fi wà.
Ṣàyẹ̀wò ẹ̀ka náà nínú kọ́ńtéínà
Ṣàyẹ̀wò ẹ̀ka náà àti àkójọ agbára láti inú kọ́ńtéínà tí ń ṣiṣẹ́ kì í ṣe láti olùgbàlejò. Àwọn àṣẹ nísàlẹ̀ fi nódù ẹ̀rọ, àkójọ agbára àti bóyá a lè dá ẹ̀ka rárá hàn. Ṣe wọ́n nínú kọ́ńtéínà kan náà tí ń ṣiṣẹ́ àbáwọlé náà, kí o sì fi àwọn irinṣẹ́ sórí tí àwòrán bá kéré.
ls -l /dev/net/tun
capsh --print | grep -i net_admin
ip link add dev tun9 type tun && ip link show tun9
Agbára tí ó wà nínú bounding set ṣùgbọ́n tí kò sí nínú effective set ń hùwà yàtọ̀ sí èyí tí a kò fún rí, capsh sì fi àwọn méjèèjì hàn. Tí nódù bá wà àti agbára bá wà nígbà tí dídá ṣì ń kùnà, àyíká ìṣiṣẹ́ ń fi ohun mìíràn fipá múlẹ̀, bíi profáìlì seccomp tàbí ìlànà AppArmor tí ń dín ìṣe náà kù. Ìyẹn jẹ́ ààlà kẹta, tí àyíká ìṣiṣẹ́ ń kọ sílẹ̀ kì í ṣe ohun-èlò náà.
Kọ àwọn àsíá kọ́ńtéínà, àwòrán àti àṣìṣe gbára kan fún ìgbìyànjú kọ̀ọ̀kan. Ẹni tó kàn tí yóò ka àkọsílẹ̀ yẹn yóò lè sọ ilẹ̀kùn tí ó tiì dé láìtún ìwádìí gbogbo ṣe.