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

سلسلتان، وجهتان مختلفتان

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

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

ما تسمح به قاعدة المستمع فعلاً

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

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

اختبر من العميل، لا من البوابة أبداً

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

nc -vz 10.40.7.25 445
tcpdump -ni tun0 host 10.40.7.25

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

التمرير يحتاج ثلاثة أشياء لا واحداً

يجب تمكين التمرير في النواة، ويجب أن تقبل قاعدة تصفية التدفق، ويجب أن تكون الوجهة قابلة للوصول مع مسار يعود منه الرد. وغياب أي من الثلاثة ينتج الصمت نفسه من منظور العميل.

sysctl net.ipv4.ip_forward
sudo iptables -S FORWARD
sudo iptables -S INPUT

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

أبقِ مجموعتي القواعد منفصلتين في الوثائق

اكتب قاعدة المستمع وقاعدة الخدمة الممرَّرة في سطرين منفصلين بمالكين وأسباب منفصلة. وعندما يتغير منفذ VPN أو تُنشر خدمة جديدة، يحول هذا الفصل دون أن يوسّع تغيير واحد الآخر بصمت.

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

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

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