Add-VpnConnection দিয়ে PowerShell-এ VPN প্রোফাইল ইমপোর্ট করুন
Add-VpnConnection কেবল নিজস্ব Windows প্রোফাইল তৈরি করে। টানেল ও প্রমাণীকরণের জোড়া গেটওয়ের সঙ্গে মেলান, পরিধি সচেতনভাবে ঠিক করুন, তারপর রুট ও DNS পরীক্ষা করুন।
Import-VpnProfile নামে কোনো cmdlet নেই, আর যেটি সবচেয়ে কাছাকাছি দেখায়, 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-এর ভেতরে সার্টিফিকেট। এর জন্য ধাপ 3-এর XML দরকার।
- 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গোপনীয়তা স্ক্রিপ্ট ফাইলের বাইরে রাখুন। কমান্ড লাইনে দেওয়া বা .ps1-এ গাঁথা PSK ট্রান্সক্রিপ্ট, সংরক্ষিত সেশন ও ভাগ করা রিপোজিটরিতে ঢুকে যায়, আর -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 ছাড়া প্রোফাইল নিখুঁতভাবে টানেল করতে পারে এবং তবুও প্রতিটি ইন্ট্রানেট অনুসন্ধানে ব্যর্থ হতে পারে। তারপর ডিফল্ট রুটটি দেখুন: split tunneling বন্ধ থাকলে সবচেয়ে কম মেট্রিকের 0.0.0.0/0 রুটটি VPN ইন্টারফেসের দিকে নির্দেশ করবে, আর চালু থাকলে কেবল আপনার প্রত্যাশিত প্রিফিক্সগুলো। দুটিই ঠিক দেখালেও ট্রাফিক মরে গেলে সমস্যা প্রোফাইলের বাইরে, নীতিতে বা গেটওয়ে ফিল্টারে।
সংযোগ পুরোপুরি ব্যর্থ হলে কোডটি কোন ধাপে ফিরতে হবে তা সংকুচিত করে:
- 691: গেটওয়ে প্রমাণপত্র প্রত্যাখ্যান করেছে। টানেলে নয়, ধাপ 3-এ ফিরুন।
- 809: IKEv2 হ্যান্ডশেক কখনো শেষ হয়নি। UDP 500 ও 4500, এবং সার্টিফিকেট বিশ্বাসযোগ্যতা দেখুন।
- 789: L2TP/IPsec-এর আগে-ভাগ-করা কী নেই বা ভুল।
- 868: সার্ভারের নাম রিজলভ হয়নি। প্রোফাইল সম্পাদনার আগে DNS ঠিক করুন।
কাজ করা কমান্ডটি যে সেটিংস তা এনকোড করে তার পাশেই রাখুন, যাতে পরের ব্যক্তি ইন্টারফেস থেকে প্রোফাইল রিভার্স-ইঞ্জিনিয়ার না করে নতুন করে গড়তে পারে। যদি নতুন করে গড়তেই হয়, এন্ট্রিটি মুছে একই প্যারামিটার থেকে আবার তৈরি করুন; অর্ধ-কনফিগার করা প্রোফাইলে প্যাচ দিলে পুরনো রুট ও প্রমাণীকরণের অবস্থা পড়ে থাকে। আর ফাইলটি যদি কখনোই নিজস্ব না হয়, তার মালিক ক্লায়েন্টের কাছে ফিরুন। IKEv2 প্রোফাইল সাজিয়ে দেওয়া একটি .ovpn ইমপোর্ট নয়, একটি সাপোর্ট টিকিট।