Import-VpnProfile adlı cmdlet yoxdur və ona ən yaxın görünən Add-VpnConnection heç vaxt .ovpn və ya .conf faylını oxumur. O, ötürdüyünüz parametrlərdən yerli Windows profilini yığır, buna görə də burada ilk yoxlama nöqtəsi əmr sətri deyil, fayl formatıdır. Əgər şlüz SSTP danışırsa, IKEv2, L2TP/IPsec və ya PPTP, Windows profilin sahibi ola bilər və siyahının qalanı keçərlidir. Əgər sizə OpenVPN və ya WireGuard faylı verilibsə, birinci addımda dayanın: həmin klientlər öz idxalçılarına sahibdir.

Addım 1: Windows-un həqiqətən sahib ola biləcəyi profili təsdiqləyin

Hər şeydən əvvəl maşında Get-Command -Module VpnClient işə salın. Windows 10, Windows 11 və Server 2016 və ya daha yenisi bu modulu gətirir; əgər yoxdursa, heç bir kopyalanmış skript bu hostu yerli profili qəbul etməyə məcbur etməyəcək. Vacib cmdletlər Add-VpnConnection, Get-VpnConnection və Remove-VpnConnection-dır və parametr siyahısı Add-VpnConnection istinadında bir dəfə tam oxumağa dəyər.

Yerli o deməkdir ki, tuneli Windows-un VPN steki bağlayır. Buraya IKEv2, çox vaxt maşın sertifikatı ilə; içəridə istifadəçi və ya sertifikat autentifikasiyası olan TLS olan SSTP; və əvvəlcədən paylaşılmış açar ilə L2TP/IPsec daxildir. .ovpn faylı OpenVPN skriptidir, Windows bağlantısı deyil: o, remote, cipher və ya tls-auth kimi direktivlər daşıyır və Windows stekinin bunlardan xəbəri yoxdur. WireGuard .conf da PrivateKey və AllowedIPs ilə eyni hekayədir; birini digərinə çevirmək parametr seçimi deyil, başqa tunel tətbiqidir.

Üçüncü bir qol var. Əgər administrator sizə VPNv2 CSP XML sənədi və ya Intune profili verirsə, bu MDM yoludur və Add-VpnConnection ilə deyil, təminat steki tərəfindən tətbiq olunur. O node adlarını PowerShell parametrlərinə çevirməyin; əvəzinə XML-i hansı mexanizmin tətbiq etdiyini soruşun.

Addım 2: Tunel növünü autentifikasiya üsulu ilə uyğunlaşdırın

-TunnelType və -AuthenticationMethod ayrı parametrlərdir və şlüz yalnız birləşməyə baxır. Birini düzgün, digərini səhv etsəniz, heç bir yerə qoşulmayan və ya tunel artıq qalxmış halda donan profil alırsınız. Başqa xidmət üçün seçilmiş defolta güvənmək əvəzinə hər ikisini açıq şəkildə təyin edin.

  • IKEv2 və MachineCertificate: klient kompüter sertifikatı təqdim edir; həmçinin -EncryptionLevel Required təyin edin.
  • SSTP və Eap: əvvəlcə TLS tuneli, sonra PEAP/MSCHAPv2 və ya EAP daxilində sertifikat. Bunun üçün 3-cü addımdakı XML lazımdır.
  • SSTP, L2TP və ya PPTP və MSChapv2, Chap və ya Pap: adi istifadəçi adı və parol, EAP bloku yoxdur.
  • L2TP və MSChapv2 və -Lt2pPsk: PSK IPsec hissəsini, istifadəçi PPP hissəsini örtür; hər ikisi serverə uyğun olmalıdır.

Splat dəyərləri bir yerdə saxlayır:

$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-un indicə yazdığı obyekti qaytarır, beləliklə onu ikinci çağırış olmadan yoxlaya bilərsiniz. Ad artıq varsa, cmdlet işləməkdən imtina edir; -Force onu üzərinə yazır, bu isə istehsalat noutbukunda yanlış refleksdir, çünki kimsənin əl ilə qurduğunu səssizcə silir.

Addım 3: Etimad materialını düzgün təhvil verin

Parollar, əvvəlcədən paylaşılmış açarlar və EAP blokları bu skriptlərin adətən sındığı yerdir. -EapConfigXmlStream XmlDocument istəyir, yol deyil, ona görə faylı əvvəlcə oxuyun və çevirin. Sətir ötürmək sxem problemi kimi görünən çevirmə xətası yaradır və insanları heç vaxt səhv olmayan XML-i yenidən yazmağa vadar edir.

$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

Bu XML blog parçasından uydurulacaq bir şey deyil. O, EAP metod növünü və daxili autentifikasiyanı adlandırır və şlüz hər ikisini öz siyasəti ilə müqayisə edir. Uyğunsuz daxili metod TLS əl sıxması tamamlandıqdan sonra uğursuz olur, bu isə tam olaraq səhv parol kimi görünür və deyil. XML-i şlüzü idarə edəndən alın və ya artıq işləyən profildən ixrac edin.

IKEv2-də sertifikat hissəsi anbar axtarışıdır. -MachineCertificateIssuerFilter sertifikat obyekti alır və Windows ondan LocalMachine\My içində yararlı klient sertifikatı tapmaq üçün istifadə edir. Sertifikata şəxsi açar və serverin etibar etdiyi zəncir lazımdır; hər hansı biri yoxdursa, autentifikasiya faydalı detal olmadan uğursuz olur, ona görə əvvəlcə anbara baxın:

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

Sirləri skript faylından kənarda saxlayın. Əmr sətrində ötürülən və ya .ps1 içinə yazılan PSK transkriptlərə, saxlanmış sessiyalara və paylaşılan repozitoriyalara düşür, -RememberCredential isə istifadəçi etimadlarını sonrası üçün keşləyir və birdəfəlik testi daimi icazəyə çevirir.

Addım 4: İlk işə salmadan əvvəl əhatəni qərar verin

Eyni cmdlet iki fərqli telefon kitabçasına yazır. -AllUserConnection olmadan profil sizə məxsusdur və %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk altında yaşayır. Onunla, yüksəldilmiş əmr sətrindən, profil %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk içinə gedir və giriş ekranı da daxil olmaqla hər hesaba görünür.

Əhatə kosmetik deyil. Bütün istifadəçilər üçün profil xidmət hesabının, planlaşdırılmış tapşırığın və ya girişdən əvvəl ssenarisinin istifadə edə biləcəyi şeydir; bir istifadəçi üçün profil hər üçünə görünməzdir. Obyektlər fərqli oxunur: Get-VpnConnection cari istifadəçi qeydlərini, Get-VpnConnection -AllUserConnection maşın səviyyəli olanları sadalayır. Birini indi seçin və sonrakı dəyişikliyi redaktə deyil, silib yenidən yaratma kimi qəbul edin:

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

Addım 5: Tunelin həqiqətən çatdırmalı olduğunu test edin

Qoşulmuş ikon tunelin qalxdığını sübut edir və başqa heç nə. Əvvəlcə əmr sətrindən qoşulun ki, uğursuzluqlar dialoq deyil, mətn kimi gəlsin, sonra Windows-un qeyd etdiyini oxuyun:

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

İstifadəçilərin status hələ də Connected yazarkən bildirdiyi iki uğursuzluq DNS və marşrutlaşdırmadır. Daxili adı həll edin və hansı serverin cavab verdiyini yoxlayın; -DnsSuffix olmayan profil mükəmməl tunel qura və yenə də hər intranet axtarışında uğursuz ola bilər. Sonra defolt marşruta baxın: split tunneling söndürülmüş halda ən aşağı metrikli 0.0.0.0/0 marşrutu VPN interfeysinə işarə etməlidir, yandırılmış halda isə yalnız gözlədiyiniz prefikslər. Əgər hər ikisi düzgün görünür və trafik yenə ölürsə, problem profildən sonradır, siyasətdə və ya şlüz filtrindədir.

Bağlantı tamamilə uğursuz olduqda, kod yenidən baxılacaq addımı daraldır:

  • 691: şlüz etimadları rədd etdi. Tunelə deyil, 3-cü addıma qayıdın.
  • 809: IKEv2 əl sıxması heç tamamlanmadı. UDP 500 və 4500-ü, həmçinin sertifikat etibarını yoxlayın.
  • 789: L2TP/IPsec əvvəlcədən paylaşılmış açarı yoxdur və ya səhvdir.
  • 868: server adı həll olunmadı. Profili redaktə etməzdən əvvəl DNS-i düzəldin.

İşləyən əmri kodlaşdırdığı parametrlərin yanında saxlayın ki, növbəti şəxs profili interfeysdən tərsinə mühəndislik etmək əvəzinə yenidən qura bilsin. Əgər yenidən qurmalı olsanız, qeydi silin və eyni parametrlərdən yenidən yaradın; yarım konfiqurasiya edilmiş profili yamaq köhnə marşrutlar və autentifikasiya vəziyyəti saxlayır. Və əgər fayl heç vaxt yerli olmayıbsa, ona sahib olan klientə qayıdın. IKEv2 profili kimi bəzədilmiş .ovpn idxal deyil, dəstək bileti.

Əlaqəli məqalələr