يفتح المتصفح اسم مضيف VPN عبر HTTPS دون أي شكوى، ومع ذلك يرفض عميل SSTP الاتصال. لا شيء في هذا الاقتران متناقض. يستخدم SSTP بروتوكول TLS كناقل خارجي ثم يشغّل طلبه الخاص وحمولة PPP داخل ذلك الاتصال، لذا فإن تحميل صفحة بنجاح يثبت أمرًا واحدًا ضيقًا: أن المضيف يجيب على طلب GET على المنفذ 443. العميل يطرح سؤالًا مختلفًا، وقد يجيبه الخادم بشكل سيئ.

الصفحة تُحمَّل والنفق لا

يلجأ الناس إلى اختبار المتصفح لأنه سريع، ثم يعاملون النتيجة كدليل على أن الخادم قابل للوصول ومهيأ. لكنه دليل على طلب GET إلى المسار الذي فتحه شريط العنوان، لا أكثر. تبدأ محادثة VPN بعد المصافحة نفسها لـ TLS، لكنها ترسل طريقة ومسارًا لا تستخدمهما صفحة ويب أبدًا. لذلك لا تقول استجابة 200 للمتصفح شيئًا عما إذا كانت نقطة نهاية SSTP موجودة.

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

ما يرسله عميل SSTP فعليًا

يرسل العميل طلب HTTP بالطريقة SSTP_DUPLEX_POST إلى المسار /sra_{GUID}/، ثم يبقي جسم الاتصال مفتوحًا كتيار ثنائي الاتجاه يحمل إطارات PPP. يجيب الخادم الممتثل بـ HTTP/1.1 200 ويتوقف عن التصرف كخادم ويب. أي شيء آخر هو بصمة: 405 أو 404 يعني أن نقطة النهاية غير موجودة، و301 أو 302 يعني أن شيئًا يعيد توجيه الطلب، وFIN فوري يعني أن وكيلًا أو خادمًا أغلق التيار.

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

أين يكسر الوكيل أو خادم الويب التيار

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

مشاركة المنفذ 443 بين موقع ويب وSSTP قرار توجيه، وليس وعدًا بأن كل قفزة تتعامل مع المحادثتين بالطريقة نفسها. إذا كان موازن حمل أو جدار ناري أو مُنهٍ لـ TLS في المسار، فأضفه إلى قائمة المشتبه بهم قبل أن تلمس إعداد VPN.

اختبر المراحل بشكل منفصل

نفّذ الفحوص بالترتيب وتوقف عند أول فشل، لأن كل مرحلة تستبعد طبقة مختلفة. مسبار TLS أدناه يفصل هوية الشهادة عن أي شيء يفعله SSTP. استبدل اسم المضيف بنقطة النهاية الخاصة بك واقرأ الموضوع والسلسلة التي يطبعها.

openssl s_client -connect vpn.example.com:443 -servername vpn.example.com

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

StageWhat it provesFailure signature
TCP to 443A listener exists and the path is openTimeout or connection refused
TLS with SNIThe certificate matches the name you useName mismatch or untrusted chain
SSTP_DUPLEX_POST exchangeThe endpoint is an SSTP server405, 404, 301 or an early FIN
PPP authenticationThe user credential was acceptedAuth failure after a 200 response
Inner routingA permitted destination is reachableTunnel up, no reply from the target

سجّل آخر مرحلة نجحت في التذكرة بدلًا من كتابة "تعذر الاتصال". وثيقة مواصفة MS-SSTP توضح الطلب وتبادل PPP الذي يلي مصافحة TLS، وهي المرجع لسبب عدم قدرة اختبار المتصفح على النيابة عن أي منهما.

الهوية أولًا، ثم PPP

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

استبدال اسم المضيف بعنوان، أو النقر لتجاوز تحذير الشهادة، يزيل الفحص الذي كان سيحدد المرحلة الفاشلة بدلًا من إصلاحها. أبقِ التحذير واقرأه. ولا تعِد ضبط كلمة مرور PPP عندما لم يصل تبادل HTTP إلى سلوك SSTP أصلًا، لأن بيانات الاعتماد لم تُطلب قط.

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