VPN متصل والجدار الناري لا يزال يحجب: كيف تعرف أيهما المسؤول
النفق قائم ومنفذ واحد لا يزال يفشل. اقرأ المسار ثم السياسة في كل طبقة، وغيّر أضيق قاعدة بدل تعطيل أي من الضابطين.
يقول العميل إنه متصل، ولا يزال المورد يرفض، والخطوة التالية المعتادة هي إطفاء شيء ما. الضابطان في تلك الجملة يقومان بمهمتين مختلفتين: الـ VPN يبني مسارًا للحركة المشمولة، والجدار الناري يقرّر لكل اتصال هل يُسمح للحركة بالمرور. النفق العامل مع سياسة رافضة يبدو تمامًا كنفق معطوب من مقعد المستخدم، فالمهمة هي معرفة أي طبقة تُجيب. هذا هو الترتيب الذي أتبعه، مع القراءة التي تقول لك توقّف.
افصل المسار عن السياسة
ابدأ بشكل الفشل، لأنه معلومة مجانية. إسقاط الحزمة ينتج مهلة: يعيد العميل المحاولة، ولا يعود شيء، ويتعلّق الأمر حتى يستسلم. الرفض ينتج رفضًا صريحًا أو إعادة تعيين: شيء ما أجاب وقال لا. الخدمة التي لا تستمع ترفض على المضيف نفسه، دون أي جدار ناري.
تلك النتائج الثلاث تشير إلى طبقات مختلفة. المهلة تعني أن سياسة ما في مكان ما تُسقط بصمت، أو أن المسار لا يغادر الجهاز أبدًا. الرفض يعني أنك وصلت إلى المضيف فرفض مكدّسه أو جداره الناري. لا شيء على الإطلاق، مع كون واجهة النفق قائمة ولا مسار إلى الوجهة، يعني أن المسار خطأ ولن تصلحه أي قاعدة جدار ناري.
اقرأ المسار في مرور واحد
تأكد من أن النفق يغطي الوجهة قبل أن تنظر إلى قاعدة واحدة. النفق المنقسم الذي يحمل شبكة المكتب الفرعية فقط لن يوجّه طلبًا إلى نطاق آخر، وحينها يبدو الفشل كحجب من الجدار الناري وليس كذلك:
ip route get 10.20.4.15
ip -brief address show
wg show
sudo ipsec statusall
يسمّي ناتج المسار الواجهة التي ستغادر منها الحزمة وعنوان المصدر الذي ستحمله. إن كانت تلك الواجهة بطاقة الشبكة الفعلية بدل النفق، فالمشكلة في التوجيه أو في النطاقات المسموح بها للنفق، وهي تنتمي إلى إعداد الـ VPN لا إلى الجدار الناري.
ثمّة فخّ خاص بالـ VPN يستحق فحصًا مستقلًا. في WireGuard، AllowedIPs الخاص بالقرين هو مسار ومرشّح تعمية في الوقت نفسه: الحزمة التي لا يطابق عنوان مصدرها المجموعة المسموح بها للقرين تُسقط قبل أن تُستشار أي قاعدة جدار ناري. لذلك قد يقف جدار ناري سليم تمامًا خلف إسقاط صامت يشبه السياسة، والإصلاح سطر إعداد أساسي لا قاعدة.
اقرأ السياسة في الطبقة التي تُجيب
بعد أن يصبح المسار صحيحًا، امشِ في السياسة من المضيف إلى الخارج وراقب الطبقة الوحيدة التي تتحرك عدّاداتها:
ss -ltn | grep ':443'
sudo nft list ruleset
sudo iptables -S INPUT
sudo ufw status verbose
المقبس المستمع يُجيب سؤالًا مختلفًا عن القواعد. إن لم يكن شيء يستمع على المنفذ، ترفض النواة الاتصال ولا تكون أي قاعدة واردة ذات صلة. وإن كان المقبس موجودًا وتنتهي مهلة الاتصال من عميل بعيد، فإسقاط يحدث في مكان ما على المسار، وعدّادات القواعد تخبرك هل يحدث هنا.
شغّل التسجيل للملف الشخصي أو السلسلة التي تشتبه بها بدل التخمين من الخارج. إسقاط واحد مسجّل يسمّي المصدر والوجهة والمنفذ يحدّد الطبقة والقاعدة، ويثبت أيضًا أن الحزمة وصلت، وهو ما لا يستطيع أي قدر من الاختبار من جهة العميل إثباته.
اقرأ قرار البوابة عندما ينتهي النفق عندها
في بوابة موقع-إلى-موقع أو وصول عن بُعد، يوثّق الـ VPN مستخدمًا وتصرّح السياسة بمورد، وهما منحان منفصلان. المستخدم المسموح له في النفق ليس مسموحًا تلقائيًا لكل مضيف داخلي، والرفض يأتي غالبًا من قاعدة تمرير بينما النفق نفسه سليم. يظهر الفصل نفسه في IPsec، حيث تختلف السياسة الأمنية التي تختار الحركة عن المرشّح الذي يسمح بها، ولهذا وُثّقت الآليتان كمختلفتين في RFC 4301.
افحص مسار العودة بعناية مثل المسار الصادر. الترشيح ذو الحالة يحتاج إلى رؤية الردّ، لذا فالتوجيه غير المتماثل عبر النفق في اتجاه وحوله في الاتجاه الآخر ينتج إسقاطات تبدو عشوائية ولا تتكرر إلا من بعض العملاء. إن وصلت الحركة إلى البوابة وتوقفت، فاقرأ قاعدة التمرير ومسار العودة معًا قبل أن توسّع أي شيء.
البوابة هي أيضًا حيث يمكن لقاعدة NAT أو إخفاء المصدر أن تخفي المصدر الحقيقي. إن رأت المضيفات الداخلية عنوان البوابة بدل العميل، فلن تطابق قواعد جدارها الناري التي تستهدف مجموعة العملاء أبدًا، والإصلاح يقع على البوابة لا على كل خادم.
غيّر أضيق طبقة، ثم تحقّق
قاوم الإصلاح الواسع. تعطيل جدار المضيف الناري، أو إضافة قاعدة تسمح بكل شيء، أو دفع كل واجهة إلى ملف موثوق يزيل كلٌّ منها الضابط الذي كان يقوم بعمله، والتغيير يبقى بعد الحادثة. القاعدة المحصورة في نطاق المصدر والمنفذ المعني أسهل في المراجعة، وأسهل في الإزالة، وتترك بقية سياسة الجهاز سليمة.
تحقّق بالاختبار نفسه الذي فشل، ومن العميل نفسه، ثم مرة أخرى بعد إعادة الاتصال، لأن قاعدة تطابق قبل أن يعيد النفق التفاوض قد تتوقف عن المطابقة بعده:
nc -vz 10.20.4.15 443
curl -v --max-time 5 https://10.20.4.15/
قبل أن تغلق الأمر:
- المسار إلى الوجهة يغادر عبر واجهة النفق، وعنوان المصدر يطابق ما تتوقعه السياسة.
- شيء ما يستمع على المنفذ، والرفض أو المهلة يُنسب إلى قاعدة مسمّاة لا يُفترض.
- البوابة تمرّر في الاتجاهين، والوجهة ترى المصدر الذي كُتبت له قواعدك.
- لم يُعطَّل أي ضابط لنجاح الاختبار، والتغيير الذي أجريته يسمّي نطاق مصدر واحدًا ومنفذًا واحدًا.