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

النواة تقرّر، لا البرنامج الخفي

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

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

امنح كل مثيل مجموعته الخاصة من الموارد

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

dev tun-office
route-nopull
pull-filter ignore "redirect-gateway"

dev tun-lab
route-nopull

route-nopull يبقي المسارات التي يدفعها الخادم خارج الجدول المحلي، وهو ما تريده عندما يُفترض أن تكون جداول السياسة صريحة. أما ما إذا كان خادم معيّن يدفع أيضًا خيار redirect-gateway، وما إذا كانت نسخة العميل لديك تدعم صيغة الفلترة، فمن الأفضل التحقق منه في الدليل بدلًا من افتراضه.

اكتب المصفوفة: المصدر، الجدول، الجهاز

لكل مجموعة عملاء، أضف قاعدة تختار جدولًا حسب عنوان المصدر، ثم ضع المسار المقصود في ذلك الجدول:

ip rule add from 10.8.1.0/24 lookup 100 priority 1000
ip rule add from 10.9.1.0/24 lookup 200 priority 1000
ip route add default dev tun-office table 100
ip route add default dev tun-lab table 200

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

نقل النفق نفسه ليس داخل مجموعة عملاء

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

أبقِ جلسة الإدارة المحلية ومسار الطبقة السفلى خارج جداول السياسة صراحةً. اكتب تلك الاستثناءات بجانب المصفوفة؛ فهي جزء من التصميم، لا حلًا بديلًا يُعاد اكتشافه أثناء حادث.

اختيار المسار لا يمنح الإذن

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

ترجمة المصدر قرار ثالث، وينبغي أن تُقيَّد بمجموعة المصدر وبجهاز النفق الذي يحملها فعليًا. أضف سلسلة مخصّصة للمثيلين بدلًا من تفريغ سلسلة ما بعد التوجيه، لأن خدمات غير ذات صلة قد تملك مدخلات هناك، والتفريغ يزيلها بصمت.

ماذا يحدث عند سقوط أحد النفقين

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

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

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