OpenVPN nínú Docker: àdéhùn àkókò ìṣe tí kíláìntì kékeré nílò
Àwòrán tí a yẹ̀wò, profáìlì ààbò kan, àǹfààní TUN àti NET_ADMIN. Ohun tí kóńtéńà ń gbà, ohun tí kò gbọdọ̀ gbà àti bí a ṣe lè fi ẹ̀rí hàn pé tunnel náà ń ṣiṣẹ́.
Fi kíláìntì VPN sínú kóńtéńà, ìwọ yóò rí ààyè orúkọ kan tí tunnel wà nínú rẹ̀, kì í ṣe olùgbàlejò tí ń darí gbogbo ìrìnàjò rẹ̀ nípasẹ̀ VPN. Àwọn wọ̀nyí jẹ́ iṣẹ́ ọ̀tọ̀ọ̀tọ̀, àti pé kíkà wọ́n bí ọ̀kan ni ọ̀nà tí àwọn kóńtéńà fi ń di aláṣẹ ní àìròtẹ́lẹ̀. Ìtọ́sọ́nà yìí ń bo èyí àkọ́kọ́ nìkan: àwòrán kan tí a yẹ̀wò, profáìlì ààbò kan àti ìlànà kíláìntì tí a fi mọ́ ààyè orúkọ nẹ́tíwọ́kì rẹ̀.
Bẹ̀rẹ̀ pẹ̀lú ohun-èlò kan tí ẹnìkan ti fọwọ́ sí. Àwọn ìgbésẹ̀ ìsàlẹ̀ gbà pé àwòrán kan wà tí ó ní fáìlì ìṣe openvpn àti profáìlì kíláìntì pípé pẹ̀lú ìwé-ẹ̀rí àti ohun-èlò kọ́kọ́rọ́ tí a ti yanjú nínú ìsopọ̀. Wọn kò kọ́ sọ́fítíwéà, wọn kò ṣe ìdánimọ̀, wọn kò sì bo àwọn àyíká ìṣe tí kò ní root tàbí àwọn kóńtéńà Windows ìbílẹ̀, tí ọ̀kọ̀ọ̀kan wọn yóò yí ìdáhùn padà.
Ohun tí kóńtéńà ń gbà àti ohun tí kò gbà
Tọ́jú profáìlì àti gbogbo ohun tí ó tọ́ka sí nínú àkójọpọ̀ ìbílẹ̀ pẹ̀lú àwọn ẹ̀tọ́ tí a fi mọ̀, tí a sopọ̀ gẹ́gẹ́ bí kíkà nìkan. Àwọn ọ̀nà ìbáṣepọ̀ nínú profáìlì gbọdọ̀ yanjú nínú ìsopọ̀ yẹn; èyí ni kúlẹ̀kúlẹ̀ tí àwọn ènìyàn ń pàdánù nígbà tí ìwé-ẹ̀rí wà ní àkójọpọ̀ kan lókè profáìlì tí kóńtéńà kò sì rí i rárá.
services:
vpn:
image: ${VPN_CLIENT_IMAGE:?set the reviewed image reference}
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./vpn:/vpn:ro
working_dir: /vpn
entrypoint: ["openvpn"]
command: ["--config", "/vpn/client.ovpn"]
Fáìlì yẹn ń fúnni ní ohun mẹ́ta, kò sì béèrè ohunkóhun mìíràn. A gbọdọ̀ fi ìtọ́kasí àwòrán mọ́ pẹ̀lú digest bí ìlànà ìmújáde rẹ bá sọ bẹ́ẹ̀, profáìlì sì gbọdọ̀ jẹ́ èyí tí a yẹ̀wò, kì í ṣe ẹ̀dà tí ẹnìkan ṣàtúnṣe níbẹ̀ lórí olùgbàlejò.
Kíkà nìkan níbí túmọ̀ sí pé kóńtéńà kò lè yí àwọn fáìlì rẹ padà lórí olùgbàlejò; kò túmọ̀ sí pé kóńtéńà kò lè ka kọ́kọ́rọ́ àdáni tí o sopọ̀. Ìyẹn ni gbogbo èròǹgbà ìsopọ̀ náà, ìdí nìyẹn tí àwọn ẹ̀tọ́ fáìlì, ìní àti bí àṣírí náà ṣe dé lórí olùgbàlejò fi ṣì ṣe pàtàkì. Má ṣe kọjá ọ̀rọ̀-ìpamọ́ ní orí ìlà pàṣẹ, má sì ṣe dínà nínú ìpele àwòrán, nítorí àwọn méjèèjì ń wà ní àwọn ibi tí o kò lè tún ṣe mọ́.
Àwọn agbára, entrypoint àti ẹ̀wọ̀n tó wà láàrín wọn
Àwọn ètò méjì ni a nílò, wọ́n sì ń ṣe iṣẹ́ tí kò ní ìbáṣepọ̀. NET_ADMIN ń gbà ìfarapa àwọn ìkànnì àti àwọn ọ̀nà nínú ààyè orúkọ kóńtéńà. Ìforúkọ ẹ̀rọ /dev/net/tun ń gbà ìlànà náà láàyè láti ṣí ẹ̀rọ tunnel pátápátá. Fífúnni ní ọ̀kan láìsí èkejì ń mú ìkùnà tí ó ṣe kedere wá, èyí sì rọrùn: ẹ̀rọ TUN tí kò sí ń kùnà nígbà ṣíṣí, nígbà tí agbára tí kò sí ń kùnà nígbà tí kíláìntì bá gbìyànjú láti ṣètò ìkànnì.
Kò sí ọ̀kan nínú àwọn wọ̀nyí tí ń dá privileged: true láre. Kóńtéńà aláṣẹ ń gba gbogbo agbára pẹ̀lú àǹfààní ẹ̀rọ, èyí sì tóbi ju ohun tí iṣẹ́ yìí nílò lọ. ìtọ́kasí àwọn ẹ̀tọ́ àti agbára àyíká ìṣe ń ṣàlàyé bí ìfúnni yẹn ṣe jinlẹ̀ tó. Bí chart tàbí àkọsílẹ̀ blog bá béèrè rẹ̀, kọ́kọ́ yẹ̀wò bóyá ohun tí a nílò ni ọ̀nà ẹ̀rọ tí kò sí tàbí agbára tí kò sí.
Yíyí entrypoint padà ni apá tí ń jáni. Pípè openvpn tààrà tọ̀nà fún àwòrán lasan, ó sì tọ̀nà fún gbogbo àwòrán ọjà tí àkọsílẹ̀ ìbẹ̀rẹ̀ rẹ̀ ń pèsè àwọn òfin odì-iná, àwọn fáìlì olùyanjú tàbí àwọn ìdánimọ̀ kí ó tó ṣe daemon. Yíyí àkọsílẹ̀ náà padà ń fò àwọn ìmúrasílẹ̀ kọjá, ó sì fi ọ́ sílẹ̀ láti ṣàtúnyẹ̀wò tunnel tí ó dìde nínú ààyè orúkọ tí a ṣètò lórùn.
Ṣiṣẹ́ kíláìntì ní iwájú, jẹ́ kí ó sì jẹ́ ìlànà àkọ́kọ́ kóńtéńà. Ìlànà tí ó di daemon ń jáde lẹ́sẹ̀kẹsẹ̀, kóńtéńà ń tún bẹ̀rẹ̀ ní àyíká, àwọn àkọsílẹ̀ tí o nílò sì fọ́n káàkiri nínú àwọn ìmúbẹ̀rẹ̀ tí ó dàbí ara wọn.
Ṣàyẹ̀wò láti inú ààyè orúkọ, kì í ṣe láti orí olùgbàlejò
Gbé stack ró, jẹ́rìí nínú àkọsílẹ̀ pé kíláìntì ti dé ipò ìsopọ̀, lẹ́yìn náà ṣàyẹ̀wò ààyè orúkọ tí ó ń di tunnel mú gan-an.
docker compose up -d
docker compose logs --tail 40 vpn
docker compose exec vpn ip -br addr
docker compose exec vpn ip route
Àkójọ àwọn àdírẹ́sì gbọdọ̀ fi ìkànnì tunnel pẹ̀lú àdírẹ́sì láti inú púlù hàn, tábìlì àwọn ọ̀nà sì gbọdọ̀ fi àwọn ibi tí a ti ta sí tí ó ń tọ́ka sí i hàn. Bí ìkànnì kò bá sí, kíláìntì kò tíì dé ibi fífi í ṣẹ̀dá. Bí ó bá wà ṣùgbọ́n kò sí ọ̀nà tí ó ń lò ó, ibi tí a ó wò ni push tàbí àwọn àṣàyàn ọ̀nà.
Lẹ́yìn náà dán ibi tí ó ṣe pàtàkì sí ọ wò láti inú ààyè orúkọ tí ó yẹ kí ó lo tunnel, pẹ̀lú ohun-èlò kì í ṣe ping nìkan. Yíyanjú orúkọ jẹ́ ìkùnà ọ̀tọ̀ tí ó yẹ kí a dán wò ní kedere: àdírẹ́sì DNS tí a ti ta kò ń tun ìyájú kóńtéńà ṣe fúnra rẹ̀, kíláìntì olómìnira tí ó ṣàìkàsí push yóò yanjú orúkọ nípasẹ̀ ohun tí àwòrán ti ṣètò.
Ipò tí a ti já ká ni apá kan àdéhùn
Ìhùwàsí àtúnsopọ̀ nílò àyẹ̀wò tirẹ̀, nítorí ìlànà àtúníbẹ̀rẹ̀ ń fi hàn pé ìlànà ń tún bẹ̀rẹ̀, kò sì sọ nkankan nípa ohun tí ìrìnàjò ń ṣe ní àárín. Dá tunnel dúró, dán ibi tí a pinnu wò, kí o sì ṣàkíyèsí bóyá a kọ̀ ìsopọ̀, ó kọ́ sórí, tàbí ó ṣàṣeyọrí ní ìdákẹ́jẹ́ nípasẹ̀ ọ̀nà lasan kóńtéńà. Ìyọrísí ìkẹyìn ni èyí tí ó ṣe pàtàkì, kò sì hàn nínú àkọsílẹ̀ tí ó ní ìlera.
Bí iṣẹ́ náà kò bá gbọdọ̀ lo ọ̀nà lasan rárá, ṣe àpẹẹrẹ rẹ̀ ní kedere pẹ̀lú àwọn òfin odì-iná àti àmì ìmúrasílẹ̀ nínú ààyè orúkọ. Kill switch jẹ́ ìlànà tí o kọ tí o sì dán wò, kì í ṣe ẹ̀yà tí o jogún nípasẹ̀ ṣíṣe kíláìntì nínú kóńtéńà.
Níkẹyìn, rántí ààlà: àwọn ọ̀nà wọ̀nyí ń gbé nínú ààyè orúkọ kóńtéńà, wọn kò sì rọ́pò tábìlì ìdarí olùgbàlejò. Àwọn òfin ìfiránṣẹ́, ìtumọ̀ àti odì-iná ti Docker ṣì jẹ́ apá kan ọ̀nà ìta, póòtì tí a tẹ̀ jáde kì í sì ṣe ìkànnì VPN.