Kọ́ntéìnà tí kò lè dé ohunkóhun lẹ́yìn VPN ilé-iṣẹ́ máa ń gbé ní ààyè orúkọ nẹ́tíwọ́kì tí ó yàtọ̀ sí ti ọ̀nà abẹ́lẹ̀. Àwọn ipa ọ̀nà, àwọn sẹ́fà DNS àti àwọn àmì odi iná ti ẹ̀rọ agbàlejò jẹ́ ti àkójọpọ̀ ẹ̀rọ agbàlejò; kọ́ntéìnà nẹ́tíwọ́kì afárá ní tirẹ̀. Òtítọ́ kan ṣoṣo yìí ń ṣàlàyé ọ̀pọ̀ jùlọ àwọn ìròyìn tí ó dé ọ̀dọ̀ ẹgbẹ́ pẹpẹ, ó sì tún jẹ́ ìdí tí «VPN ti bàjẹ́» àti «Docker ń forí VPN» lè jẹ́ òdì ní àkókò kan náà. Ètò méjì tí ó yàtọ̀ gbáà ń fi ara pamọ́ sẹ́yìn àmì kan, nítorí náà dámọ̀ èyí tí ìwọ ní kí o tó yí ètò kankan padà.

Wádìí ẹni tí ààyè orúkọ ọ̀nà abẹ́lẹ̀ jẹ́ tirẹ̀

Lórí Docker Desktop fún macOS tàbí Windows, àwọn kọ́ntéìnà ń ṣiṣẹ́ nínú ẹ̀rọ fojú Linux. Ẹ̀rọ VPN tí a fi sórí kọ̀mpútà ń dá ọ̀nà abẹ́lẹ̀ sílẹ̀ nínú ètò ìṣiṣẹ́ kọ̀mpútà, ẹ̀rọ fojú kò sì rí i láé. Kò sí ètò kọ́ntéìnà tí ó tún èyí ṣe, nítorí ojú-ọ̀nà tí kọ́ntéìnà yóò nílò kò sí rárá ní ààyè orúkọ nẹ́tíwọ́kì rẹ̀.

Lórí ẹ̀rọ agbàlejò Linux, ọ̀nà abẹ́lẹ̀ wà ní ààyè orúkọ ẹ̀rọ agbàlejò, àwọn kọ́ntéìnà afárá sì máa ń dé ọ̀dọ̀ rẹ̀ nípasẹ̀ tábìlì ìtọ́nisọ́nà ẹ̀rọ agbàlejò pẹ̀lú NAT orísun tí a lò nígbà ìjáde. Nígbà tí ipa ọ̀nà yẹn bá kùnà, ìdí máa ń jẹ́ ètò ìfiránṣẹ́, àṣẹ́ ipa ọ̀nà yíyípadà tàbí ẹ̀ka nẹ́tíwọ́kì tí ó gorí ara wọn kì í ṣe ipa ọ̀nà tí ó sọnù. Jẹ́rìí i irú ayé wo nínú méjèèjì ìwọ wà kí o tó kà síwájú:

docker info --format '{{.OperatingSystem}}'
docker run --rm --net=host alpine ip route | head -5
docker run --rm alpine ip route | head -5

Ìyàtọ̀ láàrin àwọn tábìlì ìtọ́nisọ́nà méjì yẹn ni gbogbo ìṣòro lórí ojú-ìwé kan. Bí ojú ẹ̀rọ agbàlejò bá ní ojú-ọ̀nà abẹ́lẹ̀ tí ojú afárá kò ní, ìwọ ń wo ìpínyà ààyè orúkọ, gbogbo ohun mìíràn sì jẹ́ yíyàn bí a ṣe lè kọjá rẹ̀.

Nẹ́tíwọ́kì ẹ̀rọ agbàlejò jẹ́ ìdánwò, kì í ṣe àpẹẹrẹ

Ṣíṣe kọ́ntéìnà pẹ̀lú nẹ́tíwọ́kì ẹ̀rọ agbàlejò, èyí tí Docker ṣàlàyé gẹ́gẹ́ bí pínpín ààyè orúkọ nẹ́tíwọ́kì ẹ̀rọ agbàlejò, máa ń jẹ́ kí ó jogún ojú-ọ̀nà abẹ́lẹ̀ àti àwọn ipa ọ̀nà rẹ̀ tààrà. Bí ìbéèrè kan náà bá yọrí sí rere lẹ́yìn náà, ẹ̀kọ́ ipa ọ̀nà ti jẹ́rìí, ìkùnà sì jẹ́ ìpínyà ààyè orúkọ, kì í ṣe ẹ̀rí ìdánimọ̀, DNS tàbí òfin ìwọlé.

docker run --rm --net=host curl -sS -o /dev/null -w '%{http_code}\n' https://api.internal/health

Pa á mọ́ gẹ́gẹ́ bí àyẹ̀wò. Nẹ́tíwọ́kì ẹ̀rọ agbàlejò fi ìtẹ̀jáde ibùdókọ̀ àti ọ̀pọ̀ ìpínyà tí ìwọ fẹ́ láti kọ́ntéìnà sílẹ̀, lórí Docker Desktop sì ni «host» túmọ̀ sí ẹ̀rọ fojú, kì í ṣe kọ̀mpútà, nítorí náà àṣeyọrí tàbí ìkùnà níbẹ̀ lè ṣi ọ́ lọ́nà tí kò tọ́ bí o bá gbàgbé ẹ̀rọ agbàlejò tí o ń bá sọ̀rọ̀.

Ẹ̀rọ tun àti àwọn àǹfààní tí ó ń bá a dé

Ẹ̀rọ VPN nínú kọ́ntéìnà nílò ẹ̀rọ ọ̀nà abẹ́lẹ̀ àti àṣẹ láti ṣètò rẹ̀. Ọ̀nà kúkúrú tí ó wọ́pọ̀ ni --privileged, tí ó ń fi gbogbo ẹ̀rọ fúnni tí ó sì ń mú ètò ààbò rọ̀ jẹ́ jákèjádò kọ́ntéìnà. Èyí pọ̀ ju èyí tí iṣẹ́ yìí nílò lọ, ó sì ṣòro láti gbèjà ní àyẹ̀wò.

sudo modprobe tun
docker run --rm -it --device /dev/net/tun --cap-add NET_ADMIN myvpn-client

Ọ̀nà tóóró máa ń ṣe àwòrán ẹ̀rọ kan ṣoṣo tí ó sì ń fi agbára ìṣàkóso nẹ́tíwọ́kì kún un. Kọ́kọ́ gbé mọ́dùùlì sórí ẹ̀rọ agbàlejò kí gẹ̀gẹ̀ẹ́ náà lè wà. Bí kọ́ntéìnà bá bẹ̀rẹ̀ tí ẹ̀rọ VPN sì sọ pé kò lè ṣí ẹ̀rọ ọ̀nà abẹ́lẹ̀, ṣàyẹ̀wò àwòrán náà kí o tó fura sí profáìlì, nítorí àṣìṣe yẹn máa ń jẹ́ ti gbólóhùn gbọ̀ọ̀rọ̀.

Àpẹẹrẹ yìí tún túmọ̀ sí pé ẹ̀rọ VPN máa ń ṣiṣẹ́ fún kọ́ntéìnà kọ̀ọ̀kan. Ìyẹn ni ìdáhùn tí ó tọ́ nígbà tí ẹrù iṣẹ́ kọ̀ọ̀kan nílò ọ̀nà abẹ́lẹ̀ tirẹ̀, ìdáhùn tí kò sì tọ́ nígbà tí ìwọ kàn fẹ́ kí ọ̀nà abẹ́lẹ̀ ẹ̀rọ agbàlejò hàn, èyí tí ẹgbẹ́ pẹpẹ ro pé ìwọ ń ṣe.

NAT afárá yí orísun tí VPN ń rí padà

Pẹ̀lú afárá àkọ́kọ́, ìrìn àjò jáde kọ́ntéìnà ni a túmọ̀ sí àdírẹ́sì ẹ̀rọ agbàlejò. Nítorí náà lẹ́yìn VPN, ẹ̀gbẹ́ ilé-iṣẹ́ ń rí àdírẹ́sì ọ̀nà abẹ́lẹ̀ ẹ̀rọ agbàlejò kì í ṣe ti kọ́ntéìnà, àwọn òfin ìwọlé nípasẹ̀ orísun ń ṣe bí ẹni pé ẹ̀rọ agbàlejò rán ìbéèrè náà, kọ́ntéìnà méjì sì di aláìlèdàmọ̀ fún sẹ́fà VPN.

macvlan tàbí ipvlan ń fi àdírẹ́sì LAN fún kọ́ntéìnà ní àkókò yìí, èyí tí ó ń rànṣẹ́ ìwárí LAN tí ó sì ń jẹ́ kí kọ́ntéìnà dàbí ẹlẹgbẹ́ lórí ẹ̀ka. Ó tún ń forí ọ̀nà abẹ́lẹ̀ ẹ̀rọ agbàlejò pátápátá, nítorí náà irú kọ́ntéìnà bẹ́ẹ̀ kò ní dé àwọn ìpilẹ̀ àkọ́kọ́ VPN nìkan àyàfi bí VPN bá tún wà ní àárín LAN yẹn.

Àwọn ọ̀nà méjèèjì lẹ́gbẹ́; wọ́n ń dáhùn àwọn ìbéèrè tí ó yàtọ̀. Bí ìbéèrè bá jẹ́ «kọ́ntéìnà yìí gbọdọ̀ dé iṣẹ́ VPN nìkan», ìwọ ń yan láàrin ìtọ́nisọ́nà nípasẹ̀ ẹ̀rọ agbàlejò àti píparí ọ̀nà abẹ́lẹ̀ nínú kọ́ntéìnà. Kọ ìyàn yẹn kí o tó tẹ̀ ẹ́ jáde, kì í ṣe lẹ́yìn ìbéèrè àkọ́kọ́ tí ó kùnà. Ohunkóhun tí o bá yàn, ṣàkọsílẹ̀ àdírẹ́sì orísun tí ẹ̀gbẹ́ jíjìnnà yóò rí, nítorí ìyẹn ni àwọn òfin ìwọlé àti àwọn àkọsílẹ̀ rẹ̀ yóò fi hàn. Àpẹẹrẹ tí kò lè sọ àdírẹ́sì yẹn kò tíì parí.

DNS ń tẹ̀lé daemon, kì í ṣe ọ̀nà abẹ́lẹ̀

Kọ́ntéìnà ń gba ètò olùyẹ́jáde rẹ̀ nígbà ìbẹ̀rẹ̀, tí a dà kọ́ láti daemon tàbí láti àwòrán. Àwọn àdírẹ́sì tí VPN ń tì lẹ́yìn ìsopọ̀ máa ń dé pẹ́ jù fún àdàkọ yẹn, a sì ń tì wọ́n sí olùyẹ́jáde ẹ̀rọ agbàlejò kì í ṣe sínú kọ́ntéìnà.

Ṣètò olùyẹ́jáde ní àfihàn fún iṣẹ́ náà, tàbí tọ́ka rẹ̀ sí olùyẹ́jáde inú tí ó lè dé nípasẹ̀ ọ̀nà abẹ́lẹ̀. Kọ́ntéìnà tí ó ń yẹ́jáde orúkọ àdáni sí àdírẹ́sì gbogbogbò máa ń lo olùyẹ́jáde gbogbogbò, kò ń jìyà ipa ọ̀nà tí ó bàjẹ́, àtúnṣe sì wà nínú fáìlì compose tàbí ètò daemon.

Ìdí kanna náà kan ìbéèrè àdírẹ́sì ìjáde. Bí kọ́ntéìnà kọ̀ọ̀kan bá ní láti hàn láti àdírẹ́sì VPN tí ó yàtọ̀, ọ̀nà abẹ́lẹ̀ ẹ̀rọ agbàlejò kan kò lè pèsè rẹ̀ nítorí NAT ń kó wọn jọ sí orísun kan. Àwọn ọ̀nà tí ó lè ṣiṣẹ́ ni ẹ̀rọ VPN nínú ààyè orúkọ kọ́ntéìnà kọ̀ọ̀kan tàbí sidecar tí ó ní ọ̀nà abẹ́lẹ̀ tí ó sì ń pín àkójọpọ̀ rẹ̀, àwọn méjèèjì sì ń yí bí a ṣe ń dárúkọ ohun-èlò náà padà.

Àkójọ àyẹ̀wò kí o tó pa tikẹ́tì: dámọ̀ ààyè orúkọ tí ó ní ọ̀nà abẹ́lẹ̀, jẹ́rìí ipa ọ̀nà pẹ̀lú nẹ́tíwọ́kì ẹ̀rọ agbàlejò, ṣe àwòrán ẹ̀rọ tun tí ó nílò nìkan, rántí àdírẹ́sì orísun lẹ́yìn NAT, ṣètò olùyẹ́jáde ní àfihàn àti kà àwọn àdírẹ́sì ìjáde fún kọ́ntéìnà kọ̀ọ̀kan gẹ́gẹ́ bí ìpinnu ìmọ̀-ẹ̀rọ kì í ṣe àsíá.

Àwọn àpilẹ̀kọ tó jọra