توجيه السياسات في OpenWrt: السلسلة التي تلتقط DNS المحلي
استعلامات العملاء واستعلامات الموجّه نفسه تدخل خطافات مختلفة. سياسة موجّهة إلى prerouting تحمل كل استعلام من الشبكة المحلية وتترك الموجّه على وصلة مزوّد الخدمة.
يحلّ العملاء على الشبكة المحلية عبر النفق، أما استعلامات الموجّه نفسه فلا تفعل ذلك بصمت. تحديثات الحزم ومزامنة الوقت وDNS الديناميكي تغادر كلها عبر الوصلة العادية بينما يأخذ كل استعلام مُمرَّر VPN، ولا شيء في الواجهة يوحي بوجود مسارين مختلفين. التفسير ليس خطأً في السياسة بل مسألة أي خطاف يرى الحزمة. تدفقان، عنوان محلّل واحد، وواحد فقط منهما يعبر الموجّه. فصل التدفقين هو الإصلاح كله.
تدفقان، عنوان محلّل واحد
التدفق الأول هو ما يتصوره الناس. يسأل عميل محلّل الموجّه، فيمرر المحلّل الاستعلام إلى المنبع، وتلك الحزمة المُمرَّرة تعبر الموجّه في طريقها إلى الخارج. تلك الحزمة مرئية لأي شيء يراقب حركة المرور المُمرَّرة.
التدفق الثاني لا يصل من أي مكان أبدًا. الموجّه ينشئه، لذا لا توجد حزمة واردة ولا خطوة تمرير يجب مطابقتها.
قد يستهدف كلاهما عنوان المحلّل نفسه، وهذا بالضبط سبب سهولة تفويت الفرق. الوجهة نفسها، المنشأ مختلف، السلسلة مختلفة. بمجرد أن ترى المنشأ، يتبع بقية التشخيص.
الحزم المُمرَّرة والمولّدة محليًا تدخل بشكل مختلف
تُقيَّم حركة المرور المُمرَّرة عند وصولها من واجهة أخرى. تعرض حزم توجيه السياسات ذلك كسلسلة prerouting، والقاعدة الموضوعة هناك ترى كل حزمة تعبر الموجّه. لهذا تتصرف استعلامات العملاء بالضبط كما تصف السياسة، ولهذا يتجاهلها الموجّه. القاعدة ليست خاطئة، لكنها معلّقة بخطاف لا يبلغه الموجّه أبدًا. انقلها، فيبدأ المطابق نفسه بالعمل.
حركة المرور المولّدة محليًا ينشئها عملية على الموجّه وتدخل مسار الإخراج بدلًا من ذلك. يوجّهها قرار الموجّه نفسه ولا تلاقي السياسة إلا إذا كانت السياسة تغطي تلك السلسلة. لا توجد واجهة واردة للمطابقة ولا قرار تمرير للمراقبة.
هذه خاصية لمكان ولادة الحزم لا لأي حزمة برمجية بعينها. القاعدة المكتوبة لسلسلة واحدة ليس لها رأي في الأخرى ببساطة. لا يغيّر ذلك أي قدر من ضبط القواعد.
اختر سلسلة الإخراج ثم ضيّق المطابقة
الإصلاح هو ربط النية نفسها بسلسلة الإخراج أيضًا، أو نقل القاعدة إلى هناك عندما تكون استعلامات الموجّه نفسه هي ما يهمك. في إعداد OpenWrt المبني على حزمة توجيه السياسات، يعني ذلك اختيار output بدلًا من prerouting في إعداد سلسلة القاعدة. أبقِ القاعدتين إذا كانت الفئتان تحتاجان إلى التغطية.
ثم ضيّق ما تطابقه القاعدة. عناوين المحلّل الوجهة على المنفذ الذي يستخدمه المحلّل فعليًا قرار أصغر بكثير من إرسال كل ما ينشئه الموجّه إلى النفق.
أبقِ القاعدتين صريحتين بدلًا من محاولة كتابة قاعدة واحدة تغطي السلسلتين. القواعد المنفصلة أسهل في القراءة، وهي تتيح لك تعطيل مسار الموجّه دون إزعاج حركة العملاء أثناء التنقيح. كما أنها تجعل العدادات ذات معنى واحدًا في كل مرة.
أبقِ نقل النفق نفسه خارج القاعدة
الاتصال الخارجي للنفق ينشئه الموجّه أيضًا. القاعدة التي ترسل كل حركة المرور المولّدة محليًا إلى النفق ستوجّه النفق عبر نفسه، ولن يبدأ إطلاقًا.
وصول الإدارة هو الضحية الثانية. الجلسات الإدارية المنشأة من الموجّه، أو الردود عليها، يمكن أن تُسحب إلى النفق بقاعدة محلية واسعة جدًا وتصبح غير قابلة للوصول من الشبكة المحلية.
استبعد نقطة نهاية النفق من المطابقة، وأبقِ القاعدة محصورة في عناوين المحلّل. هذا يكفي لمتطلب DNS وصغير بما يكفي للتفكير فيه.
اختبر كلتا الفئتين، لا واحدة
راقب الموجّه وهو ينشئ استعلامه الخاص ولاحظ أي واجهة حملته. كرّر البحث من مضيف على الشبكة المحلية ولاحظ المسار الذي سلكه. عدادات قواعد السياسة تجعل الجوابين مرئيين دون تخمين.
تعامل مع النتائج كاستنتاجين. عميل يحلّ عبر النفق لا يقول شيئًا عن الموجّه، وموجّه يحلّ بشكل صحيح لا يقول شيئًا عن عميل على مستمع مختلف. اكتبهما سطرين منفصلين في سجل التغيير.
تحقق من المنفذ أيضًا: قاعدة تطابق منفذ الوجهة 53 تغفل محلّلًا يُبلَغ عبر DNS over TLS على 853 أو نقطة نهاية HTTPS. طابق النقل الذي يستخدمه المنبع المُهيّأ فعليًا، فيُغلق التسريب للسبب الصحيح.