Rutina Import-VpnProfile neexistuje a tá, ktorá vyzerá najbližšie, Add-VpnConnection, nikdy nečíta súbor .ovpn ani .conf. Zostavuje natívny profil Windows z parametrov, ktoré jej odovzdáte, a preto je prvou kontrolou formát súboru, nie príkazový riadok. Ak brána hovorí SSTP, IKEv2, L2TP/IPsec alebo PPTP, Windows môže profil vlastniť a zvyšok zoznamu platí. Ak ste dostali súbor OpenVPN alebo WireGuard, zastavte sa pri prvom kroku: tieto importéry vlastnia samotní klienti.

Krok 1: Overte, že profil Windows môže skutočne vlastniť

Spustite Get-Command -Module VpnClient na stroji predovšetkým. Windows 10, Windows 11 a Server 2016 alebo novší tento modul obsahujú; ak chýba, žiadny skopírovaný skript neprinúti tento host prijať natívny profil. Dôležité sú rutiny Add-VpnConnection, Get-VpnConnection a Remove-VpnConnection a zoznam parametrov v referencii Add-VpnConnection stojí za jedno celé prečítanie.

Natívny znamená, že tunel ukončuje VPN zásobník Windows. Zahŕňa to IKEv2, často s počítačovým certifikátom; SSTP, čo je TLS s overením používateľa alebo certifikátu vo vnútri; a L2TP/IPsec s predzdieľaným kľúčom. Súbor .ovpn je skript OpenVPN, nie pripojenie Windows: nesie direktívy ako remote, cipher alebo tls-auth, o ktorých zásobník Windows nemá poňatie. Súbor .conf WireGuard je ten istý prípad s PrivateKey a AllowedIPs; previesť jeden na druhý nie je voľba parametra, ale iná implementácia tunela.

Existuje aj tretia vetva. Ak vám správca odovzdá dokument XML VPNv2 CSP alebo profil Intune, ide o cestu MDM, ktorú uplatňuje zásobník provisioningu, a nie Add-VpnConnection. Neprekladajte názvy týchto uzlov do parametrov PowerShell; namiesto toho sa spýtajte, ktorý mechanizmus to XML uplatňuje.

Krok 2: Spárujte typ tunela so spôsobom overenia

-TunnelType a -AuthenticationMethod sú samostatné parametre a bránu zaujíma iba ich kombinácia. Jeden nastavte správne a druhý zle a získate profil, ktorý sa nepripojí nikam, alebo sa zasekne s už postaveným tunelom. Nastavte oba výslovne, namiesto dôvery v predvolenú hodnotu zvolenú pre inú službu.

  • IKEv2 s MachineCertificate: klient predloží certifikát počítača; nastavte aj -EncryptionLevel Required.
  • SSTP s Eap: najprv tunel TLS, potom PEAP/MSCHAPv2 alebo certifikát vnútri EAP. To vyžaduje XML z kroku 3.
  • SSTP, L2TP alebo PPTP s MSChapv2, Chap alebo Pap: obyčajné používateľské meno a heslo, bez EAP bloku.
  • L2TP s MSChapv2 a -Lt2pPsk: PSK pokrýva polovicu IPsec, používateľ pokrýva PPP; obe musia zodpovedať serveru.

Splat udrží hodnoty na jednom mieste:

$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 vráti objekt, ktorý Windows práve zapísal, takže ho môžete preskúmať bez druhého volania. Ak názov už existuje, rutina odmietne bežať; -Force ho prepíše, čo je na produkčnom notebooku nesprávny reflex, pretože potichu zahodí všetko, čo niekto nastavil ručne.

Krok 3: Odovzdajte prihlasovací materiál správne

Heslá, predzdieľané kľúče a EAP bloky sú miesto, kde sa tieto skripty zvyčajne lámu. -EapConfigXmlStream chce XmlDocument, nie cestu, takže súbor najprv načítajte a pretypujte. Odovzdanie reťazca vyprodukuje chybu konverzie, ktorá vyzerá ako problém schémy a núti ľudí prepisovať XML, ktoré nikdy nebolo nesprávne.

$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

To XML nie je niečo, čo sa dá vymyslieť z útržku blogu. Menuje typ metódy EAP a vnútorné overenie a brána obe porovnáva so svojou politikou. Nezodpovedajúca vnútorná metóda zlyhá po dokončení TLS handshake, čo vyzerá presne ako zlé heslo, no nie je. Vezmite XML od toho, kto bránu prevádzkuje, alebo ho exportujte z profilu, ktorý už funguje.

Pri IKEv2 je certifikátová polovica vyhľadanie v úložisku. -MachineCertificateIssuerFilter prijíma objekt certifikátu a Windows ho použije na nájdenie použiteľného klientskeho certifikátu v LocalMachine\My. Certifikát potrebuje súkromný kľúč a reťazec, ktorému server dôveruje; keď chýba čokoľvek z toho, overenie zlyhá bez užitočných podrobností, preto najprv skontrolujte úložisko:

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

Udržujte tajomstvá mimo súboru skriptu. PSK odovzdaný na príkazovom riadku alebo zapečený do .ps1 skončí v prepisoch, uložených reláciách a zdieľaných repozitároch a -RememberCredential ukladá používateľské prihlasovacie údaje na neskôr, čím z jednorazového testu robí trvalé oprávnenie.

Krok 4: Rozhodnite o rozsahu pred prvým spustením

Tá istá rutina zapisuje do dvoch rôznych telefónnych kníh. Bez -AllUserConnection profil patrí vám a žije v %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. S ním, zo zvýšeného príkazového riadka, profil ide do %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk a je viditeľný pre každý účet vrátane prihlasovacej obrazovky.

Rozsah nie je kozmetika. Profil pre všetkých používateľov je to, čo môže použiť servisný účet, naplánovaná úloha alebo scenár pred prihlásením; profil pre jedného používateľa je pre všetky tri neviditeľný. Objekty sa čítajú tiež inak: Get-VpnConnection vypisuje záznamy aktuálneho používateľa, Get-VpnConnection -AllUserConnection tie celostrojové. Vyberte si jedno teraz a neskoršiu zmenu berte ako vymazanie a opätovné vytvorenie, nie ako úpravu:

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

Krok 5: Otestujte, čo tunel skutočne musí doručiť

Ikona pripojenia dokazuje, že tunel sa postavil, a nič viac. Najprv sa preto pripojte z príkazového riadka, aby zlyhania prišli ako text, nie ako dialóg, a potom si prečítajte, čo Windows zaznamenal:

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

Dve poruchy, ktoré používatelia hlásia, kým stav stále ukazuje Connected, sú DNS a smerovanie. Preložte interné meno a skontrolujte, ktorý server odpovedal; profil bez -DnsSuffix môže tunelovať dokonale a napriek tomu zlyhať pri každom intranetovom vyhľadaní. Potom pozrite sa na predvolenú trasu: s vypnutým rozdeleným tunelovaním má trasa 0.0.0.0/0 s najnižšou metrikou ukazovať do rozhrania VPN a so zapnutým iba prefixy, ktoré očakávate. Ak obe vyzerajú správne a prevádzka aj tak umiera, problém je za profilom, v politike alebo filtri brány.

Keď pripojenie úplne zlyhá, kód zúži krok, ku ktorému sa vrátiť:

  • 691: brána odmietla prihlasovacie údaje. Vráťte sa ku kroku 3, nie k tunelu.
  • 809: IKEv2 handshake sa nikdy nedokončil. Skontrolujte UDP 500 a 4500 a dôveru k certifikátu.
  • 789: predzdieľaný kľúč L2TP/IPsec chýba alebo je nesprávny.
  • 868: názov servera sa nepreložil. Opravte DNS skôr, než budete upravovať profil.

Udržujte fungujúci príkaz vedľa nastavení, ktoré kóduje, aby ďalší človek mohol profil zostaviť znova, a nie ho spätne analyzovať z rozhrania. Ak ho naozaj musíte zostaviť znova, vymažte záznam a vytvorte ho znovu z tých istých parametrov; záplata na polonastavenom profile zanecháva zastarané trasy a stav overenia. A ak súbor nikdy nebol natívny, vráťte sa ku klientovi, ktorý ho vlastní. Súbor .ovpn prestrojený za profil IKEv2 nie je import, je to tiket podpory.

Súvisiace články