د کانټینر عکسونه کولای شي هر هغه OpenVPN باینري او ترتیب فایلونه ولري چې ورته اړتیا لري او بیا هم په لومړي شبکې بل کې پاتې راشي. تېروتنه د /dev/net/tun نوم اخلي ځکه چې اپلیکیشن له کرنل څخه د TUN انټرفیس غوښتنه کړې وه او کانټینر نه د وسیلې نوډ درلود او نه یې د جوړولو وړتیا. دا دوه جلا اجازې دي، او یوې ته سمون ورکول بلې ته په هماغه ځای کې پریږدي چې وه.

د دوی جلا کول هر یو لپاره یو حکم غواړي. له هغې وروسته تېروتنه پیغام تاسو ته وایي چې تاسو واقعاً په کومه پوله ولاړ وئ.

د وسیلې نوډ او وړتیا دوه دروازې دي

د وسیلې نوډ د فایل سیستم شی دی، نو کانټینر باید هغه په خپل مونټ نومفضا کې وویني. وړتیا اجازه ده، نو پروسې ته په هغه نومفضا کې CAP_NET_ADMIN ته اړتیا ده چې انټرفیس به پکې جوړ شي. د وسیلې پرته له وړتیا تېرول تاسو ته یو نوډ درکوي چې خلاصیږي او یو ioctl چې پاتې راځي. پرته له وسیلې وړتیا ورکول اپلیکیشن له دې وړ نه کوي چې څه پرانیزي، نو ځکه دواړه معمولاً په مثالونو کې یوځای ښکاري.

د Docker د devices ترتیب د کوربه وسیله په کانټینر کې نقشه کوي، پداسې حال کې چې cap_add د وړتیاوو ټولګه تنظیموي. د هماغه لار bind mount فایل په لید کې ږدي پرته له دې چې د وسیلې لاسرسي معنا پلي کړي.

دا د Compose فایل څخه بهر بیا تولید کړئ

د خدمت د سمون دمخه وګورئ چې کوربه وسیله لري او بربنډ کانټینر کولای شي انټرفیس جوړ کړي. لاندې حکم په قصد کم دی، او یوازینی هدف یې د کوربه ستونزه د compose ستونزې څخه جلا کول دي. که پاتې راشي، هیڅ compose بدلون به مرسته ونه کړي.

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'

په کوربه کې د نوډ نشتوالی معنا دا ده چې tun ماډل شتون نلري، دا د کانټینر نه بلکه د کوربه اړخ سمون دی. نوډ چې شتون لري خو په کانټینر کې نه خلاصیږي، دا د وسیلې لاسرسي ته اشاره کوي، او پیغام به no such file نه بلکې permission denied ووایي. د دغو دوو پاتې کېدو ترتیب ټوله تشخیص دی. دمخه له دې چې کومه بیرغ بدل کړئ ولیکئ چې کوم یې لیدلی و.

له TUN وروسته تېروتنې مختلفې ستونزې دي

کله چې انټرفیس ښکاره شي، بله پاتې کېدنه بل مالک لري. د تصدیق تېروتنې معنا دا ده چې تونل سرور ته ورسېده او اعتبارونه رد شول، نو د وړتیا بدلونونه به مرسته ونه کړي. تونل چې جوړیږي پداسې حال کې چې اپلیکیشنونه لا هم پاتې راځي، د لارو، لیږد، په کانټینر کې د DNS حل یا د کانټینر خپل شبکې ترتیب ته اشاره کوي. هر یو له دغو یو عادي شبکې پوښتنه ده چې د TUN اجازه یې ځواب نه شي ویلی. له هر بدلون وروسته د اصلي ازموینې تکرار د دې مخه نیسي چې پاتې کېدنې په یوه تصور کې یوځای شي.

له کارېدونکي مثال څخه هر ترتیب کاپي کول هغه لار ده چې لږ سمون په نالیدونکي خدمت تعریف بدلوي. یوازې هغه راوړئ چې دا ځای پرځای کول ورته اړتیا لري او ولیکئ چې هر یو ولې هلته دی.

په کانټینر کې انټرفیس تایید کړئ

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

ls -l /dev/net/tun
capsh --print | grep -i net_admin
ip link add dev tun9 type tun && ip link show tun9

هغه وړتیا چې په bounding set کې ده خو په effective set کې نشته، له هغې سره چې هیڅکله نه ده ورکړل شوې توپیر لري، او capsh دواړه ښیي. که نوډ شتون ولري او وړتیا هم وي خو جوړول لا هم پاتې راځي، نو چلند چاپیریال بل څه پلي کوي، لکه د seccomp پروفایل یا د AppArmor تګلاره چې عملیه محدوده کوي. دا درېیمه پوله ده، چې اپلیکیشن نه بلکې چلند چاپیریال یې مستند کوي.

د کانټینر بیرغونه، عکس او د هرې هڅې دقیقه تېروتنه ولیکئ. راتلونکی کس چې دا یادښت ولولي کولای شي ووایي کومه دروازه بنده وه پرته له دې چې ټوله پلټنه تکرار کړي.

اړوندې مقالې