لا توجد أداة Import-VpnProfile، والأقرب إليها، Add-VpnConnection، لا يقرأ أبدًا ملف .ovpn أو .conf. فهو يبني ملف تعريف Windows أصيلًا من المعاملات التي تمررها، ولهذا فإن أول نقطة تحقق هنا هي صيغة الملف لا سطر الأوامر. إذا كانت البوابة تتحدث SSTP أو IKEv2 أو L2TP/IPsec أو PPTP، فيمكن لـ Windows أن يمتلك ملف التعريف وتنطبق بقية القائمة. أما إذا سُلّم لك ملف OpenVPN أو WireGuard، فتوقف عند الخطوة الأولى: تلك العملاء تملك أدوات الاستيراد الخاصة بها.

الخطوة 1: تأكد من ملف التعريف الذي يمكن لـ Windows امتلاكه فعلًا

شغّل Get-Command -Module VpnClient على الجهاز قبل أي شيء آخر. يوفّر Windows 10 وWindows 11 وServer 2016 أو أحدث هذه الوحدة؛ وإذا كانت مفقودة، فلن يجعل أي نص برمجي منسوخ هذا المضيف يقبل ملف تعريف أصيلًا. الأدوات المهمة هي Add-VpnConnection وGet-VpnConnection وRemove-VpnConnection، وقائمة المعاملات في مرجع Add-VpnConnection تستحق قراءة كاملة مرة واحدة.

الأصيل يعني أن حزمة VPN في Windows هي التي تنهي النفق. ويشمل ذلك IKEv2، غالبًا بشهادة جهاز؛ وSSTP، وهو TLS مع مصادقة مستخدم أو شهادة في الداخل؛ وL2TP/IPsec بمفتاح مشترك مسبقًا. ملف .ovpn هو نص OpenVPN وليس اتصال Windows: فهو يحمل توجيهات مثل remote أو cipher أو tls-auth لا تعرف حزمة Windows شيئًا عنها. وملف WireGuard .conf هو القصة نفسها مع PrivateKey وAllowedIPs؛ وتحويل أحدهما إلى الآخر ليس اختيار معامل بل تطبيق نفق مختلف.

هناك فرع ثالث. إذا سلّمك مسؤول مستند VPNv2 CSP XML أو ملف تعريف Intune، فذلك مسار MDM، وتطبقه حزمة التزويد بدلًا من Add-VpnConnection. لا تترجم أسماء تلك العقد إلى معاملات PowerShell؛ اسأل بدلًا من ذلك أي آلية تطبّق ملف XML.

الخطوة 2: اقرن نوع النفق بطريقة المصادقة

-TunnelType و-AuthenticationMethod معاملان منفصلان، والبوابة لا تهتم إلا بالمزيج. اضبط أحدهما صحيحًا والآخر خطأً فتحصل على ملف تعريف لا يتصل بشيء، أو يتوقف والنفق قائم بالفعل. اضبط الاثنين صراحة بدلًا من الوثوق بقيمة افتراضية اختيرت لخدمة أخرى.

  • IKEv2 مع MachineCertificate: يقدّم العميل شهادة حاسوب؛ واضبط أيضًا -EncryptionLevel Required.
  • SSTP مع Eap: نفق TLS أولًا، ثم PEAP/MSCHAPv2 أو شهادة داخل EAP. يحتاج هذا إلى ملف XML في الخطوة 3.
  • SSTP أو L2TP أو PPTP مع MSChapv2 أو Chap أو Pap: اسم مستخدم وكلمة مرور عاديان، بلا كتلة EAP.
  • L2TP مع MSChapv2 و-Lt2pPsk: يغطي PSK شق IPsec، ويغطي المستخدم شق PPP؛ ويجب أن يطابق الاثنان الخادم.

يُبقي أسلوب splat القيم في مكان واحد:

$p = @{
  Name                 = "Corp IKEv2"
  ServerAddress        = "vpn.example.com"
  TunnelType           = "Ikev2"
  AuthenticationMethod = "MachineCertificate"
  EncryptionLevel      = "Required"
  SplitTunneling       = $false
  DnsSuffix            = "corp.example.com"
}
Add-VpnConnection @p -PassThru

-PassThru يعيد الكائن الذي كتبه Windows للتو، فتصفحه دون نداء ثانٍ. وإذا كان الاسم موجودًا بالفعل يرفض الأمر العمل؛ و-Force يستبدله، وهو ردّ الفعل الخاطئ على حاسوب إنتاج لأنه يتخلص بصمت من أي إعداد يدوي.

الخطوة 3: سلّم مواد الاعتماد بالطريقة الصحيحة

كلمات المرور، المفاتيح المشتركة مسبقًا وكتل EAP هي حيث تنكسر هذه النصوص عادةً. يريد -EapConfigXmlStream كائن XmlDocument لا مسارًا، فاقرأ الملف وحوّله أولًا. تمرير سلسلة نصية ينتج خطأ تحويل يبدو كمشكلة مخطط ويدفع الناس إلى إعادة كتابة XML لم يكن خاطئًا قط.

$eap = [xml](Get-Content -Raw .\peap-mschapv2.xml)
Add-VpnConnection -Name "Corp SSTP" -ServerAddress "sstp.example.com" `
  -TunnelType Sstp -AuthenticationMethod Eap `
  -EapConfigXmlStream $eap -EncryptionLevel Required

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

في IKEv2 يكون شق الشهادة بحثًا في المخزن. يأخذ -MachineCertificateIssuerFilter كائن شهادة، ويستخدمه Windows للعثور على شهادة عميل صالحة في LocalMachine\My. تحتاج الشهادة إلى مفتاح خاص وسلسلة يثق بها الخادم؛ وعند غياب أي منهما تفشل المصادقة دون تفاصيل مفيدة، فافحص المخزن أولًا:

Get-ChildItem Cert:\LocalMachine\My |
  Where-Object { $_.HasPrivateKey -and $_.NotAfter -gt (Get-Date) } |
  Select-Object Subject, Issuer, Thumbprint, NotAfter

أبقِ الأسرار خارج ملف النص. مفتاح PSK يُمرر على سطر الأوامر أو يُدمج في ملف .ps1 ينتهي في السجلات والجلسات المحفوظة والمستودعات المشتركة، و-RememberCredential يخزّن اعتمادات المستخدم لوقت لاحق، فيحوّل اختبارًا لمرة واحدة إلى منح دائم.

الخطوة 4: حدّد النطاق قبل التشغيل الأول

الأمر نفسه يكتب في دفتري هاتف مختلفين. بدون -AllUserConnection يكون ملف التعريف لك ويعيش تحت %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. ومعه، من موجّه أوامر مرفوع، يذهب ملف التعريف إلى %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk ويصبح مرئيًا لكل حساب، بما في ذلك شاشة تسجيل الدخول.

النطاق ليس شكليًا. ملف تعريف لكل المستخدمين هو ما يمكن لحساب خدمة أو مهمة مجدولة أو سيناريو قبل تسجيل الدخول استخدامه؛ أما ملف تعريف لكل مستخدم فهو غير مرئي للثلاثة. وتُقرأ الكائنات بشكل مختلف أيضًا: يسرد Get-VpnConnection إدخالات المستخدم الحالي، ويسرد Get-VpnConnection -AllUserConnection إدخالات مستوى الجهاز. اختر واحدًا الآن، واعتبر أي تغيير لاحق حذفًا وإعادة إنشاء لا تعديلًا:

# elevated prompt
Remove-VpnConnection -Name "Corp IKEv2" -Force
Add-VpnConnection -Name "Corp IKEv2" -ServerAddress "vpn.example.com" `
  -TunnelType Ikev2 -AuthenticationMethod MachineCertificate `
  -EncryptionLevel Required -AllUserConnection

الخطوة 5: اختبر ما يجب أن يقدمه النفق فعلًا

أيقونة متصلة تثبت أن النفق قام ولا شيء غير ذلك. اتصل من سطر الأوامر أولًا لتصل الأعطال كنص لا كمربع حوار، ثم اقرأ ما سجّله Windows:

rasdial "Corp IKEv2"
Get-VpnConnection -Name "Corp IKEv2" |
  Select-Object Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling
Get-NetRoute -DestinationPrefix "0.0.0.0/0"

العطلان الذين يبلّغ عنهما المستخدمون بينما لا تزال الحالة تقول Connected هما DNS والتوجيه. حلّ اسمًا داخليًا وافحص أي خادم أجاب؛ فملف تعريف بلا -DnsSuffix قد ينفق تمامًا ويفشل في كل استعلام إنترانت. ثم انظر إلى المسار الافتراضي: مع إيقاف النفق المنقسم يجب أن يشير مسار 0.0.0.0/0 ذو أدنى مقياس إلى واجهة VPN، ومع تشغيله فقط البادئات التي تتوقعها. وإذا بدا الاثنان صحيحين وظل المرور ميتًا، فالمشكلة أبعد من ملف التعريف، في السياسة أو مرشّح البوابة.

حين يفشل الاتصال فشلًا تامًا، يضيّق الرمز الخطوة التي يجب العودة إليها:

  • 691: رفضت البوابة بيانات الاعتماد. عُد إلى الخطوة 3، لا إلى النفق.
  • 809: لم تكتمل مصافحة IKEv2 قط. افحص UDP 500 و4500، وثقة الشهادات.
  • 789: المفتاح المشترك مسبقًا في L2TP/IPsec مفقود أو خاطئ.
  • 868: لم يُحلّ اسم الخادم. أصلح DNS قبل تعديل ملف التعريف.

أبقِ الأمر العامل بجوار الإعدادات التي يرمز إليها، حتى يستطيع الشخص التالي إعادة البناء بدلًا من هندسة ملف التعريف عكسيًا من الواجهة. وإذا اضطررت فعلًا إلى إعادة البناء، فاحذف الإدخال وأعد إنشاءه من المعاملات نفسها؛ فترقيع ملف تعريف نصف مهيأ يترك مسارات وحالة مصادقة قديمة. وإن لم يكن الملف أصيلًا يومًا، فعُد إلى العميل الذي يملكه. ملف .ovpn متنكّر في هيئة ملف IKEv2 ليس استيرادًا، بل تذكرة دعم.

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