VPN profilio importavimas PowerShell terpėje naudojant Add-VpnConnection
Add-VpnConnection kuria tik savuosius Windows profilius. Suderinkite tunelio ir autentifikavimo porą su tinklų sietuvu, sąmoningai nustatykite apimtį, tada patikrinkite maršrutus ir DNS.
Nėra jokio Import-VpnProfile cmdlet, o artimiausias, Add-VpnConnection, niekada neskaito .ovpn ar .conf failo. Jis surenka savąjį Windows profilį iš jūsų pateiktų parametrų, todėl pirmas patikros taškas čia yra failo formatas, o ne komandų eilutė. Jei tinklų sietuvas kalba SSTP, IKEv2, L2TP/IPsec arba PPTP, Windows gali valdyti profilį ir likusi sąrašo dalis galioja. Jei gavote OpenVPN ar WireGuard failą, sustokite prie pirmo žingsnio: tie klientai turi savo importuotojus.
1 žingsnis: patvirtinkite, kokį profilį Windows iš tikrųjų gali valdyti
Pirmiausia kompiuteryje paleiskite Get-Command -Module VpnClient. Windows 10, Windows 11 ir Server 2016 ar naujesnės versijos turi šį modulį; jei jo nėra, joks nukopijuotas scenarijus neprivers šio kompiuterio priimti savojo profilio. Svarbiausi cmdlet yra Add-VpnConnection, Get-VpnConnection ir Remove-VpnConnection, o Add-VpnConnection nuorodos parametrų sąrašą verta kartą perskaityti visą.
Savasis reiškia, kad Windows VPN stekas užbaigia tunelį. Tai apima IKEv2, dažnai su kompiuterio sertifikatu; SSTP, kuris yra TLS su vartotojo ar sertifikato autentifikavimu viduje; ir L2TP/IPsec su iš anksto bendrinamu raktu. .ovpn failas yra OpenVPN scenarijus, o ne Windows ryšys: jame yra tokios direktyvos kaip remote, cipher ar tls-auth, apie kurias Windows stekas neturi supratimo. WireGuard .conf yra ta pati istorija su PrivateKey ir AllowedIPs; vieną paversti kitu nėra parametro pasirinkimas, o kita tunelio realizacija.
Yra ir trečia šaka. Jei administratorius jums duoda VPNv2 CSP XML dokumentą ar Intune profilį, tai MDM kelias, kurį taiko paruošimo stekas, o ne Add-VpnConnection. Neverskite tų mazgų pavadinimų į PowerShell parametrus; paklauskite, kuris mechanizmas taiko XML.
2 žingsnis: suderinkite tunelio tipą su autentifikavimo metodu
-TunnelType ir -AuthenticationMethod yra atskiri parametrai, o tinklų sietuvui rūpi tik derinys. Vienas teisingas, kitas neteisingas ir gausite profilį, kuris niekur nesijungia arba stringa jau pakėlus tunelį. Nustatykite abu aiškiai, o ne pasitikėkite numatytąja reikšme, parinkta kitai paslaugai.
- IKEv2 su MachineCertificate: klientas pateikia kompiuterio sertifikatą; taip pat nustatykite -EncryptionLevel Required.
- SSTP su Eap: pirmiausia TLS tunelis, tada PEAP/MSCHAPv2 arba sertifikatas EAP viduje. Tam reikia 3 žingsnio XML.
- SSTP, L2TP ar PPTP su MSChapv2, Chap ar Pap: paprastas vardas ir slaptažodis, jokio EAP bloko.
- L2TP su MSChapv2 ir -Lt2pPsk: PSK dengia IPsec pusę, vartotojas PPP; abu turi atitikti serverį.
Splat laiko reikšmes vienoje vietoje:
$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 grąžina objektą, kurį Windows ką tik įrašė, todėl galite jį apžiūrėti be antro kvietimo. Jei vardas jau yra, cmdlet atsisako vykdyti; -Force jį perrašo, ir tai neteisingas refleksas gamybiniame nešiojamame kompiuteryje, nes tyliai numeta tai, ką kas nors sukonfigūravo rankiniu būdu.
3 žingsnis: perduokite kredencialų medžiagą teisingai
Slaptažodžiai, iš anksto bendrinami raktai ir EAP blokai yra vieta, kur šie scenarijai dažniausiai lūžta. -EapConfigXmlStream nori XmlDocument, o ne kelio, todėl pirmiausia perskaitykite ir konvertuokite failą. Perdavus eilutę gaunama konvertavimo klaida, kuri atrodo kaip schemos problema ir nukreipia žmones perrašyti XML, kuris niekada nebuvo klaidingas.
$eap = [xml](Get-Content -Raw .\peap-mschapv2.xml)
Add-VpnConnection -Name "Corp SSTP" -ServerAddress "sstp.example.com" `
-TunnelType Sstp -AuthenticationMethod Eap `
-EapConfigXmlStream $eap -EncryptionLevel RequiredTas XML nėra išgalvojamas iš tinklaraščio ištraukos. Jis įvardija EAP metodo tipą ir vidinę autentifikavimą, o tinklų sietuvas abu lygina su savo politika. Nesutampantis vidinis metodas nepavyksta po TLS rankos paspaudimo pabaigos, o tai atrodo lygiai kaip blogas slaptažodis ir nėra juo. Paimkite XML iš to, kas administruoja tinklų sietuvą, arba eksportuokite jį iš profilio, kuris jau veikia.
IKEv2 atveju sertifikato pusė yra saugyklos paieška. -MachineCertificateIssuerFilter priima sertifikato objektą, o Windows jį naudoja tinkamam kliento sertifikatui LocalMachine\My rasti. Sertifikatui reikia privataus rakto ir grandinės, kuria serveris pasitiki; kai kurios nors trūksta, autentifikavimas nepavyksta be naudingos informacijos, todėl pirmiausia patikrinkite saugyklą:
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.HasPrivateKey -and $_.NotAfter -gt (Get-Date) } |
Select-Object Subject, Issuer, Thumbprint, NotAfterLaikykite paslaptis už scenarijaus failo ribų. Komandų eilutėje perduotas ar į .ps1 įkepintas PSK patenka į transkriptus, išsaugotas sesijas ir bendras saugyklas, o -RememberCredential talpina vartotojo kredencialus vėlesniam laikui ir vienkartinį testą paverčia ilgalaikiu leidimu.
4 žingsnis: nuspręskite apimtį prieš pirmą paleidimą
Tas pats cmdlet rašo į dvi skirtingas telefonų knygas. Be -AllUserConnection profilis yra jūsų ir gyvena %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Su juo, iš padidintų teisių komandinės eilutės, profilis patenka į %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk ir matomas kiekvienai paskyrai, įskaitant prisijungimo ekraną.
Apimtis nėra kosmetinė. Visų vartotojų profilis yra tai, ką gali naudoti paslaugos paskyra, suplanuota užduotis ar scenarijus prieš prisijungimą; vieno vartotojo profilis jiems trims yra nematomas. Objektai skaitomi irgi skirtingai: Get-VpnConnection išvardija dabartinio vartotojo įrašus, Get-VpnConnection -AllUserConnection visos mašinos. Pasirinkite vieną dabar, o vėlesnį pakeitimą traktuokite kaip ištrynimą ir sukūrimą iš naujo, o ne redagavimą:
# elevated prompt
Remove-VpnConnection -Name "Corp IKEv2" -Force
Add-VpnConnection -Name "Corp IKEv2" -ServerAddress "vpn.example.com" `
-TunnelType Ikev2 -AuthenticationMethod MachineCertificate `
-EncryptionLevel Required -AllUserConnection5 žingsnis: patikrinkite, ką tunelis iš tikrųjų turi perduoti
Prisijungta piktograma įrodo, kad tunelis pakilo, ir nieko daugiau. Pirmiausia prisijunkite iš komandų eilutės, kad gedimai ateitų kaip tekstas, o ne dialogas, tada perskaitykite, ką Windows įrašė:
rasdial "Corp IKEv2"
Get-VpnConnection -Name "Corp IKEv2" |
Select-Object Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling
Get-NetRoute -DestinationPrefix "0.0.0.0/0"Du gedimai, apie kuriuos vartotojai praneša, kai būsena dar rodo Connected, yra DNS ir maršrutizavimas. Išspręskite vidinį vardą ir patikrinkite, kuris serveris atsakė; profilis be -DnsSuffix gali puikiai tuneliuoti ir vis tiek nepavykti kiekvienoje intraneto paieškoje. Tada pažiūrėkite numatytąjį maršrutą: kai padalintas tunelis išjungtas, mažiausios metrikos 0.0.0.0/0 maršrutas turėtų rodyti į VPN sąsają, o kai įjungtas tik tie priešdėliai, kurių tikitės. Jei abu atrodo teisingai, o srautas vis tiek miršta, problema yra anapus profilio, politikoje ar tinklų sietuvo filtre.
Kai ryšys visiškai nepavyksta, kodas susiaurina žingsnį, prie kurio grįžti:
- 691: tinklų sietuvas atmetė kredencialus. Grįžkite prie 3 žingsnio, o ne prie tunelio.
- 809: IKEv2 rankos paspaudimas niekada nebuvo baigtas. Patikrinkite UDP 500 ir 4500 bei sertifikato pasitikėjimą.
- 789: L2TP/IPsec iš anksto bendrinamo rakto trūksta arba jis neteisingas.
- 868: serverio vardas nebuvo išspręstas. Pataisykite DNS prieš redaguodami profilį.
Laikykite veikiančią komandą šalia nustatymų, kuriuos ji koduoja, kad kitas žmogus galėtų atstatyti, o ne atvirkščiai inžineruoti profilį iš sąsajos. Jei tikrai turite atstatyti, ištrinkite įrašą ir sukurkite jį iš naujo su tais pačiais parametrais; pusiau sukonfigūruoto profilio lopymas palieka pasenusius maršrutus ir autentifikavimo būseną. O jei failas niekada nebuvo savasis, grįžkite prie kliento, kuris jį valdo. .ovpn, persirengęs IKEv2 profiliu, nėra importas, tai palaikymo bilietas.