Каманды 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 можа цудоўна тунеляваць і ўсё ж правальваць кожны пошук у інтранэце. Потым паглядзіце на маршрут па змаўчанні: з выключаным split tunneling маршрут 0.0.0.0/0 з найніжэйшай метрыкай павінен паказваць у інтэрфейс VPN, а з уключаным — толькі чаканыя прэфіксы. Калі абодва выглядаюць правільна, а трафік усё роўна гіне, праблема далей за профіль, у палітыцы ці фільтры шлюза.

Калі злучэнне правальваецца цалкам, код звужае крок, да якога трэба вярнуцца:

  • 691: шлюз адхіліў уліковыя даныя. Вярніцеся да кроку 3, а не да тунеля.
  • 809: рукапацісканне IKEv2 так і не завяршылася. Праверце UDP 500 і 4500, а таксама давер да сертыфікатаў.
  • 789: папярэдне агульны ключ L2TP/IPsec адсутнічае ці няправільны.
  • 868: імя сервера не разгледзілася. Выпраўце DNS, перш чым рэдагаваць профіль.

Трымайце працоўную каманду побач з наладамі, якія яна кадуе, каб наступны чалавек мог перасабраць, а не рэверс-інжынірыць профіль з інтэрфейсу. Калі давядзецца перасабраць, выдаліце запіс і стварыце нанова з тых жа параметраў; латанне паўналаджанага профілю пакідае састарэлыя маршруты і стан аўтэнтыфікацыі. А калі файл ніколі не быў уласным, вярніцеся да кліента, якому ён належыць. .ovpn, прыбраны пад профіль IKEv2, — гэта не імпарт, а заяўка ў падтрымку.

Падобныя артыкулы