Імпарт профілю VPN у PowerShell з дапамогай Add-VpnConnection
Add-VpnConnection стварае толькі ўласныя профілі Windows. Спалучыце тунель і аўтэнтыфікацыю са шлюзам, свядома задайце ахоп, потым праверце маршруты і DNS.
Каманды 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, — гэта не імпарт, а заяўка ў падтрымку.