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

الإسقاط يحدث قبل أن يقرأ أي شيء الحزمة

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

العميل هنا يحمل 10.66.0.9 على نفقِه، ويجيب خادم OpenVPN على 192.168.80.10 داخل بادئة المكتب. يتّصل زميل على 192.168.80.25 بعنوان النفق، فيعبر الطلب الشبكة المحلية، ويوجّهه الخادم إلى النفق، فيصل على واجهة النفق عند العميل حاملًا عنوان مصدر مكتبي. في جدول التوجيه لذلك الجهاز تنتمي بادئة المكتب إلى جهاز Ethernet وليس إلى النفق. يقارن التحقق واجهة الوصول بالمسار، فيجد تعارضًا ويرفض الحزمة، فيرى الزميل فقدانًا كاملًا بينما يعلن الطرفان نفقًا سليمًا.

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

أثبت الوضع الساري قبل أن تلمس أي sysctl

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

tcpdump -ni tun0 icmp and host 192.168.80.25
ip route get 192.168.80.25
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.tun0.rp_filter

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

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

ما يقبله كل وضع من أوضاع rp_filter فعليًا

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

ValueNameAcceptsStill rejects
0offany source at allnothing on this check
1stricta source routed back out the arrival interfacea source whose route points elsewhere
2loosea source with any route in the tablea source with no route at all

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

الصف الذي تحتاجه هذه الطوبولوجيا يُستنتج من الجدول لا من العادة. الحزمة مشروعة ومصدرها قابل للتوجيه، فيقبلها الفضفاض ويرفضها الصارم. لا شيء في الحالة يستدعي الصفر، واختيار الصفر يزيل فحصًا لا يكلف شيئًا هنا.

اختر أصغر تغيير يزيل الالتباس

الوضع الفضفاض هو أصغر تغيير مناسب، وهو تخفيف حقيقي في الصرامة لا مفتاحًا غير مؤذٍ. يوجد خيار أفضل كلما سمحت الطوبولوجيا: أزل التداخل، ويختفي الالتباس.

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

أي مسار تختار، سجّله في ملف sysctl drop-in لا في أمر حي. اضبط مفتاحي all و default معًا، حتى لا يستطيع إعادة اتصال أن يعيد الوضع الصارم بهدوء.

# /etc/sysctl.d/99-rp-filter.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
sysctl --system

ما يخسره الوضع الفضفاض وأين

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

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

اترك ملاحظة تسمّي الواجهتين والبادئة المتداخلة والفحص الدقيق الذي ينجح الآن. هذا أنفع للمهندس التالي من سطر يقول إن التصفية عُدّلت.

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