لماذا لا تستطيع nftables رؤية حركة OpenVPN بين العملاء
تُسلَّم حركة الأقران داخل عملية VPN، لذا لا تتحرك عدّادات التمرير أبدًا. عدّها يعني الاختيار بين مسار النواة ومسار العملية.
عميلان على خادم واحد يتبادلان الملفات، وينجح النقل، وكل قاعدة تمرير توجّهها إلى النفق تُبلّغ عن صفر حزم. القواعد ليست معطوبة والسلسلة ليست في غير موضعها. وعند تمكين التمرير بين الأقران، تُسلَّم الحزمة داخل عملية الخادم ولا تصبح حزمة المضيف هي الموجّه أبدًا، فلا يبقى شيء لجدار حماية النواة ليعدّه. وفهم هذا الانفصال هو ما يحدد ما إذا كنت تحتفظ بالطريق المختصر أو تعيد بناء المسار عبر النواة.
تتبَّع حزمة واحدة عبر الخادم
في نفق موجَّه، يسلّم البرنامج الخفي حزمة كل عميل بعد فك التشفير إلى جهاز النفق. ومن هناك يوجّهها المضيف، ويعمل خطاف التمرير، وقاعدة تطابق جهاز النفق تستطيع عدّ الحركة أو إسقاطها. هذا هو المسار الذي تفترضه معظم أمثلة جدران الحماية.
| Forwarding path | Who decides | What the host firewall sees |
|---|---|---|
| Kernel routing between clients | Host routing table and forward rules | Every inner packet, with interface names |
| Peer forwarding inside the server process | The VPN daemon's own peer table | Only the outer encrypted transport |
الطريق المختصر يزيل المضيف من المنتصف. تُسلَّم حزمة جلسة بعد فك التشفير إلى جلسة أخرى داخل البرنامج الخفي، ولا تُصدر الحزمة الداخلية أبدًا على جهاز النفق ولا يوجّهها المضيف. الحركة المغلفة لا تزال تعبر الواجهة الفيزيائية، لذا يبدو الالتقاط الخارجي مشغولًا بينما تبقى القواعد الداخلية صامتة. والالتقاط المأخوذ على جهاز النفق لا يُظهر شيئًا على الإطلاق، وهو ما يفاجئ كل من يتوقع مشاهدة النقل هناك. هذا التباين هو أسرع طريقة للتعرّف على الطريق المختصر من خارج البرنامج الخفي.
اختبار العدّاد الذي يحسم أي مسار جرى
أرفق عدّادًا بالقاعدة التي ينبغي أن تنطبق، وشغّل نقلًا بين عميلين ينبغي لتلك القاعدة أن تحجبه، ثم اقرأ العدّاد بعد ذلك.
sudo nft list ruleset
sudo nft add rule inet filter forward iifname "tun0" oifname "tun0" counter accept
sudo nft list chain inet filter forward
إذا نجح النقل وبقي العدّاد عند الصفر، فإن النواة لم تتعامل مع تلك الحزم أبدًا، ولن يغيّر ذلك أي قدر من تعديل القواعد. أعد الاختبار نفسه على خدمة على الخادم نفسه، لأن ذلك التدفق يعبر حزمة المضيف فعلًا وعدّاده يتحرك. ومقارنة النتيجتين هي ما يُنتج الجواب.
تفصيلان يمنعان قراءة خاطئة. اسم واجهة مكتوب داخل تسمية سلسلة لا يرشّح شيئًا بذاته، لأن المطابقة تحدث على حقول الواجهة داخل القواعد. وتصميم جسر على الطبقة 2 يتصرف بشكل مختلف مرة أخرى: هناك يتشارك العملاء نطاق بثّ، لذا يُتوقع اكتشاف الأقران بدلًا من اعتباره عطل توجيه.
المبدّل ليس قائمة وصول
هذا هو الجزء الذي يكلف بعد الظهر. التمرير بين الأقران إعداد واحد يعمل أو يتوقف، وبينما هو يعمل يكون البرنامج الخفي نقطة التمرير الوحيدة. لا يستطيع جدار حماية المضيف التعبير عن من يجوز له الوصول إلى من، وملفات كل عميل لا تحوّل المبدّل إلى مصفوفة سياسات.
إن كنت تحتاج قواعد لكل قرين، فالخيار بين التخلي عن الطريق المختصر، وبين التخلي عن جدار حماية المضيف كأداة تحكم. إيقافه يعيد تمرير النواة، وهو يتطلب تمكين تمرير IP على الخادم وقواعد صريحة للتدفقات التي تريدها. وإبقاؤه مفعّلًا يعني أن السياسة تعيش في إعداد البرنامج الخفي، وهو عمليًا إما كل الأقران أو لا قرين.
عمليات خادم منفصلة بمجموعات عناوين ومنافذ خاصة بها هي الحل الوسط العملي. كل عملية تحمل قرار وصول واحدًا بالضبط، فيمكن لمجموعتين أن تكون لهما قواعد مختلفة دون مصفوفة سياسات. ويستطيع المضيف التوجيه بين المجموعات عندما يكون ذلك مقصودًا، وحينها يرى جدار الحماية تلك التدفقات لأنها تعبر المضيف. والكلفة منافذ إضافية وشهادات إضافية وملف تعريف لكل مجموعة.
اختيار نقطة التمرير
اختر تمرير النواة عندما يكون جدار الحماية محرك السياسة، أو عندما تحتاج تسجيلًا لكل تدفق، أو عندما تكون المحاسبة مهمة. الكلفة هي معدل النقل عبر حزمة المضيف وقواعد أكثر للصيانة. والفائدة أن كل أداة موجودة، من العدّادات إلى مصدّرات التدفق، تصف الحركة مرة أخرى. على خادم صغير تكون تلك الكلفة غير مرئية؛ وعلى مرحّل مزدحم ليست كذلك.
اختر التمرير داخل العملية عندما تكون حركة الأقران إما مسموحة كلها أو مرفوضة كلها ويكون الخادم بمقاس ذلك. الكلفة أن العدّادات وتخصصات الانتظار وتتبع الاتصالات لم تعد تصف التدفقات الداخلية؛ وهذا مقبول فقط إن لم يعتمد عليه أحد لاحقًا.
أيًّا كان اختيارك، اكتبه بجانب قواعد جدار الحماية. فمجموعة قواعد تبدو كأنها تسمح بحركة الأقران بينما يقرّرها البرنامج الخفي على أي حال تضلّل الشخص التالي الذي يشخّص نقلًا فاشلًا. وكل من يقرأ القواعد وحدها سيفترض أن النواة هي البوابة.
ما يجب التحقق منه قبل تغيير القواعد
اقرأ الإعداد الذي حمّله الخادم فعليًا، لا الملف الذي تتذكر أنك حرّرته، وتأكد من وجود خيار الأقران. وإن كنت قد غيّرته، فتأكد من أن الخدمة أعادت التحميل بدلًا من أن تكتب ملفًا على القرص فقط.
ثم أعد الاختبار بتدفق من العميل إلى الخادم لإثبات أن القاعدة تطابق أصلًا، وتحقّق من المسارات المدفوعة، لأن مسارًا مفقودًا يبدو تمامًا كحجب من جدار الحماية من جهة العميل. ولا تغيّر ترتيب القواعد إلا بعد أن تعرف أي نقطة تمرير تملك القرار.