Tidak ada cmdlet Import-VpnProfile, dan yang paling mendekati, Add-VpnConnection, tidak pernah membaca file .ovpn atau .conf. Cmdlet ini menyusun profil Windows asli dari parameter yang Anda berikan, dan karena itulah titik pemeriksaan pertama di sini adalah format file, bukan baris perintah. Jika gateway berbicara SSTP, IKEv2, L2TP/IPsec, atau PPTP, Windows dapat memiliki profilnya dan sisa daftar berlaku. Jika Anda diberi file OpenVPN atau WireGuard, berhentilah di langkah pertama: klien itu punya pengimpornya sendiri.

Langkah 1: Pastikan profil mana yang benar-benar bisa dimiliki Windows

Jalankan Get-Command -Module VpnClient di mesin sebelum hal lain. Windows 10, Windows 11, dan Server 2016 atau lebih baru menyertakan modul ini; jika tidak ada, tidak ada skrip yang disalin akan membuat host ini menerima profil asli. Cmdlet yang penting adalah Add-VpnConnection, Get-VpnConnection, dan Remove-VpnConnection, dan daftar parameter di referensi Add-VpnConnection layak dibaca sekali secara utuh.

Asli berarti tumpukan VPN Windows yang mengakhiri tunnel. Itu mencakup IKEv2, sering dengan sertifikat mesin; SSTP, yaitu TLS dengan autentikasi pengguna atau sertifikat di dalamnya; dan L2TP/IPsec dengan kunci yang dibagikan sebelumnya. File .ovpn adalah skrip OpenVPN, bukan koneksi Windows: file itu membawa direktif seperti remote, cipher, atau tls-auth yang tidak dikenal tumpukan Windows sama sekali. File .conf WireGuard adalah kisah yang sama dengan PrivateKey dan AllowedIPs; mengubah yang satu menjadi yang lain bukan pilihan parameter melainkan implementasi tunnel yang berbeda.

Ada cabang ketiga. Jika administrator menyerahkan dokumen XML VPNv2 CSP atau profil Intune, itu jalur MDM, yang diterapkan oleh tumpukan penyediaan dan bukan oleh Add-VpnConnection. Jangan terjemahkan nama simpul itu menjadi parameter PowerShell; tanyakan mekanisme mana yang menerapkan XML-nya.

Langkah 2: Pasangkan jenis tunnel dengan metode autentikasi

-TunnelType dan -AuthenticationMethod adalah parameter terpisah, dan gateway hanya peduli pada kombinasinya. Satu benar dan yang lain salah dan Anda mendapat profil yang tidak tersambung ke apa pun, atau macet padahal tunnel sudah naik. Tetapkan keduanya secara eksplisit alih-alih memercayai nilai default yang dipilih untuk layanan lain.

  • IKEv2 dengan MachineCertificate: klien menyerahkan sertifikat komputer; tetapkan juga -EncryptionLevel Required.
  • SSTP dengan Eap: tunnel TLS dulu, lalu PEAP/MSCHAPv2 atau sertifikat di dalam EAP. Ini memerlukan XML pada langkah 3.
  • SSTP, L2TP, atau PPTP dengan MSChapv2, Chap, atau Pap: nama pengguna dan kata sandi biasa, tanpa blob EAP.
  • L2TP dengan MSChapv2 dan -Lt2pPsk: PSK menutupi bagian IPsec, pengguna menutupi PPP; keduanya harus cocok dengan server.

Splat menyimpan nilai di satu tempat:

$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 mengembalikan objek yang baru saja ditulis Windows, sehingga Anda bisa memeriksanya tanpa panggilan kedua. Jika nama sudah ada, cmdlet menolak berjalan; -Force menimpanya, dan itu refleks yang salah di laptop produksi karena diam-diam membuang apa pun yang dikonfigurasi seseorang secara manual.

Langkah 3: Serahkan materi kredensial dengan benar

Kata sandi, kunci yang dibagikan sebelumnya dan blob EAP adalah tempat skrip ini biasanya rusak. -EapConfigXmlStream menginginkan XmlDocument, bukan jalur, jadi baca dan konversi filenya dulu. Memberikan string menghasilkan galat konversi yang terlihat seperti masalah skema dan membuat orang menulis ulang XML yang sebenarnya tidak pernah salah.

$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 itu bukan sesuatu yang dikarang dari potongan blog. Itu menyebut jenis metode EAP dan autentikasi dalam, dan gateway membandingkan keduanya dengan kebijakannya. Metode dalam yang tidak cocok gagal setelah jabat tangan TLS selesai, yang terlihat persis seperti kata sandi salah padahal bukan. Ambil XML dari pihak yang menjalankan gateway, atau ekspor dari profil yang sudah berfungsi.

Untuk IKEv2 bagian sertifikat adalah pencarian di penyimpanan. -MachineCertificateIssuerFilter menerima objek sertifikat, dan Windows memakainya untuk menemukan sertifikat klien yang bisa dipakai di LocalMachine\My. Sertifikat perlu kunci privat dan rantai yang dipercaya server; bila salah satunya tidak ada, autentikasi gagal tanpa detail berguna, jadi periksa penyimpanan dulu:

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

Jauhkan rahasia dari file skrip. PSK yang diberikan di baris perintah atau dipanggang ke dalam .ps1 berakhir di transkrip, sesi tersimpan, dan repositori bersama, dan -RememberCredential menyimpan kredensial pengguna untuk nanti, mengubah uji sekali jalan menjadi izin yang menetap.

Langkah 4: Tentukan cakupan sebelum menjalankan pertama kali

Cmdlet yang sama menulis ke dua buku telepon berbeda. Tanpa -AllUserConnection profil itu milik Anda dan berada di %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Dengan opsi itu, dari prompt yang ditinggikan, profil masuk ke %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk dan terlihat oleh setiap akun, termasuk layar masuk.

Cakupan bukan kosmetik. Profil semua pengguna adalah yang bisa dipakai akun layanan, tugas terjadwal, atau skenario sebelum masuk; profil per pengguna tak terlihat bagi ketiganya. Objeknya juga dibaca berbeda: Get-VpnConnection mendaftar entri pengguna saat ini, Get-VpnConnection -AllUserConnection mendaftar entri seluruh mesin. Pilih satu sekarang, dan perlakukan perubahan nanti sebagai hapus dan buat ulang, bukan sunting:

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

Langkah 5: Uji apa yang sebenarnya harus disediakan tunnel

Ikon tersambung membuktikan tunnel naik dan tidak lebih. Sambungkan dulu dari baris perintah agar kegagalan datang sebagai teks, bukan dialog, lalu baca kembali apa yang dicatat Windows:

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

Dua kegagalan yang dilaporkan pengguna saat status masih bertuliskan Connected adalah DNS dan perutean. Selesaikan nama internal dan periksa server mana yang menjawab; profil tanpa -DnsSuffix bisa bertunnel sempurna dan tetap gagal di setiap pencarian intranet. Lalu lihat rute default: dengan split tunneling mati, rute 0.0.0.0/0 dengan metrik terendah seharusnya mengarah ke antarmuka VPN, dan dengan opsi itu hidup hanya prefiks yang Anda harapkan. Jika keduanya tampak benar dan lalu lintas tetap mati, masalahnya di luar profil, di kebijakan atau filter gateway.

Saat koneksi gagal total, kode mempersempit langkah yang perlu dikunjungi ulang:

  • 691: gateway menolak kredensial. Kembali ke langkah 3, bukan ke tunnel.
  • 809: jabat tangan IKEv2 tidak pernah selesai. Periksa UDP 500 dan 4500, serta kepercayaan sertifikat.
  • 789: kunci yang dibagikan sebelumnya untuk L2TP/IPsec hilang atau salah.
  • 868: nama server tidak terurai. Perbaiki DNS sebelum menyunting profil.

Simpan perintah yang berfungsi di samping pengaturan yang dikodekannya, agar orang berikutnya bisa membangun ulang alih-alih merekayasa balik profil dari UI. Jika memang harus membangun ulang, hapus entri dan buat lagi dengan parameter yang sama; menambal profil yang setengah terkonfigurasi meninggalkan rute lama dan status autentikasi. Dan jika file itu tidak pernah asli, kembalilah ke klien yang memilikinya. .ovpn yang didandani sebagai profil IKEv2 bukan impor, melainkan tiket dukungan.

Artikel terkait