Увоз VPN профила у PowerShell-у помоћу Add-VpnConnection
Add-VpnConnection прави само изворне Windows профиле. Ускладите тип тунела и начин провере са пролазом, намерно подесите обим, затим тестирајте руте и DNS.
Не постоји cmdlet 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 или новији имају овај модул; ако га нема, ниједна копирана скрипта неће натерати овај хост да прихвати изворни профил. Важни су cmdlet-ови Add-VpnConnection, Get-VpnConnection и Remove-VpnConnection, а листа параметара у референци Add-VpnConnection вреди једног целог читања.
Изворно значи да Windows VPN стек завршава тунел. То покрива IKEv2, често са сертификатом рачунара; SSTP, који је TLS са провером корисника или сертификата унутра; и L2TP/IPsec са унапред подељеним кључем. Датотека .ovpn је OpenVPN скрипта, не Windows веза: носи директиве попут remote, cipher или tls-auth о којима Windows стек нема појма. Датотека .conf за WireGuard је иста прича са 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 управо записао, па га можете прегледати без другог позива. Ако име већ постоји, 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Држите тајне ван датотеке скрипте. PSK прослеђен у командној линији или уграђен у .ps1 завршава у транскриптима, сачуваним сесијама и дељеним репозиторијумима, а -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 пре него што уређујете профил.
Држите радну команду поред подешавања која кодира, да би следећа особа могла да профил поново састави, а не да га реконструише из интерфејса. Ако ипак морате да га поново саставите, обришите унос и поново га направите од истих параметара; крпење полуподешеног профила за собом оставља застареле руте и стање провере. А ако датотека никада није била изворна, вратите се клијенту који је поседује. Датотека .ovpn преобучена у IKEv2 профил није увоз, него пријава подршци.