د VPN پیرودونکی په کنټینر کې کېږدئ او تاسو ته په داخلي توګه د تونل سره یوه د نومونو فضا ترلاسه کوئ، نه هغه هوسټ چې خپله ټوله ترافیک له VPN له لارې لیږي۔ دا جلا پروژې دي، او دوی یو ګڼل هغه لاره ده چې کنټینرونه ناڅاپه امتیازي کېږي۔ دا لارښود یوازې لومړی پوښي: یو بیاکتل شوی عکس، یو ساتل شوی پروفایل او د پیرودونکي هغه پروسه چې خپلې شبکې د نومونو فضا ته محدوده ده۔

له هغه artifact پیل کړئ چې چا دمخه تصویب کړی دی۔ لاندې ګامونه د هغه عکس فرض کوي چې د openvpn اجرایي فایل او بشپړ پیرودونکي پروفایل لري، چې تصدیق پاڼه او کیلي مواد یې د ماونټ په داخل کې دمخه حل شوي۔ دوی سافټویر نه جوړوي، اسناد نه صادروي او د root پرته چلېدونکي چاپېریالونه او د Windows اصلي کنټینرونه نه پوښي، چې هر یو یې ځواب بدلوي۔

کنټینر څه ترلاسه کوي او څه نه

پروفایل او هر هغه څه چې ورته اشاره کوي په یوه سیمه‌ایز فولډر کې د محدودو اجازتو سره وساتئ، یوازې-لوستلو ته ماونټ شوی۔ په پروفایل کې نسبي لارې باید د همدې ماونټ په داخل کې حل شي؛ دا هغه جزئیات دي چې خلک یې له لاسه ورکوي کله چې تصدیق پاڼه له پروفایل یوه فولډر پورته وي او کنټینر هغه هیڅکله نه ویني۔

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"]

هغه فایل درې شیان ورکوي او بل څه نه غواړي۔ که ستاسو د ځای پرځای کولو تګلاره وایي، د عکس حواله باید د digest سره پین شي، او پروفایل باید بیاکتل شوی وي، نه هغه کاپي چې چا په هوسټ کې په هماغه ځای کې سمه کړې۔

دلته یوازې-لوستل یعنې کنټینر ستاسو د هوسټ فایلونه نشي بدلولی؛ دې ته نه وایي چې کنټینر ستاسو ماونټ شوې خصوصي کیلي نشي لوستلی۔ دا د ماونټ ټول هدف دی، او همدا لامل دی چې د فایل اجازتونه، مالکیت او دا چې راز څنګه هوسټ ته ورسېد، لا هم مهم دي۔ هیڅکله د کمانډ کرښې په سر پټنوم مه ورکوئ او نه یې د عکس په طبقې کې پخوئ، ځکه دواړه په هغو ځایونو کې پاتې کېږي چې وروسته یې نشئ پاکولی۔

وړتیاوې، entrypoint او د دوی ترمنځ تله

دوه تنظیمات اړین دي او دوی بې‌اړیکې کارونه کوي۔ NET_ADMIN د کنټینر د نومونو فضا په داخل کې د انټرفیسونو او لارو د لاسوهنې اجازه ورکوي۔ د وسیلې ننوتل /dev/net/tun پروسې ته اجازه ورکوي چې د تونل وسیله په بشپړه توګه پرانیزي۔ یو له بل پرته ورکول روښانه ناکامي رامنځته کوي، چې اسانه ده: نه‌شته TUN وسیله پرانیستلو پر مهال ناکامېږي، خو نه‌شته وړتیا هغه وخت ناکامېږي چې پیرودونکی انټرفیس تنظیمول غواړي۔

له دې هیڅ یو privileged: true نه توجیه کوي۔ امتیازي کنټینر ټولې وړتیاوې او د وسایلو لاسرسی ترلاسه کوي، او دا د دې کاري بار له اړتیا څخه ډېر لوی ورکړه ده۔ د اجرایي چاپېریال د امتیازاتو او وړتیاوو حواله تشریح کوي چې دا ورکړه څومره لرې رسېږي۔ که یو chart یا بلاګ پوسټ یې غواړي، لومړی وګورئ چې اړتیا په رښتیا د وسیلې نه‌شته لار وه که نه‌شته وړتیا۔

entrypoint باندې لیکل هغه برخه ده چې چیچي۔ openvpn مستقیم غوښتل د عادي عکس لپاره سم دي او د هر هغه محصول عکس لپاره غلط دي چې د پیل سکریپټ یې د ډیمون له چلولو دمخه د اور دېوال قواعد، د حل کوونکي فایلونه یا اسناد تیاروي۔ د هغه سکریپټ باندې لیکل تیاري پرېږدي او تاسو له نیمګړي تنظیم شوي نومونو فضا کې پورته شوي تونل سره پاتې کوئ۔

پیرودونکی په مخکیني پلان کې چلوئ او اجازه ورکړئ چې د کنټینر اصلي پروسه وي۔ هغه پروسه چې ډیمون کېږي سمدلاسه وتلې، کنټینر په حلقه کې بیا پیلېږي، او هغه لاګونه چې تاسو ورته اړتیا لرئ په بیا پیلېدو کې خپاره دي چې ټول یو شان ښکاري۔

د نومونو فضا له داخله تایید کړئ، نه له هوسټ

سټیک پورته کړئ، په لاګ کې تایید کړئ چې پیرودونکی نښلول شوي حالت ته رسېدلی، بیا هغه د نومونو فضا وګورئ چې په رښتیا تونل لري۔

docker compose up -d
docker compose logs --tail 40 vpn
docker compose exec vpn ip -br addr
docker compose exec vpn ip route

د پتې لیست باید د حوض څخه د پتې سره تونل انټرفیس وښیي، او د لارو جدول باید هغه لیږل شوې منزلونه وښیي چې ورته اشاره کوي۔ که انټرفیس نه وي، پیرودونکی هیڅکله د هغه جوړولو ټکي ته نه دی رسېدلی۔ که شته خو هیڅ لار یې نه کاروي، د لټون ځای push یا د لارو اختیارونه دي۔

بیا هغه منزل چې تاسو ته مهم دی د هغې نومونو فضا څخه چې باید تونل وکاروي، د اپلیکیشن سره او نه یوازې ping سره وآزمویئ۔ د نومونو حل یوه جلا ناکامي ده چې په څرګنده توګه د آزموینې وړ ده: لیږل شوی DNS پته پخپله د کنټینر حل کوونکی نه تازه کوي، او هغه خپلواک پیرودونکی چې push له پامه غورځوي نومونه د هغه څه له لارې حل کوي چې عکس تنظیم کړی دی۔

جلا شوی حالت د قرارداد برخه ده

د بیا نښلولو چلند خپله څېړنه غواړي، ځکه د بیا پیل تګلاره ثابتوي چې پروسه بیا پیلېږي او د دې په اړه څه نه وایي چې ترافیک په منځ کې څه کوي۔ تونل ودروئ، پلان شوې منزل وآزمویئ او وګورئ چې اړیکه ردېږي، ځړېږي که د کنټینر د عادي لارې له لارې په چوپتیا بریالۍ کېږي۔ وروستی نتیجه مهمه ده، او په روغ لاګ کې نه لیدل کېږي۔

که کاري بار باید هیڅکله عادي لاره ونه کاروي، دا په څرګنده توګه د اور دېوال قواعدو او د نومونو فضا په داخل کې د چمتوالي سیګنال سره ډیزاین کړئ۔ Kill switch هغه تګلاره ده چې تاسو لیکئ او آزموئ، نه هغه ځانګړتیا چې په کنټینر کې پیرودونکی چلولو سره یې میراث ترلاسه کوئ۔

په پای کې، حد په یاد ولرئ: دا لارې د کنټینر د نومونو فضا کې ژوند کوي او د هوسټ د لارښوونې جدول نه بدلوي۔ د Docker د لیږلو، ژباړې او اور دېوال قواعد د باندې لارې برخه پاتې کېږي، او خپور شوی پورټ VPN انټرفیس نه دی۔

اړوندې مقالې