مسار VPN أم قاعدة جدار الحماية: أيّهما يُسقط الحزمة؟
المسار يختار الطريق والمرشّح يقرّر الإذن. تحقّق من كليهما لنفس المصدر والوجهة والاتجاه قبل أن توسّع قاعدة جدار حماية.
قراران مستقلان يقعان على الحزمة نفسها، وكلٌّ منهما قد يُنهي الطلب بصمت. يختار بحث التوجيه واجهةً والخطوة التالية، ثم يقرّر مرشّح الحزم ما إذا كان يُسمح بذلك المزيج. تخبرك مهلة الاتصال بأنّ أحد الاثنين رفض، لا أيّهما. رتّب المراحل بالترتيب، وعندها يتوقّف الإصلاح عادةً عن كونه تخمينًا.
قراران، حزمة واحدة، مالكَان
يستشير بحث التوجيه قواعد السياسة أولًا، ثم الجدول الذي تشير إليه، ويختار البادئة الأكثر تحديدًا التي تطابق الوجهة. العميل الذي ثبّت مسار نفق يملك ذلك القرار، ولا شيء في قاعدة جدار الحماية يمكن أن يحلّ محلّه. وعندما يشير البحث إلى مكان غير متوقّع، تعمل كل مرحلة لاحقة على الحزمة الخطأ.
الترشيح منفصل. على مضيف Linux تقسم خطّافات netfilter حركة المرور حسب الجهة التي تخصّها الحزمة: الخروج يغادر الجهاز، والدخول ينتهي عليه، والتمرير يعبره. البوّابة التي تقبل عملاء VPN وتوجّههم إلى شبكة LAN تحتاج مسار التمرير، وهو بالضبط السلسلة التي تتركها معظم الإعدادات الافتراضية فارغة.
اختيار المصدر ينتمي إلى القرار نفسه، وهنا تختبئ معظم حالات عدم التطابق. يختار النواة عنوان مصدر من الواجهة الصادرة ما لم يسمِّ المسار عنوانًا، لذا فإن قاعدة ترشيح كُتبت لشبكة LAN الفرعية لا تطابق أبدًا حزمةً تخرج بعنوان النفق.
اقرأ ما اختاره البحث فعليًا
اطبع القرار بدلًا من استنتاجه. يحلّ الأمر أدناه المسار الذي ستستخدمه النواة لتلك الوجهة، بما في ذلك الواجهة والمصدر الذي ستختاره:
ip route get 10.8.0.5 ip route get 10.8.0.5 from 192.0.2.44 ip rule show ip route show table all | sed -n '1,40p'
كثيرًا ما يثبّت عملاء VPN قواعد سياسة بأولويات أدنى من الجدول الرئيسي، لذا فإن جدولًا رئيسيًا نظيفًا لا يثبت شيئًا بمفرده. قارن أولويات القواعد بالجداول التي تختارها، وتحقق مما إذا كان مسار النفق يصمد بعد إعادة الاتصال بدلًا من إضافته يدويًا مرة واحدة.
يضيف IPsec القائم على السياسة مرحلة مطابقة ثالثة لا يغطّيها التوجيه، كما تصف ملاحظات التمرير لدى strongSwan لإعدادات النفق والنقل. تختار سياسة الأمان الحركة حسب البادئة والبروتوكول، بينما يقرّر المسار فقط إلى أين ستذهب حزمة غير محمية. الشبكة الفرعية الموجَّهة بلا محدِّد مطابق إمّا تبقى غير محمية أو تُسقَط، حسب الإعداد، ولا تبدو أي من النتيجتين مشكلة جدار حماية. اطبع السياسة وقارن محدِّداتها بالبادئات التي توقّعت أن يحملها النفق.
الترشيح يُطبَّق عند خطّاف، لا عند مسار
القاعدة التي تسمح بمستمع VPN هي قاعدة تخصّ حركة المرور الموجّهة إلى البوّابة نفسها. لا تقول شيئًا عن العملاء الذين يصلون إلى مضيفات خلف تلك البوّابة، لأن حركة المرور الممرَّرة تعبر سلسلة مختلفة. قراءة مجموعة القواعد كقائمة مسطّحة واحدة هي السبب المعتاد في أن قاعدة تبدو صحيحة لا تُفعّل أبدًا.
تحسم العدّادات السؤال بسرعة. القاعدة التي عدّاد حزمها صفر لم تُصل أبدًا، وهذا يشير إلى السلسلة الخطأ أو الواجهة الخطأ أو إسقاط أسبق. أما القاعدة ذات العدّاد المتزايد تحت سياسة إسقاط فهي الحدّ الذي كنت تبحث عنه، والحزمة تُهمَل لا تُوجَّه خطأً.
أرسل مسبارًا عبر المسار الذي يستخدمه العميل
الاختبارات التي تُجرى على البوّابة نفسها تمرّ عبر الخروج والدخول، بعنوان المصدر الخاص بالبوّابة. هذا مسار مختلف عن طلب العميل الممرَّر، لذا فإن curl محليًا ناجحًا يثبت أقل مما يبدو. اختبر من الجهاز الذي يفشل، أو ثبّت الواجهة والمصدر صراحةً.
nc -vz -w 3 10.8.0.5 443 ping -c 3 -W 1 10.8.0.5 tcpdump -ni any host 10.8.0.5 and port 443 iptables -vnL FORWARD --line-numbers nft list ruleset | sed -n '1,60p'
التقاط على الطرفين يفصل الحالات المتبقية. حزمة SYN تغادر العميل ولا تصل أبدًا تعني التوجيه أو التشفير أو قائمة وصول أعلى المنبع. وحزمة SYN تصل ولا تجد ردًّا تعني الخدمة أو مرشّح مضيفها، ولم يكن النفق هو المشكلة أصلًا.
حركة العودة تستحق نظرة خاصة. التوجيه غير المتماثل مع ترشيح المسار العكسي يُسقِط الردود التي تصل على الواجهة الخطأ، ويظهر ذلك كاتصال أحادي الاتجاه لا كمنفذ محجوب. تحقق من قيمة sysctl قبل لوم جدار الحماية على عَرَض لم يسبّبه.
التسجيل يعمل كرأي ثانٍ، لا كخطوة أولى. عبارة تسجيل مؤقتة على سلسلة التمرير تسمّي الواجهة والعناوين التي أصابتها، ويسهل إزالتها لاحقًا. اتركها دائمًا في مكانها وستكون قد بنيت مشكلة حجم سجلات بدلًا من إجابة.
ضع كل تغيير حيث يصمد بعد إعادة الاتصال
المسار المضاف بـ ip route add يعيش حتى تنخفض الواجهة. احفظه في ملف تعريف الاتصال بدلًا من ذلك: يقبل NetworkManager مسارات إضافية على الاتصال، ويحتفظ بها netplan عبر عمليات الإقلاع. تنطبق القاعدة نفسها على استثناء جدار حماية جهة العميل، الذي يزول بعد إعادة التحميل التالية.
قواعد جهة الخادم تنتمي إلى ملف الإعداد الذي تحمّله الخدمة عند البدء، لا إلى جلسة تفاعلية تنتهي عند إغلاقها. اكتب القاعدة، وأعد التحميل، وتأكّد من أن العدّاد تحرّك، لأن إعادة تحميل رفضت الصياغة تُبقي مجموعة القواعد القديمة في مكانها بصمت.
ثم كرّر طلب التطبيق الأصلي من البداية إلى النهاية وسجّل أي طبقة تغيّرت. إصلاح المسار الذي احتاج أيضًا إلى تغيير في المرشّح سيفشل مع ذلك، ويُقرأ الفشل الثاني بسهولة أكبر بكثير بعد أن تعرف أن الأول زال. دوّن التاريخ وإصدار العميل بجانب النتيجة، لأن إعدادات التوجيه والترشيح الافتراضية تتحرك كلتاهما بين الإصدارات. أبقِ تلك الملاحظة على التذكرة ليبدأ الشخص التالي من حيث توقفت بدلًا من تكرار المسار ذي المرحلتين.