چرا OpenVPN هنگام ورود به سیستم اجرا میشود اما هنگام بوت ویندوز نه؟
یک میانبر راهاندازی، یک برنامه دسکتاپ را اجرا میکند، نه سرویس خودکار را. پیش از جابهجایی فایلها بررسی کنید سرویس کدام منبع پروفایل را میخواند.
تونلهایی که فقط پس از ورود یک نفر ظاهر میشوند معمولاً توسط نشست همان شخص اجرا میشوند، نه توسط سرویس خودکار. مقصر معمول یک میانبر راهاندازی است که openvpn-gui.exe را اجرا میکند، و این نشانه نصب خراب نیست. میانبر یک برنامه دسکتاپ را درون نشست کاربر اجرا میکند، با پروفایل همان کاربر، مخازن گواهی او و توانایی او برای پاسخ دادن به یک درخواست. هیچیک از اینها اتصال را مستقل از انسانی که وارد شده نمیکند، و دقیقاً همین چیزی است که یک تونل پیش از ورود نیاز دارد.
این نشانه معمولاً سه علت دارد
سه الگو از بیرون شبیه هم به نظر میرسند و اصلاحهای متفاوتی دارند. اولی مالک اجرایی است که یک نشست کاربر است نه سرویس، که همان حالت میانبر راهاندازی است. دومی پروفایلی است که جایی زندگی میکند که سرویس نگاه نمیکند، پس سرویس شروع میشود، چیزی پیدا نمیکند و پاک خارج میشود. سومی پروفایلی است که سرویس آن را پیدا و اجرا میکند، اما اعتبارنامههایش به تعاملی نیاز دارد که هیچ سرویسی نمیتواند فراهم کند.
تعیین اینکه کدام مورد صدق میکند دو خواندن لازم دارد: سرویس برای اجرای چه چیزی پیکربندی شده و چه فایلهایی را میبیند. هر دو یک فرمان هستند و هیچکدام اتصال در حال اجرا را مختل نمیکند.
سرویس خودکار در واقع چه میخواند
سرویس خودکار Community یک پوشش است که پوشه راهاندازی خودکار پیکربندیشده خود، معمولاً config-auto زیر نصب، را اسکن میکند و برای هر پروفایل مطابقی که پیدا میکند یک فرایند OpenVPN اجرا میکند. پروفایلی که در منوی GUI کاربر دیده میشود بهجای آن زیر پروفایل رومینگ همان کاربر قرار دارد، در پوشهای که حساب سرویس آن را نمیخواند. راهنمای سرویس ویندوز این کشف را توصیف میکند و ارزش خواندن پیش از کپی کردن هر چیزی را دارد، زیرا پوشه هدف ویژگی نصب است نه یک قرارداد ثابت. بنابراین کپی کردن فایل به پوشه 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*'
چرخه عمری را که اهمیت دارد آزمایش کنید: یک راهاندازی مجدد بدون ورود کسی، سپس اتصال دوباره پس از تغییر شبکه. یک مالک برای اتصال نگه دارید، زیرا دو سازوکار راهاندازی رقیب معمولاً دو نمونه میسازند که بر سر همان مسیرها و همان نشست سرور میجنگند و عیبیابی آن سختتر از هر یک از سازوکارها بهتنهایی است.