شغّل الـ VPN داخل مساحة الاسم الخاصة به، وشغّل تطبيقًا واحدًا هناك، ومع ذلك يخرج المرور عبر مسار المضيف. لا شيء معطوب: فمساحة الاسم لا تحكم إلا العمليات التي تدخلها، وقد جاء التسريب من عملية لم تدخلها قط. الواجهات والعناوين والمسارات وقواعد جدار الحماية والمقابس هي ما تملكه مساحة الاسم. أما الملفات والحسابات والخدمات قيد التشغيل فليست كذلك، ومن هنا تأتي معظم المفاجآت.

ما تملكه مساحة الاسم، وأين يُولد المقبس

انقل واجهة إلى مساحة اسم فيفقدها المضيف؛ وابنِ نفقًا في الداخل فلا يراه المضيف. هذه هي الآلية خلف الـ VPN المحصور بمساحة اسم: فالجهاز والمسارات المؤدية إليه يعيشان في سياق لا تبلغه إلا العمليات المختارة. ويحتفظ المضيف بمساره الافتراضي، فيبقى كل ما في الخارج دون مساس.

سياق الإنشاء لا يقل أهمية عن الموقع الحالي في WireGuard: يُربط مقبس UDP في مساحة الاسم التي أُنشئت فيها الواجهة، حتى بعد أن ينتقل الجهاز إلى مكان آخر. وأي جدول توجيه تتبع الحزم المشفّرة يعتمد على مكان الولادة ذلك. وعندما يبقى المقبس في سياق بلا مسار إلى النظير، يبحث النداء فلا تخرج المصافحة أبدًا. افحص مكان ولادته، ثم موقعه الحالي.

ما لا تعزله مساحة الاسم

لا شيء هنا يفصل أنظمة الملفات أو الحسابات أو الأسرار، ولا تظهر أي من تلك الحدود لأنك أنشأت مساحة اسم. إعداد المحلّل ملف، لذا لا تزال العملية في الداخل قادرة على قراءة إعداد يوجّه إلى محلّل المضيف وإرسال استعلامها عبر المسار الذي يعنيه ذلك. والتطبيق الذي يسلّم الطلب إلى وسيط أو خدمة نظام قيد التشغيل يتضمن عملية في سياق مختلف تمامًا. وكلاهما طلبان لم يكن الحد مقصودًا للإجابة عنهما.

الإصلاح هو ملف خاص بكل مساحة اسم عند /etc/netns/<name>/resolv.conf، أو bind mount لملف مُجهّز، موجّه إلى محلّل يمكن الوصول إليه من الداخل. تعديل /etc/resolv.conf على المضيف لا يغيّر شيئًا مما تراه مساحة الاسم.

وضع العمليات هو وسيلة التحكم

العزل الذي تحصل عليه هو بالضبط عزل العمليات التي تبدأها في الداخل. الصدفة التي تُبدأ عبر مساعد exec في مساحة الاسم، وكل ما تفرخه، تبقى في الداخل؛ أما تطبيق سطح المكتب الذي يُطلق من جلسة المضيف فلا. أنشئ السياق، وانقل الجهاز، ثم أثبت كلا الجانبين:

ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show

اقرأ الأول wg show من داخل مساحة الاسم والثاني من المضيف، وتوقّع أن يسرد أحدهما فقط النظير. إذا سرد كلاهما، فالجهاز لم ينتقل قط؛ وإذا لم يسرد أي منهما، فقد ذهب إلى مكان آخر. وعندما يكون المشغّل مدير خدمة، فالملف الوحدوي هو ما يجب تعديله، لا اختصار سطح المكتب. والوحدة التي تفتقر إلى إعداد مساحة الاسم تبدأ الخدمة في سياق المضيف وتنقض التصميم بهدوء.

اختبر من سياق التطبيق

شغّل الفحص بالبرنامج التنفيذي نفسه وبالمستخدم نفسه الذي يستخدمه التطبيق، داخل مساحة الاسم. أدرج DNS وكلا عائلتي العناوين، لأن مسار IPv6 لم تفكر فيه قط هو مخرج شائع. والفحص من صدفتك الخاصة يثبت فقط أن صدفتك معزولة.

ثم شغّل الفحص نفسه على المضيف وتأكد من أن الإجابات تختلف: عنوان النفق والمخرج المقصود في الداخل، ومسار المضيف ومخرج المكتب في الخارج، والمحلّل بالاسم. سمِّ مساحات الأسماء بعد النشر لا بعد البروتوكول، حتى لا يخلط سكربت التنظيف بين اثنتين منها.

التوجيه وسياسة الفشل والتنظيف

بالنسبة لبوابة، شغّل التوجيه عمدًا وقرّر ما ينبغي أن يحدث عندما يسقط النفق. مساحة الاسم لا تمنع المسارات التي تثبّتها داخلها، لذا سيُستخدم مسار احتياطي إلى المضيف إذا أنشأت واحدًا. هذا قرار سياسة، وينبغي تدوينه قبل أن يختبره انقطاع.

سجّل أسماء مساحات الأسماء والواجهات ومن يملك الإعداد، حتى لا يحذف التنظيف إلا ما أنشأه النشر. إعادة ضبط شبكة المضيف أثناء التراجع تحوّل التنظيف إلى انقطاع. أما network_namespaces(7) فهي صفحة قصيرة وتستحق القراءة قبل أن تصمم ذلك المسار.

مقالات ذات صلة