Import-VpnProfile-cmdletia ei ole, eikä lähimmäksi näyttävä Add-VpnConnection koskaan lue .ovpn- tai .conf-tiedostoa. Se kokoaa natiivin Windows-profiilin antamistasi parametreista, minkä vuoksi ensimmäinen tarkistuskohta tässä on tiedostomuoto eikä komentorivi. Jos yhdyskäytävä puhuu SSTP, IKEv2, L2TP/IPsec tai PPTP, Windows voi omistaa profiilin ja loput listasta pätevät. Jos sinulle annettiin OpenVPN- tai WireGuard-tiedosto, pysähdy ensimmäiseen vaiheeseen: ne asiakkaat omistavat omat tuojansa.

Vaihe 1: Varmista, minkä profiilin Windows voi todella omistaa

Aja Get-Command -Module VpnClient koneella ennen muuta. Windows 10, Windows 11 ja Server 2016 tai uudempi toimittavat moduulin; jos se puuttuu, mikään kopioitu skripti ei saa tätä konetta hyväksymään natiivia profiilia. Oleelliset cmdletit ovat Add-VpnConnection, Get-VpnConnection ja Remove-VpnConnection, ja Add-VpnConnection-viitteen parametriluettelo kannattaa lukea kerran kokonaan.

Natiivi tarkoittaa, että Windowsin VPN-pino päättää tunnelin. Siihen kuuluvat IKEv2, usein konetodistuksella; SSTP, joka on TLS ja jonka sisällä on käyttäjä- tai todistustodennus; sekä L2TP/IPsec esijaetulla avaimella. .ovpn-tiedosto on OpenVPN-skripti, ei Windows-yhteys: se kuljettaa direktiivejä kuten remote, cipher tai tls-auth, joista Windowsin pinolla ei ole käsitystä. WireGuardin .conf on sama tarina PrivateKey- ja AllowedIPs-avaimilla; toisen muuntaminen toiseksi ei ole parametrivalinta vaan eri tunnelitoteutus.

On kolmaskin haara. Jos ylläpitäjä antaa sinulle VPNv2 CSP -XML-asiakirjan tai Intune-profiilin, se on MDM-polku, jonka toteuttaa provisiointipino eikä Add-VpnConnection. Älä käännä noita solmun nimiä PowerShell-parametreiksi; kysy sen sijaan, mikä mekanismi soveltaa XML:ää.

Vaihe 2: Sovita tunnelityyppi todennusmenetelmään

-TunnelType ja -AuthenticationMethod ovat erillisiä parametreja, ja yhdyskäytävää kiinnostaa vain yhdistelmä. Kun toinen on oikein ja toinen väärin, saat profiilin, joka ei yhdistä mihinkään tai jumittuu tunnelin ollessa jo pystyssä. Aseta molemmat nimenomaisesti sen sijaan, että luottaisit oletukseen, joka valittiin eri palvelulle.

  • IKEv2 ja MachineCertificate: asiakas esittää tietokonetodistuksen; aseta myös -EncryptionLevel Required.
  • SSTP ja Eap: ensin TLS-tunneli, sitten PEAP/MSCHAPv2 tai todistus EAP:n sisällä. Tämä vaatii vaiheen 3 XML:n.
  • SSTP, L2TP tai PPTP ja MSChapv2, Chap tai Pap: pelkkä käyttäjätunnus ja salasana, ei EAP-blobia.
  • L2TP ja MSChapv2 sekä -Lt2pPsk: PSK kattaa IPsec-osan, käyttäjä kattaa PPP:n; molempien on vastattava palvelinta.

Splat pitää arvot yhdessä paikassa:

$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 palauttaa objektin, jonka Windows juuri kirjoitti, joten voit tarkastella sitä ilman toista kutsua. Jos nimi on jo olemassa, cmdlet kieltäytyy ajamasta; -Force kirjoittaa sen yli, mikä on väärä refleksi tuotantokannettavassa, koska se hävittää äänettömästi sen, mitä joku on käsin määrittänyt.

Vaihe 3: Luovuta tunnistetiedot oikein

Salasanat, esijaetut avaimet ja EAP-blobit ovat se kohta, jossa nämä skriptit yleensä hajoavat. -EapConfigXmlStream haluaa XmlDocumentin, ei polkua, joten lue ja muunna tiedosto ensin. Merkkijonon välittäminen tuottaa muunnosvirheen, joka näyttää skeemaongelmalta ja saa ihmiset kirjoittamaan uudelleen XML:ää, joka ei koskaan ollut väärin.

$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

Sitä XML:ää ei ole tarkoitus keksiä blogin katkelmasta. Se nimeää EAP-menetelmätyypin ja sisäisen todennuksen, ja yhdyskäytävä vertaa molempia käytäntöönsä. Yhteensopimaton sisäinen menetelmä epäonnistuu sen jälkeen, kun TLS-kättely on valmis, mikä näyttää täsmälleen väärältä salasanalta eikä sitä ole. Ota XML siltä, joka ylläpitää yhdyskäytävää, tai vie se profiilista, joka jo toimii.

IKEv2:ssa todistusosa on varastohaku. -MachineCertificateIssuerFilter ottaa todistusobjektin, ja Windows käyttää sitä löytääkseen käyttökelpoisen asiakastodistuksen kohteesta LocalMachine\My. Todistus tarvitsee yksityisen avaimen ja ketjun, johon palvelin luottaa; kun jompikumpi puuttuu, todennus epäonnistuu ilman hyödyllisiä yksityiskohtia, joten tarkista varasto ensin:

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

Pidä salaisuudet poissa skriptitiedostosta. Komentorivillä välitetty tai .ps1-tiedostoon upotettu PSK päätyy lokitiedostoihin, tallennettuihin istuntoihin ja jaettuihin repoihin, ja -RememberCredential tallentaa käyttäjän tunnistetiedot myöhempää varten ja muuttaa kertaluonteisen testin pysyväksi oikeudeksi.

Vaihe 4: Päätä laajuus ennen ensimmäistä ajoa

Sama cmdlet kirjoittaa kahteen eri puhelinluetteloon. Ilman -AllUserConnection-parametria profiili kuuluu sinulle ja sijaitsee polussa %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Sen kanssa, korotetusta kehotteesta, profiili menee polkuun %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk ja näkyy jokaiselle tilille, myös kirjautumisnäytölle.

Laajuus ei ole kosmeettinen asia. Kaikkien käyttäjien profiili on se, jota palvelutili, ajastettu tehtävä tai ennen kirjautumista tapahtuva skenaario voi käyttää; käyttäjäkohtainen profiili on näkymätön kaikille kolmelle. Objektit luetaan myös eri tavoin: Get-VpnConnection luettelee nykyisen käyttäjän merkinnät, Get-VpnConnection -AllUserConnection koneenlaajuiset. Valitse yksi nyt ja käsittele myöhempää muutosta poistona ja uudelleenluontina editoinnin sijaan:

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

Vaihe 5: Testaa, mitä tunnelin todella on toimitettava

Yhdistetty kuvake todistaa, että tunneli nousi, eikä muuta. Yhdistä ensin komentoriviltä, jotta virheet saapuvat tekstinä eivätkä valintaikkunana, ja lue sitten takaisin se, mitä Windows tallensi:

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

Ne kaksi vikaa, joista käyttäjät raportoivat tilan yhä näyttäessä Connected, ovat DNS ja reititys. Ratkaise sisäinen nimi ja tarkista, mikä palvelin vastasi; profiili ilman -DnsSuffix-parametria voi tunneloida täydellisesti ja silti epäonnistua jokaisessa intranet-haussa. Katso sitten oletusreittiä: kun split tunneling on pois päältä, pienimmän metrijärjestyksen 0.0.0.0/0-reitin pitäisi osoittaa VPN-liitäntään, ja kun se on päällä, vain odottamiesi etuliitteiden. Jos molemmat näyttävät oikeilta ja liikenne silti kuolee, ongelma on profiilin tuolla puolen, käytännössä tai yhdyskäytävän suodattimessa.

Kun yhteys epäonnistuu kokonaan, koodi rajaa vaiheen, johon palata:

  • 691: yhdyskäytävä hylkäsi tunnistetiedot. Palaa vaiheeseen 3, ei tunneliin.
  • 809: IKEv2-kättely ei koskaan valmistunut. Tarkista UDP 500 ja 4500 sekä todistuksen luottamus.
  • 789: L2TP/IPsec-esijaettu avain puuttuu tai on väärä.
  • 868: palvelimen nimeä ei ratkaistu. Korjaa DNS ennen profiilin muokkaamista.

Pidä toimiva komento sen koodaamien asetusten vieressä, jotta seuraava henkilö voi rakentaa uudelleen sen sijaan, että purkaisi profiilin käyttöliittymästä. Jos joudut rakentamaan uudelleen, poista merkintä ja luo se uudelleen samoilla parametreilla; puoliksi määritetyn profiilin paikkaaminen jättää taakseen vanhentuneet reitit ja todennuksen tilan. Ja jos tiedosto ei koskaan ollut natiivi, palaa asiakkaaseen, joka omistaa sen. IKEv2-profiiliksi puettu .ovpn ei ole tuonti, se on tukipyyntö.

Aiheeseen liittyvät artikkelit