پس از یک خطا، کادر گفتگوی VPN ویندوز را باز کنید تا یک شماره و یک جمله به شما بدهد که معمولاً جمله نیمه کم‌فایده‌تر است. شماره مشخص می‌کند کدام مرحله اتصال شکست خورده و مرحله تعیین می‌کند بعدی کدام گزارش، کدام تنظیم و کدام تیم را ببینید. گذشتن از مراحل به ترتیب حدود ده دقیقه طول می‌کشد و از زنجیره آشنا جلوگیری می‌کند: نصب دوباره آداپتورها، تغییر پروتکل‌ها و بازنشانی پشته برای درست کردن حسابی که هرگز اجازه برقراری تماس نداشت.

شماره را به‌عنوان مرحله بخوانید

یک اتصال بومی از چهار نقطه عطف می‌گذرد. به سرور می‌رسد و پیوند برقرار می‌کند، امنیت را مذاکره می‌کند، کاربر را احراز هویت می‌کند و آدرس‌دهی و مسیریابی را اعمال می‌کند. شکست در هر کدام شواهد متفاوتی بر جای می‌گذارد و کدی که به یک مرحله تعلق دارد درباره بقیه چیز مفیدی نمی‌گوید.

خطایی که باید از آن دوری کرد این است که کد را شدت بدانیم. شکست پیوند و شکست مجوز هر دو «اتصال برقرار نشد» خوانده می‌شوند و جز این هیچ اشتراکی ندارند. شدت می‌گوید چیزی چقدر فوری است؛ مرحله می‌گوید چه چیزی را باز کنید.

Code familyStageWhere the evidence lives
829, 703Link or dial completionClient event log, remote listener reachability
720PPP negotiation and miniport bindingAdapter state, bindings, client log detail
691, 649, 812Identity and authorizationGateway or authentication server decision
Connected, no trafficAddressing, routing and resolutionRoute table and resolver configuration

مرحله یک: پیوند و تلاش برای تماس

829 یعنی پیوند زیرین قطع شده است. نمی‌گوید همتای دور پاسخ دادن را متوقف کرده، یک واسطه نشست را کشته، یا سیاستی روی کلاینت آن را بسته است. کد تکمیل تماسی مانند 703 حتی زودتر است: تلاش هرگز به اندازه‌ای نرسید که پیوندی داشته باشد، که معمولاً به پروفایل، وضعیت سرویس یا سیاست محلی اشاره می‌کند.

Get-VpnConnection -Name 'Corp' | Select-Object Name,ServerAddress,TunnelType,AuthenticationMethod,ConnectionStatus
Test-NetConnection -ComputerName vpn.example.net -Port 443
Get-WinEvent -LogName Application -MaxEvents 200 | Where-Object ProviderName -match 'RasClient' | Select-Object -First 15 TimeCreated,Id,Message

پرس‌وجوی رویداد بخشی است که مردم از آن می‌گذرند. یک رکورد سمت کلاینت با مهر زمانی و نام رابط بیشتر از کادر گفتگو ارزش دارد، زیرا می‌گوید تلاش اصلاً از دستگاه خارج شده یا نه. نبود رکورد و نبود پاسخ شنونده یعنی مشکل دسترسی، و هیچ ویرایشی در کلاینت آن را تغییر نمی‌دهد.

اگر همان پروفایل در شبکه دیگری کار می‌کند، همین‌جا توقف کنید. کد یک شرط مسیر را توصیف می‌کند نه خطای پیکربندی، و مقایسه مفید بعدی دو ضبط است نه نصب دوباره دیگر.

مرحله دو: PPP و اتصال مینی‌پورت

720 میان پیوند و کاربر قرار دارد. تونل بالا آمد و سپس لایه PPP نتوانست آدرس یا پروتکل کنترلی را مذاکره کند، که اغلب مشکلی در اتصال روی کلاینت است نه اعتبارنامه ردشده. همین تمایز تمام ارزش کد است: می‌گوید هرگز به اعتبارنامه نرسیدیم، پس حساب مظنون نیست.

Get-NetAdapter -IncludeHidden | Where-Object InterfaceDescription -match 'WAN Miniport' | Select-Object Name,Status,ifIndex
Get-NetAdapterBinding | Where-Object ComponentID -match 'ms_pptp|ms_l2tp|ms_sstp|ms_agile' | Select-Object Name,ComponentID,Enabled

خواندن این دو خروجی آموزنده‌تر از بازنشانی هر چیزی است. مینی‌پورتی که هست اما شروع نشده، یا اتصال پروتکلی که نرم‌افزار دیگری غیرفعالش کرده، دقیقاً شکست این مرحله را تولید می‌کند. هر دو بدون دست زدن به بقیه پشته قابل رفع هستند. در مقابل، بازنشانی کامل آدرس‌دهی و وضعیت فیلتر را پاک می‌کند که هیچ ربطی به عیب نداشت.

مرحله سه: هویت و مجوز

691 یعنی اعتبارنامه‌ها رد شدند. 649 یعنی حساب اجازه تماس ندارد، و 812 یعنی سیاست دسترسی راه دور اتصال را رد کرده است. اینها تصمیم‌اند نه عیب انتقال، و کلاینت فقط می‌تواند آنها را گزارش کند.

شواهد در طرف دیگر است. از اپراتور دروازه تلاش در آن مهر زمانی و سیاستی که مطابقت داشته را بخواهید؛ از مالک دایرکتوری بپرسید آیا حساب اجازه تماس دارد و آیا در گروهی است که سیاست می‌خواهد. تغییر نوع تونل یا نصب دوباره کلاینت نمی‌تواند تصمیمی را که درباره یک هویت گرفته شده تغییر دهد.

یک عادت مفید در این مرحله نوشتن رشته دقیق حساب در تیکت است، شامل هر پیشوند دامنه. تعداد شگفت‌انگیزی از موارد 691 اعتبارنامه ذخیره‌شده برای دامنه اشتباه است، و این در رشته حساب دیده می‌شود نه در تنظیمات پروتکل.

مرحله چهار: متصل، و هیچ چیز کار نمی‌کند

یک اتصال می‌تواند کامل شود و همچنان بی‌فایده باشد. آدرسی دارد، کلاینت موفقیت را گزارش می‌کند، و هر درخواست برنامه به پایان مهلت می‌رسد. چیزی در کادر گفتگو این را نشان نمی‌دهد و کدی برای جست‌وجو نیست. در آن نقطه کادر گفتگو تمام شده و شواهد مفید جای دیگری است.

Get-NetRoute -DestinationPrefix 10.24.0.0/16 | Select-Object DestinationPrefix,NextHop,InterfaceAlias
Resolve-DnsName files.corp.example.internal
Test-NetConnection -ComputerName 10.24.6.15 -Port 445

اگر مسیر نیست، سرور آن را هل نداده یا کلاینت آن را انداخته است. اگر مسیر هست و نام شکست می‌خورد، مشکل در تفکیک نام است. اگر هر دو کار می‌کنند و برنامه باز هم شکست می‌خورد، از تونل گذشته‌اید و در پیکربندی خود برنامه هستید.

تغییرات را در هر آزمون به یک لایه محدود کنید. هر ویرایشی که پیش از تلاش بعدی انجام دهید بخشی از بافت کد بعدی می‌شود، و کدی که آخرین ویرایش شما را توصیف کند بدتر از نبود کد است.

یک تلاش، یک تغییر، یک رکورد

هر مرحله‌ای که باشد، رکورد باید شامل کد، پیام، نام پروفایل، مهر زمانی و شبکه‌ای باشد که در آن بودید. پنج فیلد، و هر کدام از آنها همین حالا در کادر گفتگو یا گزارش کلاینت پیش روی شماست. این مجموعه به‌قدری کوچک است که در تیکت جای بگیرد و به‌قدری مشخص که کسی دیگر بتواند بازتولیدش کند.

سپس آن مهر زمانی را کنار رکورد طرف دیگر بگذارید. جدول نزدیک بالای این صفحه می‌گوید هر ناسازگاری از آن کدام مرحله است. بدون رکورد دوم کد فقط جست‌وجو را باریک می‌کند؛ با آن، مرحله تعیین می‌شود. مقایسه همان چیزی است که شماره را به تشخیص تبدیل می‌کند نه به حدس.

این عادت تقریباً هر عیب بومی VPN ویندوز را پوشش می‌دهد و هیچ‌کدام از شاخه‌ها نصب دوباره چیزی را نمی‌خواهد. کادر گفتگو همیشه می‌گفت کدام‌یک را دارید؛ کار در این است که نپذیریم همه را یک مشکل بدانیم.

مقالات مرتبط