كيف تمنح شبكة اختبار واحدة مخرج WireGuard خاصًا بها
احصر شبكة محلية واحدة في مخرج WireGuard بجدول توجيه مخصص وحارس غير قابل للوصول، مع احتفاظ البوابة بمسارها الافتراضي العادي عبر WAN.
تحل ثلاثة تصاميم المشكلة المعملية نفسها: شبكة محلية صغيرة يجب أن تخرج عبر نظير WireGuard بينما تحتفظ البوابة نفسها بوصلة الصعود العادية. الاختصار المغري هو نقل المسار الافتراضي للموجّه إلى داخل النفق، وهذا يكسر مسار إدارة الصندوق نفسه وكل ما يمرره سواه. الخيار المثير للاهتمام هو التوجيه بالسياسة محصورًا في واجهة واحدة وبادئة واحدة. اختر بينها بالإجابة عن ثلاثة أسئلة تخص الجهاز الذي تملكه فعلًا.
حدد أين يقيم المخرج
السؤال الأول: هل يمرر هذا المضيف حركة شيء آخر؟ بوابة معملية مخصصة يمكنها أن تعيش مع سياسة تمرير ترفض كل شيء افتراضيًا. أما موجّه له واجبات إنتاج فلا يستطيع، ووضع مجموعة قواعد منافسة فوق جدار ناري مُدار هو الطريقة التي تُجدول بها الانقطاعات. الثاني: هل تستطيع امتلاك كائني سياسة وترتيبهما عبر عمليات إعادة التشغيل؟ الثالث: هل يصرّح النظير الذي لديك بعنوان مصدر النفق ويمنح خروجًا إلى الإنترنت؟ النظير الذي لا يكشف سوى شبكة خاصة منتج مختلف، ولا يصلح أي تغيير محلي في التوجيه ذلك. إن كانت أي إجابة لا، فضع المخرج في فضاء أسماء أو في جهاز افتراضي يُرمى بعد الاستخدام بدلًا من ذلك.
فضاء الأسماء أو الجهاز الافتراضي يستهلك ذاكرة ويمنحك نطاق أثر نظيفًا. التوجيه بالسياسة يستهلك قاعدتين ويترك لك صندوقًا واحدًا لتنقيحه.
اختر المخرج الذي يصرّح بمصدرك
معظم الإخفاقات في هذا المعمل تحدث قبل وجود قاعدة جدار ناري واحدة. يجب أن يقبل مشغّل المخرج عنوان المصدر الذي تحمله حزمك بعد الترجمة، وهو في هذا التصميم عنوان النفق لا بادئة الشبكة المحلية. لهذا ينتمي التمويه إلى التصميم من البداية لا كإضافة متأخرة.
أكّد ثلاثة أمور مع المشغّل: أن النظير يصرّح بعنوان نفقك، وأنه يمرر IPv4 بدلًا من أن ينتهي عنده، وأنه يطبّق NAT على الخروج. من دون الأول تصل حزمك ثم تتبخر. ومن دون الثالث تخرج بمصدر خاص وتموت في القفزة التالية. ثم تحقق من أن wg-quick لا يثبّت مساره الافتراضي الخاص، وهو ما يمنعه Table = off؛ ذلك الإعداد يمنع إنشاء المسارات لا فحوص AllowedIPs لدى النظير ولا معالجته لـ DNS.
كائنان للسياسة يقومان بالتوجيه
التوجيه يحتاج جدولًا وقاعدة. يحمل الجدول مسارين: بادئة الشبكة المحلية خارج واجهة الشبكة المحلية، ومسار افتراضي خارج النفق. أما القاعدة فتدفع الحركة التي تصل على واجهة الشبكة المحلية وتحمل تلك البادئة إلى الجدول. استخدم محدّد iif إلى جانب مطابقة المصدر، لأن حزم WireGuard الخاصة بالبوابة تنشأ محليًا ولا تطابق أبدًا واجهة قادمة.
يأتي الحارس قبل البحث لا بعده. ذلك الترتيب هو خاصية الأمان كلها في التصميم.
الحارس قاعدة ثانية على المحدّد نفسه حكمها unreachable. أعطها أولوية رقمية أعلى كي يظل البحث هو الفائز ما دام النفق قائمًا. وعندما يختفي مسار النفق يعيد البحث لا شيء، فيوقف الحارس البحث بدلًا من تركه يسقط إلى المسار الافتراضي عبر WAN في الجدول الرئيسي.
ip rule add from 192.168.50.0/24 iif lan0 lookup 51861 pref 1000
ip rule add from 192.168.50.0/24 iif lan0 unreachable pref 1001
ip route add table 51861 default dev wg0
أغلق ثغرة الرجوع قبل أن تفتحها
ثبّت الحارس أولًا والبحث ثانيًا. فعل ذلك بالعكس يترك نافذة من ثوانٍ تستطيع فيها حركة عميل الاختبار الوصول إلى وصلة الصعود.
المرشّح يكمل الصورة. في خطاف forward اقبل اتجاه الشبكة المحلية نحو النفق للبادئة التجريبية واتجاه العودة القائم، ثم أسقط كل شيء آخر؛ أما NAT لتلك البادئة على واجهة النفق فيوضع في postrouting. ترك policy drop على سلسلة التمرير هو ما يحوّل المسار المفقود إلى صمت بدلًا من تسريب. يحتاج ترشيح المسار العكسي إلى الوضع المتساهل على واجهة النفق، لأن مصدرًا عامًا يصل بعد فك التغليف يكون أفضل مسار عكسي له على جانب WAN. يأخذ Linux القيمة الأعلى بين قيمة all وقيمة الواجهة، لذا ضبط واجهة النفق ليس مثل إضعاف التحقق في كل مكان.
أثبته بحالة الفشل
اسأل النواة سؤالًا دقيقًا بتسمية عنوان مصدر العميل والواجهة التي يصل عليها. البحث من دون الاثنين يجيب سؤالًا مختلفًا وسيبدو صحيحًا في الحالتين. ثم انظر إلى عدادات الجدار الناري وحالة النقل لدى النظير وخدمة العميل نفسها.
اختبر الإزالة على نحو سليم. أوقف النفق مع ترك القاعدة والمرشّح في مكانهما: ينبغي أن يتعثر العميل وأن تستمر حركة البوابة نفسها في العمل. ثم أوقف النظير دون لمس الواجهة المحلية، وهي الحالة التي تكشف التصاميم المعتمدة على وجود المسار وحده. وأخيرًا أعد التشغيل وأعد فحص ترتيب القواعد، لأن خطاف تفكيك يزيل الحارس يعيد التصميم كله إلى الجدول الرئيسي. سجّل رقم الجدول والأولويات وأسماء الواجهات في تذكرة التغيير، لأن الشخص التالي الذي سيضيف قاعدة هو من سيكسر هذا.