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

عندما يُحل localhost إلى منطقة الشركة

تحقق مما يتجه إليه الاسم بينما النفق قائم، ثم شغّل الاستعلام نفسه وهو متوقف وقارن الإجابتين. الدليل هو عنوان في نطاق الشركة حيث توقعت 127.0.0.1. سجل مثل localhost.mycompany.corp يتغلب على إدخال الاسترجاع المحلي بمجرد أن يضيف العميل تلك اللاحقة إلى قائمة البحث، فينتقل الطلب إلى مضيف خاص لا يستمع فيه شيء على ذلك المنفذ. اقرأ قائمة البحث بدلًا من التخمين فيها، لأن العميل قد يضيف أكثر من نطاق واحد ويحدد الترتيب أي مرشح يُجرَّب أولًا:

getent hosts localhost
resolvectl domain
ss -ltnp | grep 8080

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

إعدادات الوكيل التي تلتقط الاسترجاع المحلي

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

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

curl --noproxy '*' http://127.0.0.1:8080/health
NO_PROXY=localhost,127.0.0.1,::1 your-tool

عنوان الربط يحدد من يستطيع الاتصال

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

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

حيث تتوقع أداة تصحيح وجود الشبكة المحلية

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

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

توقف عند أول مرحلة تفشل

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

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

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