Det finst ingen cmdlet Import-VpnProfile, og den som liknar mest, Add-VpnConnection, les aldri ei .ovpn- eller .conf-fil. Han set saman ein native Windows-profil av parametrane du sender inn, og difor er den fyrste kontrollen her filformatet og ikkje kommandolinja. Viss gatewayen snakkar SSTP, IKEv2, L2TP/IPsec eller PPTP, kan Windows eige profilen og resten av lista gjeld. Fekk du ei OpenVPN- eller WireGuard-fil, stoppar du på steg ein: dei klientane har sine eigne importørar.

Steg 1: stadfest kva profil Windows faktisk kan eige

Køyr Get-Command -Module VpnClient på maskina før noko anna. Windows 10, Windows 11 og Server 2016 eller nyare leverer modulen; manglar han, gjer ingen kopiert skript at denne verten godtek ein native profil. Cmdletane som tel er Add-VpnConnection, Get-VpnConnection og Remove-VpnConnection, og parameterlista i Add-VpnConnection-referansen er verd ein full gjennomlesing.

Native betyr at Windows-VPN-stakken avsluttar tunnelen. Det dekkjer IKEv2, ofte med eit maskinsertifikat; SSTP, som er TLS med brukar- eller sertifikatautentisering inni; og L2TP/IPsec med ein førehandsdel nøkkel. Ei .ovpn-fil er eit OpenVPN-skript, ikkje ei Windows-tilkopling: ho ber direktiv som remote, cipher eller tls-auth som Windows-stakken ikkje har noko omgrep om. Ei WireGuard .conf er same soga med PrivateKey og AllowedIPs; å gjere om den eine til den andre er ikkje eit parameterval, men ein annan tunnelimplementasjon.

Det finst ei tredje grein. Får du eit VPNv2 CSP XML-dokument eller ein Intune-profil av ein administrator, er det MDM-vegen, brukt av klargjeringsstakken og ikkje av Add-VpnConnection. Omset ikkje dei nodenamna til PowerShell-parametrar; spør kva mekanisme som brukar XML-en i staden.

Steg 2: para tunneltypen med autentiseringsmetoden

-TunnelType og -AuthenticationMethod er separate parametrar, og gatewayen bryr seg berre om kombinasjonen. Får du den eine rett og den andre feil, endar du med ein profil som ikkje koplar til noko, eller som heng med tunnelen alt oppe. Set begge eksplisitt i staden for å stole på ein standardverdi som vart vald for ei anna teneste.

  • IKEv2 med MachineCertificate: klienten legg fram eit datamaskinsertifikat; set òg -EncryptionLevel Required.
  • SSTP med Eap: fyrst TLS-tunnelen, så PEAP/MSCHAPv2 eller eit sertifikat inni EAP. Dette krev XML-en frå steg 3.
  • SSTP, L2TP eller PPTP med MSChapv2, Chap eller Pap: vanleg brukarnamn og passord, ingen EAP-blob.
  • L2TP med MSChapv2 og -Lt2pPsk: PSK-en dekkjer IPsec-halvdelen, brukaren dekkjer PPP; begge må stemme med tenaren.

Ein splat held verdiane på ein stad:

$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 returnerer objektet Windows nettopp skreiv, så du kan sjå på det utan eit andre kall. Finnst namnet alt, nektar cmdleten å køyre; -Force overskriv det, og det er feil refleks på ein produksjonslaptop, fordi det kastar stille det nokon har sett opp for hand.

Steg 3: overlever referansematerialet rett

Passord, førehandsdelte nøklar og EAP-blobar er der desse skripta vanlegvis knekk. -EapConfigXmlStream vil ha eit XmlDocument, ikkje ein stig, så les og cast fila fyrst. Å sende ein streng gjev ein konverteringsfeil som høyrest ut som eit skjemaproblem og får folk til å skrive om XML som aldri var feil.

$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

Den XML-en finn ein ikkje opp frå eit bloggutdrag. Han namngjev EAP-metodetypen og den indre autentiseringa, og gatewayen samanliknar begge med sin eigen policy. Ein indre metode som ikkje passar, feilar etter at TLS-handtrykket er ferdig, noko som ser nøyaktig ut som eit dårleg passord og ikkje er det. Hent XML-en frå den som driv gatewayen, eller eksporter han frå ein profil som alt verkar.

For IKEv2 er sertifikathalvdelen eit oppslag i lageret. -MachineCertificateIssuerFilter tek eit sertifikatobjekt, og Windows brukar det til å finne eit brukande klientsertifikat i LocalMachine\My. Sertifikatet treng ein privat nøkkel og ei kjede som tenaren stolar på; manglar ei av dei, feilar autentiseringa utan noko nyttig detalj, so sjekk lageret fyrst:

Get-ChildItem Cert:\LocalMachine\My |
  Where-Object { $_.HasPrivateKey -and $_.NotAfter -gt (Get-Date) } |
  Select-Object Subject, Issuer, Thumbprint, NotAfter

Hald løyndomar utanfor skriptfila. Ein PSK som vert send på kommandolinja eller baka inn i ei .ps1-fil, endar i transkript, lagra økter og delte repositorium, og -RememberCredential cachar brukarpålogging for seinare, og gjer ein eingongstest til ei varig løyve.

Steg 4: avgjer omfanget før fyrste køyring

Same cmdleten skriv til to ulike telefonbøker. Utan -AllUserConnection høyrer profilen til deg og ligg under %APPDATA\Microsoft\Network\Connections\Pbk\rasphone.pbk. Med han, frå eit forhøgd kommandovindauge, går profilen til %ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk og er synleg for kvar konto, òg innloggingsskjermen.

Omfanget er ikkje kosmetisk. Ein profil for alle brukarar er det ein tenestekonto, ein planlagd oppgåve eller eit scenario før innlogging kan bruke; ein profil per brukar er usynleg for alle tre. Objekta vert lesne ulikt òg: Get-VpnConnection listar oppføringane til den gjeldande brukaren, Get-VpnConnection -AllUserConnection listar dei maskinbreie. Vel ein no, og handsam ei seinare endring som sletting og nyoppretting i staden for redigering:

# elevated prompt
Remove-VpnConnection -Name "Corp IKEv2" -Force
Add-VpnConnection -Name "Corp IKEv2" -ServerAddress "vpn.example.com" `
  -TunnelType Ikev2 -AuthenticationMethod MachineCertificate `
  -EncryptionLevel Required -AllUserConnection

Steg 5: test kva ein tunnel faktisk må levere

Eit oppkopla ikon provar at tunnelen kom opp og ingenting meir. Kopla til frå kommandolinja fyrst, så feila kjem som tekst og ikkje som ein dialog, og les så attende det Windows har ført opp:

rasdial "Corp IKEv2"
Get-VpnConnection -Name "Corp IKEv2" |
  Select-Object Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling
Get-NetRoute -DestinationPrefix "0.0.0.0/0"

Dei to feila brukarar melder medan statusen framleis seier Tilkopla, er DNS og rutar. Løys opp eit internt namn og sjå kva tenar som svara; ein profil utan -DnsSuffix kan tunnelere perfekt og likevel feile på kvar intranett-oppslag. Sjå så på standardruta: med split tunneling av skal ruta 0.0.0.0/0 med lågast metrik peike inn i VPN-grensesnittet, og med han på berre prefiksa du ventar. Ser begge rette ut og trafikken likevel døyr, ligg problemet forbi profilen, i policy eller i gatewayfilteret.

Når tilkoplinga feilar heilt, snevrar koden inn steget du skal gå tilbake til:

  • 691: gatewayen avviste pålogginga. Gå tilbake til steg 3, ikkje til tunnelen.
  • 809: IKEv2-handtrykket vart aldri ferdig. Sjekk UDP 500 og 4500, og tilliten til sertifikatet.
  • 789: den førehandsdelte nøkkelen for L2TP/IPsec manglar eller er feil.
  • 868: tenarnamnet vart ikkje løyst opp. Reparer DNS før du redigerer profilen.

Hald den verande kommandoen ved sida av innstillingane han kodar, så den neste personen kan byggje opp att i staden for å reversere profilen frå grensesnittet. Må du likevel byggje opp att, slett oppføringa og lag henne på nytt med dei same parametrane; å lappe ein halvkonfigurert profil lèt att gamle ruter og autentiseringstilstand. Og var fila aldri native, gå tilbake til klienten som eig henne. Ei .ovpn-fil pynta som IKEv2-profil er ikkje ein import, det er ein supportbillett.

Relaterte artiklar