Import-VpnProfile cmdlet არ არსებობს, ხოლო ყველაზე მსგავსი, 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 ან უფრო ახალი ამ მოდულს მოიცავს; თუ არ არის, ვერც ერთი კოპირებული სკრიპტი ვერ აიძულებს ამ ჰოსტს მშობლიური პროფილის მიღებას. მნიშვნელოვანი cmdlet-ებია Add-VpnConnection, Get-VpnConnection და Remove-VpnConnection, ხოლო Add-VpnConnection-ის ცნობარის პარამეტრების სია ერთხელ სრულად წაკითხვას ღირს.

მშობლიური ნიშნავს, რომ Windows-ის VPN სტეკი ამთავრებს გვირაბს. ეს მოიცავს 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-ის შიგნით. ამას სჭირდება მე-3 საფეხურის XML.
  • 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-მა ახლახან ჩაწერა, ასე რომ შეგიძლიათ შეამოწმოთ იგი მეორე გამოძახების გარეშე. თუ სახელი უკვე არსებობს, cmdlet უარს ამბობს გაშვებაზე; -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

შეინახეთ საიდუმლოებები სკრიპტის ფაილის გარეთ. ბრძანების სტრიქონზე გადაცემული ან .ps1-ში გამომცხვარი PSK ხვდება ტრანსკრიპტებში, შენახულ სესიებსა და საერთო რეპოზიტორიებში, ხოლო -RememberCredential ინახავს მომხმარებლის სერტიფიკატებს მოგვიანებით გამოსაყენებლად და ერთჯერად ტესტს ხანგრძლივ ნებართვად აქცევს.

საფეხური 4: გადაწყვიტეთ ფარგლები პირველ გაშვებამდე

იგივე cmdlet ორ სხვადასხვა სატელეფონო წიგნში წერს. -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 პროფილის რედაქტირებამდე.

შეინახეთ მომუშავე ბრძანება იმ პარამეტრების გვერდით, რომლებსაც ის კოდირებს, რათა შემდეგმა ადამიანმა ხელახლა ააწყოს და არ მოუწიოს პროფილის ინტერფეისიდან უკუღმა გამოცნობა. თუ მართლა გიწევთ ხელახლა აწყობა, წაშალეთ ჩანაწერი და იგივე პარამეტრებით თავიდან შექმენით; ნახევრად გაწყობილი პროფილის შეკეთება ტოვებს ძველ მარშრუტებსა და ავთენტიფიკაციის მდგომარეობას. და თუ ფაილი არასოდეს ყოფილა მშობლიური, დაუბრუნდით კლიენტს, რომელიც ფლობს მას. IKEv2 პროფილად გამოწყობილი .ovpn იმპორტი არ არის, ის მხარდაჭერის ბილეთია.

დაკავშირებული სტატიები