LXD کنٹینر /dev/net/tun نہیں کھول سکتا؟ unix-char اندراج دیکھیں
VPN کلائنٹ کے استعمال سے پہلے LXD کو میزبان کا TUN آلہ کنٹینر میں دینا ہوتا ہے۔ دیکھیں unix-char کیا شامل کرتا ہے، کیا نہیں، اور اسے کیسے جانچا جائے۔
LXD میزبان کے حرفی آلے کو کنٹینر کے لیے آلہ نوڈ شامل کر کے ظاہر کرتا ہے، مہمان کو اسے بنانا سکھا کر نہیں۔ اگر کنٹینر میں /dev/net/tun نہ ہو تو آلہ میزبان پر ہو سکتا ہے اور مہمان پھر بھی اسے نہ کھول سکے۔ unix-char اندراج اس راستے کا منتظم کی طرف والا نصف ہے، اور یہ جان بوجھ کر مراعات یافتہ کنٹینر سے تنگ تر ہے۔ اسی لیے میزبان نوڈ اور کنٹینر نوڈ الگ الگ جانچ کے مستحق ہیں۔
طریقہ اتنا مختصر ہے کہ نظر میں رکھا جا سکے: LXD میزبان کا راستہ حل کرتا ہے، نمونے کے اندر مطابق نوڈ بناتا ہے اور آلے کو کنٹینر کے آلات cgroup میں شامل کرتا ہے۔ پھر مہمان عمل کو نوڈ کسی بھی کام کے لیے استعمال کرنے کے لیے اپنی اجازت اور صلاحیت درکار ہوتی ہے۔
unix-char اندراج درحقیقت کیا بدلتا ہے
unix-char آلہ LXD کو کہتا ہے کہ میزبان کا ایک حرفی آلہ کنٹینر کے اندر چنے گئے راستے پر ظاہر کرے۔ اندراج کے تین اہم حصے ہیں: منتظم کا استعمال کردہ آلہ لیبل، میزبان پر source راستہ اور وہ path جو مہمان دیکھتا ہے۔ صرف آخری دو ہی خود آلے کی وضاحت کرتے ہیں۔ ان میں سے کسی ایک میں ٹائپنگ کی غلطی ایسی جگہ نوڈ بناتی ہے جہاں کلائنٹ کبھی نہیں کھولتا۔
میزبان پر آلہ عام طور پر /dev/net/tun ہوتا ہے۔ کنٹینر کے اندر آپ وہی راستہ رکھ سکتے ہیں یا دوسرا چن سکتے ہیں، لیکن راستہ وہی ہونا چاہیے جس کی VPN کلائنٹ توقع کرتا ہے۔ /dev/net/tun رکھنا دوسری ترتیب کی دشواری سے بچاتا ہے، کیونکہ زیادہ تر کلائنٹ وہ راستہ بغیر پوچھے کھولتے ہیں۔
منتظم اندراج کو نمونے کے آغاز یا آلے کے گرم پلگ ہونے پر لاگو کرتا ہے۔ یہ مہمان میں کوئی ڈرائیور نقل نہیں کرتا اور سرنگ کا انٹرفیس نہیں بناتا۔ یہ نوڈ کو نظر آنے والا بناتا ہے اور کنٹینر کے آلات کے کنٹرول گروپ کے ذریعے رسائی کی اجازت دیتا ہے۔
آلے کا اعلان نمونے پر کریں، مہمان کے اندر نہیں
LXD انتظامی سیاق سے اندراج شامل کریں، نمونے اور بعد میں پہچانے جانے والے لیبل کا نام لیتے ہوئے۔ vpnbox نامی کنٹینر کے لیے حکم یہ ہے:
lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox
لیبل tun نمونے کی ترتیب تک ہی مقامی ہے۔ یہ انٹرفیس کا نام نہیں اور مہمان میں کسی چیز سے میل کھانا ضروری نہیں۔ اگر پروفائل پہلے ہی وہی آلہ دیتا ہے تو دوسرا اندراج اضافے کے بجائے ٹکراؤ پیدا کرتا ہے، اس لیے پہلے مؤثر ترتیب دیکھیں۔
کنٹینر کے اندر فائلیں ترمیم کرنا غلط پرت ہے۔ آغاز اسکرپٹ میں mknod مراعات یافتہ کنٹینر پر کام کرتا دکھ سکتا ہے، پھر دوبارہ تخلیق پر غائب ہو سکتا ہے یا کم مراعات والے پر ناکام ہو سکتا ہے۔ نمونے کے آلات کا مجموعہ منتظم کی ملکیت ہے؛ نوڈ بھی اسی کی ملکیت رہنے دیں۔
ملکیت اور موڈ کو مہمان عمل سے ہم آہنگ کریں
unix-char اندراج کنٹینر کے اندر نوڈ کے لیے uid, gid اور mode مقرر کر سکتا ہے۔ ہر صارف کے لیے آلہ کھولنے یا کنٹینر کو مراعات یافتہ موڈ میں بدلنے کے بجائے، VPN کلائنٹ چلانے والے اکاؤنٹ سے ہم آہنگ کرنے کے لیے انہیں استعمال کریں۔
نظر آنا اجازت کے برابر نہیں ہے۔ root کی ملکیت والا اور موڈ 600 والا نوڈ غیر مراعات یافتہ صارف کے طور پر چلنے والی خدمت کو نظر آتا ہے اور پھر بھی وہ اسے نہیں کھول سکتی۔ پہلے مہمان اکاؤنٹ دیکھیں، پھر ملکیت اسی اکاؤنٹ کو دیں، اور موڈ کو کلائنٹ کی ضرورت سے زیادہ چوڑا نہ رکھیں۔
عمل کو سرنگ کا انٹرفیس ترتیب دینے کی صلاحیت بھی درکار ہے، عام طور پر کنٹینر کے نیٹ ورک نام کی جگہ میں CAP_NET_ADMIN۔ آلہ دینا وہ صلاحیت نہیں دیتا، اور صلاحیت دینا آلہ فراہم نہیں کرتا؛ یہ الگ الگ تقاضے ہیں۔
جانیں کہ اندراج کیا نہیں دیتا
نظر آنے والا نوڈ چلتا ہوا VPN نہیں ہے۔ کلائنٹ پیکیج اب بھی نصب کرنا ہوگا، پروفائل اب بھی درست ہونی چاہیے، اور خدمت اب بھی شروع ہونی چاہیے۔ تصدیق، راستے اور DNS کلائنٹ کا ہی کام رہتے ہیں، اور وہاں کی ناکامی آلہ اندراج کے غلط ہونے کا ثبوت نہیں۔
systemd ایک اور پابندی شامل کر سکتا ہے۔ DeviceAllow یا سخت آلہ پالیسی والی اکائی کنٹینر منتظم کے فراہم کردہ نوڈ تک رسائی سے انکار کر سکتی ہے۔ جب نوڈ موجود ہو مگر خدمت اجازت کی خرابی بتائے تو اکائی کی آلہ پالیسی دیکھیں، اور کنٹینر چوڑا کرنے کے بجائے وہی پالیسی بدلیں۔
گرم پلگ اختیاری اور واضح ہے۔ required=false والے اندراج کو ماخذ راستہ درکار ہے اور میزبان کا آلہ بدلنے پر یہ ظاہر یا غائب ہو سکتا ہے۔ ایسا زندگی نامہ آنے جانے والے ہارڈویئر کے لیے موزوں ہے؛ VPN کو بوٹ پر درکار TUN آلے کے لیے، اختیاری اندراج خدمت کو اس کی پیشگی شرط موجود ہونے سے پہلے شروع ہونے دے سکتا ہے۔
نظر آنا، کھولنا اور انٹرفیس اسی ترتیب سے جانچیں
پہلے مطلوبہ کنٹینر کے اندر نوڈ کی تصدیق کریں۔ راستہ، بڑی اور چھوٹی تعداد اور ملکیت میزبان کے آلے اور آپ کے شامل کردہ اندراج سے میل کھانی چاہیے۔ نوڈ نہ ہونے کا مطلب ہے کہ منتظم نے اندراج لاگو نہیں کیا، یا کسی دوسرے نمونے پر لاگو کیا ہے۔
lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'
پھر تصدیق کریں کہ خدمت کا اکاؤنٹ اسے کھول سکتا ہے۔ اس اکاؤنٹ کے طور پر مختصر آزمائش ملکیت کے مسئلے کو خدمت کے مسئلے سے الگ کرتی ہے۔ آخر میں کلائنٹ شروع کریں اور تصدیق کریں کہ سرنگ کا انٹرفیس ظاہر ہوتا ہے؛ صرف وہی تیسرا مرحلہ پورا راستہ ثابت کرتا ہے، کیونکہ پہلے دو گزر سکتے ہیں جبکہ کلائنٹ پروفائل یا صلاحیت اب بھی غلط ہو۔
تبدیلی کی منظوری پر نمونہ، آلہ لیبل، میزبان ماخذ، مہمان راستہ اور مالک اکاؤنٹ درج کریں۔ وہی پانچ اقدار وہ ہیں جو بعد کی دوبارہ تخلیق، منتقلی یا پروفائل تبدیلی کو محفوظ رکھنی چاہئیں، اور سیاق و سباق کے بغیر اجازت کی خرابی کے مقابلے میں ان کا موازنہ کہیں آسان ہے۔