لماذا يفشل وكيل PAC في الجهاز الضيف عند استخدام عنوان المضيف
يشير عنوان PAC إلى نص سياسة، لا إلى وكيل. على الجهاز الضيف أن يجلبه ويقيّمه بعناوينه الخاصة ثم يصل إلى الوكيل الذي يختاره.
«المضيف يستخدم ملف PAC هذا، لذا وضعت العنوان نفسه في الجهاز الافتراضي» جملة معقولة وخطة ناقصة. عنوان PAC يشير إلى نص سياسة، لا إلى وكيل. وإلى أن يتمكن الجهاز الضيف من جلب ذلك النص وتقييمه بعناوينه الخاصة ثم الوصول إلى أي وكيل يسميه النص، فإن العنوان مجرد سلسلة في حقل إعدادات. ومعظم الالتباس حول سياسة الوكيل في الأجهزة الافتراضية يأتي من التعامل مع ذلك السطر الواحد على أنه الإعداد كله.
عنوان PAC نص برمجي، لا وكيل
يحتوي الملف على دالة تأخذ عنواناً ومضيفاً وتعيد وصف وكيل أو الكلمة DIRECT. ولا شيء في العنوان يخبر التطبيق إلى أين يرسل الحركة؛ فهذا القرار يُتخذ في وقت التشغيل، داخل النص، باستخدام بيانات يطلبها النص من المنصة. وأي مربع حوار إعدادات يقبل عنوان PAC فهو يقبل مؤشراً إلى إجراء قرار.
هذا الفرق هو سبب أن نسخ العنوان قد يبدو ناجحاً. فالحقل مملوء والإعداد محفوظ، ولا يظهر الفشل إلا لاحقاً، عندما يتعذر جلب النص أو عندما يعيد وكيلاً لا يستطيع الجهاز الضيف الوصول إليه.
الخطوات الأربع تفشل كل واحدة بطريقتها
داخل الجهاز الضيف يجب أن تحدث أربعة أشياء بالترتيب، ولكل منها بصمة خطأ خاصة. يجلب الجهاز الضيف ملف PAC. ويقيّم التطبيق النص الخاص بالعنوان المطلوب باستخدام معلومات محلية. ثم يُحل الوكيل المختار ويُوصل إليه. وتحدث المصادقة إذا طلبها الوكيل.
ابدأ بإثبات الجلب، فكل ما يليه بلا معنى دونه. فملف PAC على خادم خاص يتطلب مساراً مسموحاً إلى ذلك الخادم قبل أن تساعد أي قاعدة، ولا يمكن لاختيار وكيل داخل نص لا يمكن الوصول إليه أن ينشئ المسار الذي سيجلب الملف:
curl -sS -o /dev/null -w '%{http_code}\n' http://pac.corp.example/proxy.pac
getent hosts pac.corp.example
إذا فشل ذلك الطلب من الجهاز الضيف ونجح من المضيف، فالمشكلة في مسار الجهاز الضيف إلى خادم PAC، لا في محتوى النص. وإذا أعاد ملف JavaScript، فانتقل إلى الخطوة الثانية واكتشف ما يقرره النص بالنسبة لسياق الجهاز الضيف.
النص نفسه يقرر بشكل مختلف داخل جهاز افتراضي
يمكن لدوال PAC أن تفحص المضيف المطلوب ومعلومات عن الجهاز الذي ينفذ التقييم. والقاعدة المبنية على عنوان العميل نفسه، مثل قاعدة تفحص عنوان واجهة أو اختبار عضوية شبكة فرعية، سترى عنوان الجهاز الضيف لا عنوان المضيف الفيزيائي. وخلف NAT على جانب المضيف تكون هذه عناوين مختلفة، ولذلك يمكن للنص نفسه أن يختار وكيلاً آخر أو أن يعود إلى DIRECT داخل الجهاز الافتراضي.
هذا ليس عيباً في النص. إنه النص يفعل بالضبط ما كُتب لفعله بمدخل مختلف، وهذا يفسر التقرير المربك حيث يستخدم المضيف الوكيل ويتصل الجهاز الضيف مباشرة. أعد إنتاج القرار بدل الاستدلال عليه: فأي مقيّم PAC يأخذ عنواناً وعنوان URL، إن كانت توزيعتك تحزم واحداً، يحسم السؤال بأمر واحد. وإلا فاختبر بالتطبيق الذي سيُستخدم فعلاً، واقرأ سجل الوكيل الخاص به بدل التخمين.
لا تستنتج أن الجهاز الضيف ورث إعدادات الوكيل من المضيف لأن حركته تمر عبر ترجمة على جانب المضيف. فترجمة الشبكة تمرر الحزم؛ ولا تنسخ إعدادات التطبيقات، ووكيل النظام هو إعداد تطبيق.
أدوات لا تقرأ PAC إطلاقاً
أدوات سطر الأوامر حدود منفصلة، وهنا يُفقد الكثير من الوقت. فإن curl لا ينفذ ملفات PAC، كما تقول توثيق الوكيل بوضوح. توجيه متغير وكيل إلى عنوان تنزيل PAC لا يحول النص إلى نقطة نهاية وكيل؛ فستحاول الأداة التحدث بـ HTTP إلى ملف JavaScript وتفشل بطريقة تبدو مشكلة شبكة.
الأمر نفسه ينطبق على كثير من مديري الحزم وبيئات تشغيل اللغات وأدوات البناء، التي تحترم متغيرات وكيل صريحة أو إعداداتها الخاصة ولا شيء غيرها. وإذا كان الاختبار الذي يهمك أداة سطر أوامر، فاضبطها على الوكيل المحدد الذي كان نص PAC سيختاره، وسجّل كيف استنتجت ذلك الاختيار حتى يعيده الشخص التالي.
بالنسبة لتطبيقات سطح المكتب على Linux، يجب ضبط إعداد النظام على الوضع التلقائي وإعطاؤه عنواناً أيضاً؛ وعنوان يُحفظ بينما الوضع ما زال يدوياً لا يفعل شيئاً. افحص الاثنين، وافحصهما داخل الجهاز الضيف:
gsettings get org.gnome.system.proxy mode
gsettings get org.gnome.system.proxy autoconfig-url
DIRECT قرار أيضاً
نتيجة PAC بقيمة DIRECT تعني أن التطبيق يتجاوز وكيل HTTP، لا أنه نجا من الشبكة. ويمكن للاتصال الناتج أن يتبع مسار نظام التشغيل عبر نفق، أو أن يفشل لأسباب لا علاقة لها باستخدام الوكيل. وبالعكس، فنتيجة وكيل تصف طلب تطبيق واحد، لا كل عملية في الجهاز الضيف.
لذا تحقق في الاتجاه الذي كُتب فيه الشرط. فإذا كان الشرط «هذا التطبيق يصل إلى الموقع الداخلي»، فأثبت أن ذلك التطبيق يصل، وسجّل أي وكيل أو مسار حمله. وإذا كان الشرط «الجهاز الافتراضي على شبكة الشركة»، فمتصفح يعمل عبر وكيل مختار دليل على ذلك المتصفح ولا شيء أكثر.
أصلح السلسلة داخل الجهاز الضيف بدل إيقاف نفق المضيف أو تخفيف سياسة التمرير لنجاح اختبار. فللسلسلة أربعة حلقات، والتغيير الذي يتخطى واحدة منها يصمد حتى المرة التالية التي يُحدَّث فيها النص أو يتغير عنوان الجهاز الضيف.