تطبيق لينكس عادي يستخدم VPN دون لمس TUN
البرنامج الخفي يملك جهاز TUN والنفق؛ التطبيقات تفتح المقابس فقط. أبقِ صلاحية الإعداد والوصول إلى الشبكة كحدّين منفصلين.
المتصفح الذي يستخدم VPN لينكس قائمًا لا يفتح /dev/net/tun. إنه يفتح مقبسًا، وتقرر النواة عبر أي واجهة تغادر حزم ذلك المقبس. العملية التي أنشأت النفق تؤدي مهمة مختلفة عن العملية التي تحمل حركتها. إبقاء هذين الدورين منفصلين يجيب عن معظم أسئلة الصلاحيات قبل أن تُطرح.
تتبَّع حزمة واحدة من المقبس إلى النفق
تطبيق عادي يستدعي connect أو send، فتبحث النواة عن مسار إلى الوجهة. إن كان المسار المختار يشير إلى واجهة النفق، تُوضع الحزمة في طابور الجهاز الذي يقرأه البرنامج الخفي للـ VPN. يشفّرها البرنامج الخفي ويرسلها عبر الواجهة الفيزيائية. كل سهم في هذا الوصف موضع يمكن فيه الإجابة عن سؤال صلاحيات.
لا شيء في ذلك المسار يتطلب أن يعرف التطبيق شيئًا عن الجهاز. يحتفظ البرنامج الخفي بوصف الملف وينفّذ عمليات الواجهة، بينما لا يرى التطبيق إلا واجهة شبكة عادية.
ارسم النصفين مرة واحدة، تصبح أسئلة الصلاحيات أسهل في التحديد. النصف الأعلى هو عالم التطبيقات، والنصف الأدنى ينتمي إلى البرنامج الخفي.
حدّد من يحتاج الجهاز ومن لا يحتاجه
إنشاء واجهة TUN أو الارتباط بها يتطلب الوصول إلى الجهاز إضافة إلى القدرة على تهيئته، ولهذا تبدأ خدمة VPN مدعومة بسلطة إدارة الشبكة أو تستخدم مساعدًا متمتعًا بامتيازات. هذا الشرط يخص البرنامج الخفي. وهو لا يقول شيئًا عن المتصفح أو عميل قاعدة البيانات أو أداة نقل الملفات. الخدمة التي تحتاج القدرة تحتاجها لخطوة إعدادها هي، لا لعملائها.
بعد أن يصبح المسار والسياسة في مكانهما، تستخدم عملية عادية المسار الناتج عبر نداءات المقبس المعتادة. لا تحتاج عقدة الجهاز، ولا تحتاج root.
تغيير أذونات الجهاز ليس وسيلة لمنح تطبيق وصولًا إلى وجهة. إنه ينقل حدّ الجهاز إلى مكان آخر فحسب.
تحقق من مساحة الأسماء التي يعمل فيها التطبيق فعليًا
الحاوية، أو مساحة أسماء شبكة ثانية، تمنح عملياتها مجموعة واجهات وجدول مسارات منفصلين. النفق على المضيف لا يظهر هناك تلقائيًا، ولا يغيّر ذلك أي قدر من تغييرات أذونات الجهاز. سيمرّ التطبيق ببساطة عبر ما توفره تلك المساحة. لذلك لا يمكن لصورة حاوية أن ترث نفق المضيف عن غير قصد.
تحقق باستخدام ip netns list و ip -n NAME route، أو بفحص رابط مساحة الأسماء الخاص بالعملية. الجواب عادةً مرئي في أمر واحد.
يمكن أيضًا منح مستخدمين على المضيف نفسه مسارين مختلفين بالسياسة. هذا قرار شبكي لا دليل على ملكية الجهاز.
افصل القدرات عن سياسة الشبكة
بعض الأدوات تحتاج أكثر من مقبس. التقاط الحزم يحتاج مقبسًا خامًا، وتغيير المسارات يحتاج سلطة إدارة. تلك عمليات منفصلة بمنح منفصلة، ومنح واحدة منها لا ينبغي أن يُقرأ كشرط عام لاستخدام VPN.
البرنامج الذي ينفّذ نفقًا خاصًا به حالة ثالثة. إنه يفتح TUN فعلًا لأنه يتولى دور البرنامج الخفي، ولهذا يحتاج امتيازات البرنامج الخفي.
سمِّ العملية قبل تسمية الامتياز. الفصل بينهما عادةً أسهل مما يبدوان.
تحقق من الفصل بحسابين
وصّل النفق بصفته الخدمة، ثم شغّل التطبيق كمستخدم عادي وأكّد أنه يصل إلى المورد الخاص. افحص ip route get للوجهة من صدفة ذلك المستخدم لترى أي واجهة اختيرت. إذا كان المسار صحيحًا وفشل الاتصال رغم ذلك، فالمشكلة في السياسة لا في الامتياز.
التصميم الناتج هو أقل امتياز مع حدّ صريح: مكوّن واحد يملك الإعداد وموارد النفق، وأحمال العمل تحتفظ بحساباتها المعتادة، وسياسة الشبكة تقرر ما يُسمح بمروره. تشغيل كل شيء بصفة root يطوي تلك الأدوار دون أن يشرح شيئًا.