Ne postoji cmdlet Import-VpnProfile, a onaj koji izgleda najbliže, Add-VpnConnection, nikad ne čita .ovpn ili .conf datoteku. Sastavlja izvorni Windows profil od parametara koje predate, i zato je prva provjera ovdje format datoteke, a ne naredbeni redak. Ako pristupnik govori SSTP, IKEv2, L2TP/IPsec ili PPTP, Windows može posjedovati profil i ostatak popisa vrijedi. Ako ste dobili OpenVPN ili WireGuard datoteku, zaustavite se na prvom koraku: ti klijenti imaju vlastite uvoznike.

Korak 1: Potvrdite koji profil Windows doista može posjedovati

Pokrenite Get-Command -Module VpnClient na računalu prije svega ostalog. Windows 10, Windows 11 i Server 2016 ili noviji donose modul; ako nedostaje, nijedna kopirana skripta neće natjerati ovo računalo da prihvati izvorni profil. Cmdleti koji su važni jesu Add-VpnConnection, Get-VpnConnection i Remove-VpnConnection, a popis parametara u referenci Add-VpnConnection vrijedi pročitati jednom u cijelosti.

Izvorno znači da Windowsov VPN stog završava tunel. To pokriva IKEv2, često s certifikatom računala; SSTP, koji je TLS s autentikacijom korisnika ili certifikata unutra; i L2TP/IPsec s unaprijed dijeljenim ključem. .ovpn datoteka je OpenVPN skripta, ne Windows veza: nosi direktive poput remote, cipher ili tls-auth o kojima Windowsov stog nema pojma. WireGuardov .conf ista je priča s PrivateKey i AllowedIPs; pretvoriti jedno u drugo nije odabir parametra nego druga implementacija tunela.

Postoji i treća grana. Ako vam administrator preda VPNv2 CSP XML dokument ili Intune profil, to je MDM put, koji primjenjuje stog za dodjelu, a ne Add-VpnConnection. Ne prevodite te nazive čvorova u PowerShell parametre; pitajte umjesto toga koji mehanizam primjenjuje XML.

Korak 2: Uparite vrstu tunela s metodom autentikacije

-TunnelType i -AuthenticationMethod odvojeni su parametri, a pristupnik mari samo za kombinaciju. Jedno točno i drugo pogrešno daje profil koji se ne spaja ni na što, ili se zaglavi kad je tunel već gore. Postavite oba izričito umjesto da vjerujete zadanoj vrijednosti odabranoj za drugu uslugu.

  • IKEv2 s MachineCertificate: klijent predstavlja certifikat računala; postavite i -EncryptionLevel Required.
  • SSTP s Eap: prvo TLS tunel, zatim PEAP/MSCHAPv2 ili certifikat unutar EAP-a. To traži XML iz koraka 3.
  • SSTP, L2TP ili PPTP s MSChapv2, Chap ili Pap: obično korisničko ime i lozinka, bez EAP bloba.
  • L2TP s MSChapv2 i -Lt2pPsk: PSK pokriva IPsec polovicu, korisnik pokriva PPP; oboje se mora slagati s poslužiteljem.

Splat drži vrijednosti na jednom mjestu:

$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 vraća objekt koji je Windows upravo zapisao, pa ga možete pregledati bez drugog poziva. Ako naziv već postoji, cmdlet odbija pokrenuti se; -Force ga prebrisava, a to je pogrešan refleks na proizvodnom prijenosniku jer tiho odbacuje sve što je netko postavio ručno.

Korak 3: Predajte materijal vjerodajnica ispravno

Lozinke, unaprijed dijeljeni ključevi i EAP blobovi mjesto su na kojem se ove skripte obično lome. -EapConfigXmlStream želi XmlDocument, ne putanju, zato prvo pročitajte i pretvorite datoteku. Predaja niza znakova daje pogrešku pretvorbe koja izgleda kao problem sheme i šalje ljude da prepisuju XML koji nikad nije bio pogrešan.

$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

Taj XML nije nešto što se izmišlja iz odlomka bloga. Imenuje vrstu EAP metode i unutarnju autentikaciju, a pristupnik oboje uspoređuje sa svojom politikom. Neodgovarajuća unutarnja metoda pada nakon što TLS rukovanje završi, što izgleda točno kao loša lozinka i nije. Uzmite XML od onoga koji upravlja pristupnikom ili ga izvezite iz profila koji već radi.

Za IKEv2 certifikatna polovica je pretraga u spremištu. -MachineCertificateIssuerFilter prima objekt certifikata, a Windows ga koristi za pronalaženje upotrebljivog klijentskog certifikata u LocalMachine\My. Certifikat treba privatni ključ i lanac kojem poslužitelj vjeruje; kad bilo što od toga nedostaje, autentikacija pada bez korisnog detalja, zato prvo provjerite spremište:

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

Držite tajne izvan datoteke skripte. PSK predan na naredbenom retku ili ugrađen u .ps1 završi u transkriptima, spremljenim sesijama i dijeljenim repozitorijima, a -RememberCredential predmemorira korisničke vjerodajnice za kasnije, pretvarajući jednokratni test u trajno odobrenje.

Korak 4: Odlučite o opsegu prije prvog pokretanja

Isti cmdlet piše u dva različita imenika. Bez -AllUserConnection profil je vaš i živi pod %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. S njim, iz povišenog upita, profil ide u %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk i vidljiv je svakom računu, uključujući zaslon za prijavu.

Opseg nije kozmetički. Profil za sve korisnike ono je što račun usluge, zakazani zadatak ili scenarij prije prijave mogu koristiti; profil po korisniku nevidljiv je svima trima. Objekti se čitaju i drukčije: Get-VpnConnection navodi unose trenutačnog korisnika, Get-VpnConnection -AllUserConnection one za cijelo računalo. Odaberite jedan sada i tretirajte kasniju promjenu kao brisanje i ponovno stvaranje, a ne uređivanje:

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

Korak 5: Testirajte što tunel doista mora isporučiti

Ikona veze dokazuje da se tunel podigao i ništa više. Prvo se spojite iz naredbenog retka da kvarovi dođu kao tekst, a ne kao dijalog, zatim pročitajte što je Windows zabilježio:

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

Dva kvara koja korisnici prijavljuju dok status još piše Connected jesu DNS i usmjeravanje. Razriješite interno ime i provjerite koji je poslužitelj odgovorio; profil bez -DnsSuffix može savršeno tunelirati i ipak pasti na svakom pretraživanju intraneta. Zatim pogledajte zadanu rutu: kad je podijeljeni tunel isključen, ruta 0.0.0.0/0 najniže metrike trebala bi pokazivati u VPN sučelje, a kad je uključen, samo prefiksi koje očekujete. Ako oboje izgleda ispravno, a promet ipak umire, problem je dalje od profila, u politici ili filtru pristupnika.

Kad veza posve padne, kôd sužava korak na koji se vratiti:

  • 691: pristupnik je odbio vjerodajnice. Vratite se na korak 3, ne na tunel.
  • 809: IKEv2 rukovanje nikad nije dovršeno. Provjerite UDP 500 i 4500 te povjerenje u certifikat.
  • 789: unaprijed dijeljeni L2TP/IPsec ključ nedostaje ili je pogrešan.
  • 868: naziv poslužitelja nije razriješen. Popravite DNS prije uređivanja profila.

Držite radnu naredbu uz postavke koje kodira, da sljedeća osoba može ponovno izgraditi umjesto da obrnuto inženjeri profil iz sučelja. Ako doista morate ponovno izgraditi, obrišite unos i ponovno ga stvorite s istim parametrima; krpanje napola konfiguriranog profila ostavlja za sobom zastarjele rute i stanje autentikacije. A ako datoteka nikad nije bila izvorna, vratite se klijentu koji ju posjeduje. .ovpn prerušen u IKEv2 profil nije uvoz, to je kartica za podršku.

Povezani članci