هل يبدأ OpenVPN عند تسجيل الدخول وليس عند الإقلاع في Windows؟
اختصار بدء التشغيل يشغّل تطبيق سطح مكتب، وليس الخدمة التلقائية. تحقّق من مصدر ملف التعريف الذي تقرأه الخدمة قبل نقل الملفات.
عادةً ما تُشغِّل الأنفاق التي لا تظهر إلا بعد تسجيل أحدهم الدخولَ جلسةُ ذلك الشخص، لا الخدمةُ التلقائية. والسبب المعتاد هو اختصار بدء التشغيل الذي يشغّل openvpn-gui.exe، وهو ليس تثبيتاً معطوباً. يبدأ هذا الاختصار تطبيق سطح مكتب داخل جلسة مستخدم، بملف تعريف ذلك المستخدم ومخازن شهاداته وقدرته على الرد على أي مطالبة. ولا شيء في ذلك يجعل الاتصال مستقلاً عن إنسان مسجَّل الدخول، وهذا بالضبط ما يتطلبه نفق ما قبل تسجيل الدخول.
الأعراض عادةً لها ثلاثة أسباب
ثلاثة أنماط تبدو متشابهة من الخارج ولها إصلاحات مختلفة. الأول هو مالك تنفيذ يكون جلسة مستخدم بدلاً من الخدمة، وهي حالة اختصار بدء التشغيل. الثاني هو ملف تعريف يقيم حيث لا تنظر الخدمة، فتبدأ الخدمة ولا تجد شيئاً وتخرج بنظافة. الثالث هو ملف تعريف تجده الخدمة وتشغّله، لكن بيانات اعتماده تحتاج إلى تفاعل لا يمكن لأي خدمة تقديمه.
تحديد أيّها ينطبق يتطلب قراءتين: ما صُمِّمت الخدمة لتشغيله، وأي الملفات تستطيع رؤيتها. كلتاهما أمر واحد لكل منهما، ولا يعطّل أيٌّ منهما اتصالاً قائماً.
ما تقرأه الخدمة التلقائية فعلياً
خدمة Community التلقائية عبارة عن غلاف يمسح دليل بدء التشغيل التلقائي المهيّأ لديه، وهو عادةً config-auto تحت التثبيت، ويشغّل عملية OpenVPN لكل ملف تعريف مطابق يجده. أما ملف التعريف الظاهر في قائمة GUI الخاصة بمستخدم فيقيم بدلاً من ذلك تحت ملف التعريف المتجول لذلك المستخدم، في دليل لا يقرأه حساب الخدمة. ويصف دليل خدمة Windows هذا الاكتشاف، ويستحقّ القراءة قبل نسخ أي شيء، لأن الدليل الهدف خاصية من خصائص التثبيت لا عُرف ثابت. لذلك فإن نسخ ملف إلى مجلد GUI لا يغيّر شيئاً للخدمة، ونسخه إلى كل مجلد يُسمّى config ينشئ نسخاً مكررة لا إصلاحاً.
Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'
يسرد الأمر الأخير ما سيراه الغلاف فعلياً، وهي أسرع طريقة لتأكيد أن ملف التعريف في المكان الخطأ. ويُظهر السطر الثاني أيضاً الحساب الذي تعمل به الخدمة، وهذا الحساب هو ما يحدد مسارات الملفات ومخازن الشهادات التي يمكن الوصول إليها أصلاً.
لماذا يعمل تسجيل الدخول إلى سطح المكتب ولا يعمل بدء التشغيل
يمكن لنجاح سطح المكتب أن يخفي اعتماداً على الإدخال لفترة طويلة. يستطيع GUI جمع عبارة مرور مفتاح أو كلمة مرور حساب أو عامل ثانٍ في مربع حوار، لأنه يعمل في جلسة تفاعلية بسطح مكتب مرئي. أما الخدمة فتعمل في جلسة بلا سطح مكتب، لذا لا مكان لظهور طلب الإدخال، ويفشل الاتصال بعد مهلة لا تشبه مشكلة بيانات الاعتماد إطلاقاً.
يتبع الوصول إلى الملفات القاعدة نفسها. فالمفتاح الخاص المخزَّن تحت ملف تعريف المستخدم، أو شهادة في مخزن المستخدم الشخصي، غير متاح لخدمة تعمل باسم الجهاز. قارن المسارات المطلقة والأذونات واختيار الشهادة الذي يقوم به كل طرف بدلاً من افتراض أن الملف نفسه يعني البيئة نفسها.
المهمة المجدولة للعمل سواء سجّل مستخدم الدخول أم لا ترث قيداً مشابهاً. قد تبدأ الملف التنفيذي لـ GUI بنجاح وتنتج مع ذلك عملية لا تحصل على بيانات اعتماد أبداً، لذا فوجود عملية في مدير المهام ليس دليلاً على نفق يعمل.
اختر مالكاً واحداً واختبر دورة الحياة الحقيقية
لاتصال يخصّ شخصاً مسجَّل الدخول، استخدم سلوك بدء التشغيل التلقائي المدعوم في GUI واستبعد الخدمة منه. ولنفق يجب أن يوجد قبل تسجيل أي شخص الدخول، قم بتهيئة الخدمة، وضع ملف التعريف حيث يقرأه الغلاف، واستخدم آلية بيانات اعتماد غير مراقَبة مدعومة مثل مفتاح بلا عبارة مرور تفاعلية أو ملف بيانات اعتماد موثّق.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
اختبر دورة الحياة المهمة: إعادة تشغيل دون تسجيل أحد الدخول، ثم إعادة اتصال بعد تغيير الشبكة. أبقِ مالكاً واحداً للاتصال، لأن آليتين متنافستين لبدء التشغيل تنتجان عادةً نسختين تتصارعان على المسارات نفسها وجلسة الخادم نفسها، وهو أصعب في التشخيص من أي آلية منفردة.