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

ابدأ من حيث تعمل الخدمة فعليًا

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

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

في نسخة قابلة للتنقيح يستطيع adb shell سرد المقابس عبر /proc/net/tcp، لكن حالة التطبيق نفسه هي المصدر الصادق لمعظم الناس.

نقطة الدخول الأولى: جهاز آخر على نقطة الاتصال

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

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

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

نقطة الدخول الثانية: مسار المشغّل

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

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

نقطة الدخول الثالثة: مخرج VPN

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

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

اختبر مسارًا واحدًا من الطرف إلى الطرف ثم سمِّ المالك

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

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

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

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

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