Не постои cmdlet Import-VpnProfile, а најблискиот, Add-VpnConnection, никогаш не чита .ovpn или .conf датотека. Тој составува нативен Windows профил од параметрите што ги давате, и затоа првата проверка овде е форматот на датотеката, а не командната линија. Ако портата зборува SSTP, IKEv2, L2TP/IPsec или PPTP, Windows може да го поседува профилот и остатокот од списокот важи. Ако ви дале OpenVPN или WireGuard датотека, застанете на првиот чекор: тие клиенти имаат свои увозници.

Чекор 1: Потврдете кој профил Windows навистина може да го поседува

Пред сѐ друго, на машината извршете Get-Command -Module VpnClient. Windows 10, Windows 11 и Server 2016 или поново го содржат овој модул; ако го нема, ниту една копирана скрипта нема да го натера овој домаќин да прифати нативен профил. Важните cmdlet-и се Add-VpnConnection, Get-VpnConnection и Remove-VpnConnection, а референцата за Add-VpnConnection ја содржи листата со параметри што вреди еднаш целосно да се прочита.

Нативно значи дека Windows VPN стекот го завршува тунелот. Тоа опфаќа IKEv2, често со машински сертификат; SSTP, кој е TLS со автентикација на корисник или сертификат внатре; и L2TP/IPsec со однапред споделен клуч. .ovpn датотеката е OpenVPN скрипта, не Windows врска: таа носи директиви како remote, cipher или tls-auth за кои Windows стекот нема поим. WireGuard .conf е истата приказна со PrivateKey и AllowedIPs; претворањето едно во друго не е избор на параметар туку друга имплементација на тунел.

Има и трета гранка. Ако администратор ви даде VPNv2 CSP XML документ или Intune профил, тоа е MDM патеката, која ја применува стекот за подготвување, а не Add-VpnConnection. Не преведувајте ги тие имиња на јазли во PowerShell параметри; наместо тоа прашајте кој механизам го применува XML-от.

Чекор 2: Спарете го типот на тунел со методот на автентикација

-TunnelType и -AuthenticationMethod се одделни параметри, а портата се интересира само за комбинацијата. Едниот точен, другиот погрешен и добивате профил што не се поврзува никаде, или заглавува додека тунелот е веќе кренат. Поставете ги двата експлицитно, наместо да верувате на стандардната вредност избрана за друга услуга.

  • IKEv2 со MachineCertificate: клиентот прикажува компјутерски сертификат; поставете и -EncryptionLevel Required.
  • SSTP со Eap: прво TLS тунел, потоа PEAP/MSCHAPv2 или сертификат во EAP. Ова бара XML од чекорот 3.
  • SSTP, L2TP или PPTP со MSChapv2, Chap или Pap: едноставно корисничко име и лозинка, без EAP блок.
  • L2TP со MSChapv2 и -Lt2pPsk: PSK-то ја покрива IPsec половината, корисникот PPP; двете мора да се совпаѓаат со серверот.

Splat ги држи вредностите на едно место:

$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 го враќа објектот што Windows штотуку го запишал, па можете да го прегледате без втор повик. Ако името веќе постои, cmdlet-от одбива да се изврши; -Force го препишува, а тоа е погрешен рефлекс на продукциски преносен компјутер, бидејќи тивко го фрла она што некој го поставил рачно.

Чекор 3: Предајте го материјалот за акредитиви правилно

Лозинките, однапред споделените клучеви и EAP блоковите се местото каде овие скрипти обично се кршат. -EapConfigXmlStream сака XmlDocument, не патека, затоа прво прочитајте и претворете ја датотеката. Предавањето низа дава грешка при претворање што изгледа како проблем со шема и ги испраќа луѓето да го препишат XML-от што никогаш не бил погрешен.

$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

Тој XML не се измислува од блог отсечок. Го именува типот на EAP методот и внатрешната автентикација, а портата ги споредува двете со својата политика. Несовпаѓачки внатрешен метод не успева откако TLS ракувањето ќе заврши, што изгледа точно како погрешна лозинка и не е. Земете го XML-от од тој што ја управува портата или извезете го од профил што веќе работи.

За IKEv2 сертификатната половина е пребарување во складиштето. -MachineCertificateIssuerFilter прима објект на сертификат, а Windows го користи за да најде употреблив клиентски сертификат во LocalMachine\My. Сертификатот бара приватен клуч и синџир на кој серверот му верува; кога еден од нив недостасува, автентикацијата не успева без корисен детал, затоа прво проверете го складиштето:

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

Држете ги тајните надвор од скриптата. PSK предаден на командната линија или вграден во .ps1 завршува во транскрипти, зачувани сесии и споделени складишта, а -RememberCredential ги кешира корисничките акредитиви за подоцна, претворајќи еден тест во трајна дозвола.

Чекор 4: Одлучете го опсегот пред првото извршување

Истиот cmdlet пишува во два различни именика. Без -AllUserConnection профилот е ваш и живее под %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Со него, од покачена командна линија, профилот оди во %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk и е видлив за секоја сметка, вклучително екранот за најава.

Опсегот не е козметички. Профилот за сите корисници е она што сметка за услуга, закажана задача или сценарио пред најава може да го користи; профилот по корисник е невидлив за сите три. Објектите се читаат и поинаку: Get-VpnConnection ги наведува записите на тековниот корисник, Get-VpnConnection -AllUserConnection тие за целата машина. Изберете еден сега и третирајте ја подоцнежната промена како бришење и повторно создавање, а не како уредување:

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

Чекор 5: Тестирајте што тунелот навистина треба да достави

Поврзаната икона докажува дека тунелот се кренал и ништо повеќе. Прво поврзете се од командната линија за да доаѓаат грешките како текст, а не како дијалог, потоа прочитајте што запишал Windows:

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

Двете грешки за кои корисниците известуваат додека статусот сѐ уште вели Connected се DNS и рутирањето. Решете го внатрешното име и проверете кој сервер одговори; профил без -DnsSuffix може совршено да тунелира и сепак да падне на секое пребарување во интранет. Потоа погледнете стандардната рута: со исклучено разделено тунелирање, рутата 0.0.0.0/0 со најниска метрика треба да покажува во VPN интерфејсот, а со вклучено само префиксите што ги очекувате. Ако двете изгледаат точно, а сообраќајот сѐ уште умира, проблемот е подалеку од профилот, во политиката или филтерот на портата.

Кога врската целосно не успева, кодот го стеснува чекорот за враќање:

  • 691: портата ги одби акредитивите. Вратете се на чекор 3, не на тунелот.
  • 809: IKEv2 ракувањето никогаш не заврши. Проверете UDP 500 и 4500 и довербата во сертификатот.
  • 789: однапред споделениот L2TP/IPsec клуч недостасува или е погрешен.
  • 868: името на серверот не се реши. Поправете го DNS пред да го уредувате профилот.

Држете ја работната команда до поставките што ги кодира, за следниот човек да може да го изгради повторно наместо да го врати профилот од интерфејсот. Ако навистина мора повторно да го изградите, избришете го записот и создајте го повторно со истите параметри; крпењето полуконфигуриран профил остава застарени рути и состојба на автентикација. И ако датотеката никогаш не била нативна, вратете се кај клиентот што ја поседува. .ovpn преправен како IKEv2 профил не е увоз, туку билет за поддршка.

Поврзани статии