Uvoz profila VPN v PowerShellu z ukazom Add-VpnConnection
Add-VpnConnection ustvari samo izvorne profile Windows. Vrsto tunela in način preverjanja uskladite s prehodom, obseg nastavite namerno in nato preizkusite poti ter DNS.
Ukaza Import-VpnProfile ni, tisti, ki je videti najbližje, Add-VpnConnection, pa nikoli ne prebere datoteke .ovpn ali .conf. Sestavi izvorni profil Windows iz parametrov, ki jih podate, zato je prva kontrola tukaj oblika datoteke in ne ukazne vrstice. Če prehod govori SSTP, IKEv2, L2TP/IPsec ali PPTP, lahko Windows profil poseduje in preostanek seznama velja. Če ste dobili datoteko OpenVPN ali WireGuard, se ustavite pri prvem koraku: te uvoznike posedujejo odjemalci sami.
Korak 1: Potrdite, da lahko profil res poseduje Windows
Zaženite Get-Command -Module VpnClient na stroju pred vsem drugim. Windows 10, Windows 11 in Server 2016 ali novejši prinašajo ta modul; če ga ni, nobena kopirana skripta ne bo prisilila tega gostitelja, da sprejme izvorni profil. Pomembni so ukazi Add-VpnConnection, Get-VpnConnection in Remove-VpnConnection, seznam parametrov v referenci Add-VpnConnection pa je vreden enega celotnega branja.
Izvorno pomeni, da tunele zaključuje sklad VPN v Windows. To zajema IKEv2, pogosto s računalniškim potrdilom; SSTP, ki je TLS s preverjanjem uporabnika ali potrdila znotraj; in L2TP/IPsec s predhodno dogovorjenim ključem. Datoteka .ovpn je skripta OpenVPN, ne povezava Windows: nosi direktive, kot so remote, cipher ali tls-auth, o katerih sklad Windows nima pojma. Datoteka .conf WireGuard je ista zgodba s PrivateKey in AllowedIPs; pretvoriti eno v drugo ni izbira parametra, ampak druga izvedba tunela.
Obstaja še tretja veja. Če vam skrbnik izroči dokument XML VPNv2 CSP ali profil Intune, je to pot MDM, ki jo uporabi sklad za zagotavljanje in ne Add-VpnConnection. Teh imen vozlišč ne prevajajte v parametre PowerShell; raje vprašajte, kateri mehanizem uporabi ta XML.
Korak 2: Povežite vrsto tunela z načinom preverjanja
-TunnelType in -AuthenticationMethod sta ločena parametra in prehod zanima le kombinacija. Eno nastavite prav in drugo narobe, pa dobite profil, ki se ne poveže nikamor, ali se ustavi z že dvignjenim tunelom. Nastavite oba izrecno, namesto da bi zaupali privzeti vrednosti, izbrani za drugo storitev.
- IKEv2 z MachineCertificate: odjemalec predloži računalniško potrdilo; nastavite tudi -EncryptionLevel Required.
- SSTP z Eap: najprej tunel TLS, nato PEAP/MSCHAPv2 ali potrdilo znotraj EAP. To zahteva XML iz koraka 3.
- SSTP, L2TP ali PPTP z MSChapv2, Chap ali Pap: običajno uporabniško ime in geslo, brez bloka EAP.
- L2TP z MSChapv2 in -Lt2pPsk: PSK pokriva polovico IPsec, uporabnik pokriva PPP; oba se morata ujemati s strežnikom.
Splat ohrani vrednosti na enem mestu:
$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 vrne objekt, ki ga je Windows pravkar zapisal, zato ga lahko pregledate brez drugega klica. Če ime že obstaja, ukaz noče teči; -Force ga prepiše, kar je na produkcijskem prenosniku napačen refleks, ker tiho zavrže vse, kar je nekdo nastavil ročno.
Korak 3: Poverilnice izročite pravilno
Gesla, predhodno dogovorjeni ključi in bloki EAP so mesto, kjer se te skripte običajno zlomijo. -EapConfigXmlStream hoče XmlDocument, ne poti, zato datoteko najprej preberite in pretvorite. Če podate niz, dobite napako pretvorbe, ki se bere kot težava s shemo in ljudi pošilja prepisovati XML, ki nikoli ni bilo napačno.
$eap = [xml](Get-Content -Raw .\peap-mschapv2.xml)
Add-VpnConnection -Name "Corp SSTP" -ServerAddress "sstp.example.com" `
-TunnelType Sstp -AuthenticationMethod Eap `
-EapConfigXmlStream $eap -EncryptionLevel RequiredTega XML ni dobro izumljati iz drobca na blogu. Poimenuje vrsto metode EAP in notranje preverjanje, prehod pa oboje primerja s svojo politiko. Neustrezna notranja metoda odpove po končanem rokovanju TLS, kar je videti natanko kot napačno geslo, pa ni. XML vzemite od tistega, ki upravlja prehod, ali ga izvozite iz profila, ki že deluje.
Pri IKEv2 je polovica s potrdilom iskanje v shrambi. -MachineCertificateIssuerFilter sprejme objekt potrdila in Windows ga uporabi za iskanje uporabnega odjemalskega potrdila v LocalMachine\My. Potrdilo potrebuje zasebni ključ in verigo, ki ji strežnik zaupa; ko manjka karkoli od tega, preverjanje odpove brez koristnih podrobnosti, zato najprej preglejte shrambo:
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.HasPrivateKey -and $_.NotAfter -gt (Get-Date) } |
Select-Object Subject, Issuer, Thumbprint, NotAfterSkrivnosti naj ostanejo zunaj skripte. PSK, podan v ukazni vrstici ali vgrajen v .ps1, konča v prepisih, shranjenih sejah in skupnih repozitorijih, -RememberCredential pa shrani uporabniške poverilnice za pozneje in iz enkratnega preizkusa naredi trajno dovoljenje.
Korak 4: Odločite se o obsegu pred prvo izvedbo
Isti ukaz piše v dve različni telefonski knjigi. Brez -AllUserConnection profil pripada vam in živi v %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Z njim, iz povišane ukazne vrstice, gre profil v %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk in je viden vsakemu računu, vključno s prijavnim zaslonom.
Obseg ni kozmetika. Profil za vse uporabnike je tisto, kar lahko uporabi servisni račun, načrtovana opravila ali scenarij pred prijavo; profil posameznega uporabnika je za vse tri neviden. Tudi objekti se berejo drugače: Get-VpnConnection našteje vnose trenutnega uporabnika, Get-VpnConnection -AllUserConnection pa tiste za celoten stroj. Izberite enega zdaj in poznejšo spremembo obravnavajte kot brisanje in ponovno ustvarjanje, ne kot urejanje:
# elevated prompt
Remove-VpnConnection -Name "Corp IKEv2" -Force
Add-VpnConnection -Name "Corp IKEv2" -ServerAddress "vpn.example.com" `
-TunnelType Ikev2 -AuthenticationMethod MachineCertificate `
-EncryptionLevel Required -AllUserConnectionKorak 5: Preizkusite, kaj mora tunel dejansko dostaviti
Ikona povezave dokazuje, da se je tunel dvignil, in nič drugega. Zato se najprej povežite iz ukazne vrstice, da napake prispejo kot besedilo in ne kot pogovorno okno, nato preberite, kaj je Windows zabeležil:
rasdial "Corp IKEv2"
Get-VpnConnection -Name "Corp IKEv2" |
Select-Object Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling
Get-NetRoute -DestinationPrefix "0.0.0.0/0"Dve okvari, ki jih uporabniki prijavljajo, medtem ko status še vedno kaže Connected, sta DNS in usmerjanje. Razrešite notranje ime in preverite, kateri strežnik je odgovoril; profil brez -DnsSuffix lahko tunelira brezhibno in vseeno odpove pri vsakem iskanju v intranetu. Nato poglejte privzeto pot: z izklopljenim deljenim tuneliranjem mora pot 0.0.0.0/0 z najnižjo metriko kazati v vmesnik VPN, z vklopljenim pa le predpone, ki jih pričakujete. Če je oboje videti prav in promet vseeno umre, je težava za profilom, v politiki ali filtru prehoda.
Ko povezava popolnoma odpove, koda zoži korak, h kateremu se vrniti:
- 691: prehod je zavrnil poverilnice. Vrnite se h koraku 3, ne k tunelu.
- 809: rokovanje IKEv2 se ni nikoli dokončalo. Preverite UDP 500 in 4500 ter zaupanje v potrdilo.
- 789: predhodno dogovorjeni ključ L2TP/IPsec manjka ali je napačen.
- 868: ime strežnika se ni razrešilo. Popravite DNS, preden urejate profil.
Delujoči ukaz naj stoji ob nastavitvah, ki jih zapisuje, da bo naslednja oseba lahko profil znova sestavila, namesto da bi ga rekonstruirala iz vmesnika. Če ga res morate sestaviti znova, izbrišite vnos in ga ustvarite iz istih parametrov; popravljanje napol nastavljenega profila za seboj pušča zastarele poti in stanje preverjanja. In če datoteka nikoli ni bila izvorna, se vrnite k odjemalcu, ki jo poseduje. Datoteka .ovpn, preoblečena v profil IKEv2, ni uvoz, ampak prijavljena težava.