Walang Import-VpnProfile na cmdlet, at ang pinakamalapit dito, ang Add-VpnConnection, ay hindi kailanman nagbabasa ng .ovpn o .conf na file. Binubuo nito ang native na profile ng Windows mula sa mga parameter na ipinapasa mo, kaya ang unang checkpoint dito ay ang format ng file at hindi ang command line. Kung ang gateway ay nagsasalita ng SSTP, IKEv2, L2TP/IPsec o PPTP, kaya ng Windows na angkinin ang profile at nalalapat ang natitirang listahan. Kung binigyan ka ng OpenVPN o WireGuard na file, huminto sa unang hakbang: pag-aari ng mga client na iyon ang kanilang mga importer.

Hakbang 1: Tiyakin ang profile na talagang maaaring angkinin ng Windows

Patakbuhin ang Get-Command -Module VpnClient sa makina bago ang anupaman. Ang Windows 10, Windows 11 at Server 2016 o mas bago ay may kasamang module; kung wala ito, walang kokopyahing script ang magpapahintulot sa host na ito na tumanggap ng native na profile. Ang mahahalagang cmdlet ay Add-VpnConnection, Get-VpnConnection at Remove-VpnConnection, at ang listahan ng parameter sa sanggunian ng Add-VpnConnection ay sulit na basahin nang buo nang isang beses.

Ang native ay nangangahulugang ang Windows VPN stack ang nagtatapos ng tunnel. Saklaw nito ang IKEv2, madalas may certificate ng makina; SSTP, na TLS na may pagpapatunay ng user o certificate sa loob; at L2TP/IPsec na may pre-shared key. Ang .ovpn na file ay script ng OpenVPN, hindi koneksyon ng Windows: may mga direktiba itong gaya ng remote, cipher o tls-auth na walang konsepto ang Windows stack. Ang .conf ng WireGuard ay parehong kuwento sa PrivateKey at AllowedIPs; ang pagpapalit ng isa sa isa pa ay hindi pagpili ng parameter kundi ibang implementasyon ng tunnel.

May ikatlong sanga. Kung ang administrator ay magbigay sa iyo ng VPNv2 CSP XML na dokumento o profile ng Intune, iyon ang MDM na landas, na inilalapat ng provisioning stack kaysa sa Add-VpnConnection. Huwag isalin ang mga pangalan ng node na iyon sa mga parameter ng PowerShell; sa halip itanong kung aling mekanismo ang naglalapat ng XML.

Hakbang 2: Itugma ang uri ng tunnel sa paraan ng pagpapatunay

-TunnelType at -AuthenticationMethod ay magkahiwalay na parameter, at ang gateway ay nagmamalasakit lamang sa kombinasyon. Kung tama ang isa at mali ang isa pa, makakakuha ka ng profile na hindi kumokonekta sa anuman, o natigil habang nakataas na ang tunnel. Itakda ang pareho nang tahasan kaysa magtiwala sa default na pinili para sa ibang serbisyo.

  • IKEv2 na may MachineCertificate: nagpapakita ang client ng certificate ng computer; itakda rin ang -EncryptionLevel Required.
  • SSTP na may Eap: TLS tunnel muna, pagkatapos ang PEAP/MSCHAPv2 o certificate sa loob ng EAP. Kailangan nito ang XML sa hakbang 3.
  • SSTP, L2TP o PPTP na may MSChapv2, Chap o Pap: simpleng username at password, walang EAP blob.
  • L2TP na may MSChapv2 at -Lt2pPsk: sinasaklaw ng PSK ang kalahati ng IPsec, sinasaklaw ng user ang PPP; dapat tumugma ang dalawa sa server.

Ang splat ay nag-iingat ng mga halaga sa isang lugar:

$p = @{
  Name                 = "Corp IKEv2"
  ServerAddress        = "vpn.example.com"
  TunnelType           = "Ikev2"
  AuthenticationMethod = "MachineCertificate"
  EncryptionLevel      = "Required"
  SplitTunneling       = $false
  DnsSuffix            = "corp.example.com"
}
Add-VpnConnection @p -PassThru

Ang -PassThru ay nagbabalik ng object na isinulat lang ng Windows, kaya masusuri mo ito nang walang ikalawang tawag. Kung umiiral na ang pangalan, tumatanggi ang cmdlet na tumakbo; ang -Force ay nagsusulat sa ibabaw nito, na maling reaksyon sa production laptop dahil tahimik nitong itinatapon ang anumang itinakda ng isang tao sa kamay.

Hakbang 3: Ipaabot nang tama ang materyal ng kredensyal

Mga password, pre-shared key at EAP blob ang madalas na pinagbabasagan ng mga script na ito. Ang -EapConfigXmlStream ay nangangailangan ng XmlDocument, hindi path, kaya basahin at i-cast muna ang file. Ang pagpapasa ng string ay gumagawa ng conversion error na parang problema sa schema at nag-uudyok sa mga tao na isulat muli ang XML na hindi naman mali.

$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

Ang XML na iyon ay hindi bagay na imbentuhin mula sa snippet ng blog. Pinangalanan nito ang uri ng paraan ng EAP at ang panloob na pagpapatunay, at inihahambing ng gateway ang dalawa laban sa patakaran nito. Ang hindi tugmang panloob na paraan ay nabibigo pagkatapos makumpleto ang TLS handshake, na mukhang maling password at hindi naman. Kunin ang XML sa nagpapatakbo ng gateway, o i-export ito mula sa profile na gumagana na.

Para sa IKEv2 ang kalahating certificate ay paghahanap sa store. Ang -MachineCertificateIssuerFilter ay tumatanggap ng certificate object, at ginagamit ito ng Windows upang makahanap ng magagamit na client certificate sa LocalMachine\My. Kailangan ng certificate ang pribadong key at chain na pinagkakatiwalaan ng server; kapag kulang ang alinman, nabibigo ang pagpapatunay nang walang kapaki-pakinabang na detalye, kaya suriin muna ang store:

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

Ilayo ang mga sikreto sa file ng script. Ang PSK na ipinasa sa command line o inihurno sa .ps1 ay nauuwi sa mga transcript, naka-save na session at ibinahaging repository, at ang -RememberCredential ay nag-cache ng kredensyal ng user para mamaya, na ginagawang pangmatagalang bigay ang isang beses na pagsubok.

Hakbang 4: Magpasya sa saklaw bago ang unang pagtakbo

Ang parehong cmdlet ay nagsusulat sa dalawang magkaibang phonebook. Kung walang -AllUserConnection, sa iyo ang profile at nasa ilalim ito ng %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Kapag kasama ito, mula sa elevated prompt, nakikita ng bawat account ang profile, kasama ang sign-in screen, at napupunta ito sa %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk.

Ang saklaw ay hindi kosmetiko. Ang profile ng lahat ng user ang kayang gamitin ng service account, naka-iskedyul na gawain o senaryo bago mag-sign in; ang profile ng isang user ay hindi nakikita ng tatlong iyon. Ibang paraan din ang pagbasa sa mga object: inililista ng Get-VpnConnection ang mga entry ng kasalukuyang user, inililista ng Get-VpnConnection -AllUserConnection ang mga para sa buong makina. Pumili ng isa ngayon, at ituring ang anumang pagbabago mamaya bilang burahin at likhain muli kaysa i-edit:

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

Hakbang 5: Subukan ang dapat talagang ihatid ng isang tunnel

Ang konektadong icon ay nagpapatunay na umangat ang tunnel at wala nang iba. Kumonekta muna mula sa command line upang dumating ang mga pagkabigo bilang teksto, hindi dialog, pagkatapos ay basahin ang naitala ng Windows:

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

Ang dalawang pagkabigong iniuulat ng mga user habang sinasabi pa rin ng status na Konektado ay DNS at routing. I-resolve ang panloob na pangalan at tingnan kung aling server ang sumagot; ang profile na walang -DnsSuffix ay maaaring mag-tunnel nang perpekto at nabibigo pa rin sa bawat intranet lookup. Pagkatapos ay tingnan ang default na ruta: kapag patay ang split tunneling, ang rutang 0.0.0.0/0 na may pinakamababang metric ang dapat tumuro sa VPN interface, at kapag buhay ito, ang mga prefix na inaasahan mo lang ang dapat. Kung pareho silang mukhang tama at namamatay pa rin ang trapiko, ang problema ay lampas sa profile, sa patakaran o sa filter ng gateway.

Kapag tuluyang nabigo ang koneksyon, ipinapakita ng code kung aling hakbang ang babalikan:

  • 691: tinanggihan ng gateway ang mga kredensyal. Bumalik sa hakbang 3, hindi sa tunnel.
  • 809: hindi kailanman nakumpleto ang IKEv2 handshake. Suriin ang UDP 500 at 4500, at ang tiwala sa certificate.
  • 789: nawawala o mali ang pre-shared key ng L2TP/IPsec.
  • 868: hindi na-resolve ang pangalan ng server. Ayusin ang DNS bago i-edit ang profile.

Ilagay ang gumaganang command sa tabi ng mga setting na ine-encode nito, upang ang susunod na tao ay makapagbuo muli kaysa i-reverse-engineer ang profile mula sa UI. Kung kailangan mong buuin muli, burahin ang entry at likhain muli gamit ang parehong mga parameter; ang pagtatagpi sa kalahating naka-configure na profile ay nag-iiwan ng lumang ruta at estado ng pagpapatunay. At kung hindi kailanman native ang file, bumalik sa client na may-ari nito. Ang .ovpn na binihisan bilang profile ng IKEv2 ay hindi import, ito ay support ticket.

Kaugnay na mga artikulo