Windows VPN প্রোফাইল হলো ফোনবুকের একটি এন্ট্রি, আর PowerShell সেই এন্ট্রি সম্পাদনার একটি উপায়। এই পার্থক্য থেকেই দুটি ব্যর্থতা আসে: একটি প্রি-শেয়ার্ড কী যা ইতিমধ্যেই নষ্ট হয়ে সার্ভারে পৌঁছায়, এবং একটি সার্ভার ঠিকানা যা হালনাগাদ দেখায় কিন্তু পরের টানেল যে ঠিকানায় ডায়াল করে সেটি নয়। প্রোফাইলকে আপনি যে কমান্ড চালিয়েছেন তা নয়, সংরক্ষিত অবস্থা হিসেবে দেখলে দুটোই সহজে ধরা পড়ে। এই আলোচনা সম্পাদনার ক্রম অনুসরণ করে: তৈরি, পরিবর্তন, পরিধি, ফিরে পড়া।

আক্ষরিক কী দিয়ে প্রোফাইল তৈরি করুন

Add-VpnConnection L2TP প্রি-শেয়ার্ড কী -L2tpPsk দিয়ে গ্রহণ করে। cmdlet পাওয়ার আগেই PowerShell স্ট্রিংটি প্রক্রিয়া করে, আর ডাবল কোটের ভেতরে ডলার চিহ্ন ভেরিয়েবল রেফারেন্স শুরু করে এবং backtick escape শুরু করে। এর যেকোনোটি থাকা কী খাটো হয়ে বা ভিন্ন অক্ষরে পৌঁছায়, আর প্রোফাইলটি ভুল গোপনীয়তা নিয়েই সফলভাবে তৈরি হয়।

তারপর ব্যর্থতা দেখা যায় IPsec প্রমাণীকরণে, যেখানে টানেল উঠতে অস্বীকার করে। তাই কোটের ভুলকে এতবার সার্ভার-পক্ষের সমস্যা বলে রিপোর্ট করা হয়: প্রোফাইল আছে, নাম ঠিক, আর গোপনীয়তা চুপচাপ ভুল।

How you write itWhat PowerShell doesResult
"p@ss$word!42"Expands $word as a variableStored key is truncated
Double-quoted with an escape characterConsumes the next character as an escapeOne character disappears
'p@ss$word!42'Keeps the literal charactersStored key matches the secret

একক কোটই সমাধান, আর সেগুলোকে পুরো মানটি ঘিরে থাকতে হবে। এন্ট্রি যদি ইতিমধ্যেই খারাপ কী নিয়ে থাকে, -Force সেটি প্রতিস্থাপন করে, অথবা প্রোফাইল মুছে আবার তৈরি করে নতুন সংযোগ দিয়ে পরীক্ষা করুন:

Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force

আসল গোপনীয়তা shell ইতিহাস ও ভাগ করা স্ক্রিপ্টের বাইরে রাখুন। চালানোর সময় অনুমোদিত ভাণ্ডার থেকে পড়ুন এবং আক্ষরিক মানের বদলে ভেরিয়েবলটি পাঠান, এতে কোটের সমস্যাটিও পুরোপুরি এড়ানো যায়।

ঠিকানা বদলান, তারপর আবার সংযোগ করুন

Set-VpnConnection স্পেস দিয়ে আলাদা করা প্যারামিটার নেয়, অ্যাসাইনমেন্ট সিনট্যাক্স নয়। -ServerAddress = "203.0.113.10" লিখলে বাড়তি টোকেন চলে যায়, আর cmdlet হয় ত্রুটি দেয় নয়তো আপনি যা চাননি তা সংরক্ষণ করে। সঠিক রূপ -Name "Office L2TP" -ServerAddress 203.0.113.10।

সঠিক সিনট্যাক্সেও পরিবর্তনটি ইতিমধ্যে ওঠা টানেলে পৌঁছায় না। প্রতিষ্ঠিত সংযোগ বিচ্ছিন্ন হওয়ার আগ পর্যন্ত যে ঠিকানায় ডায়াল করেছিল সেটিই ধরে রাখে, তাই একই সেশন পরীক্ষা করলে নতুন মান সম্পর্কে কিছুই প্রমাণ হয় না। সংযোগ বিচ্ছিন্ন করুন, সম্পাদনা করুন, আবার সংযোগ করুন, এবং সংযোগের বিবরণে সমকক্ষের ঠিকানা নিশ্চিত করুন।

কিছু বৈশিষ্ট্য জায়গায় পরিবর্তন করা যায় না। cmdlet অস্বীকার করলে বিদ্যমান প্যারামিটারগুলো টুকে রাখুন, প্রোফাইল মুছে সংশোধিত মান দিয়ে আবার তৈরি করুন, আর মূল টানেল ও প্রমাণীকরণের সেটিংস অক্ষত রাখুন। কেবল ফোন নম্বর বদলাতে হওয়া স্ক্রিপ্ট সবকিছু নতুন করে না বানিয়ে RAS API দিয়ে ফোনবুক এন্ট্রিটি সম্পাদনা করতে পারে। যে পথই নিন, কমান্ডের নীরবতা বিশ্বাস না করে পরে সংরক্ষিত মানগুলো নিশ্চিত করুন।

কোন ফোনবুক সম্পাদনা করেছেন জানুন

প্রতি-ব্যবহারকারী প্রোফাইল সেই ব্যবহারকারীর নেটওয়ার্ক সংযোগ ডিরেক্টরিতে থাকে, আর সব-ব্যবহারকারী প্রোফাইল প্রোগ্রাম ডেটা ট্রির নিচের মেশিন-ব্যাপী ডিরেক্টরিতে থাকে। এগুলো আলাদা পরিধির আলাদা এন্ট্রি, একটি সম্পাদনা করলে অন্যটি অক্ষত থাকে।

তাই পরিবর্তন হারিয়ে গেছে বলে মনে হতে পারে: স্ক্রিপ্ট একটি অ্যাকাউন্টে চলেছিল, পরীক্ষাটি অন্য একটিতে। প্রোফাইল মেশিনের হলে -AllUserConnection ব্যবহার করুন, আর ফিরে পড়ার সময় একই পরিধি যাচাই করুন।

পরীক্ষার আগে প্রোফাইল ফিরে পড়ুন

আপনি যা পাঠিয়েছেন তা নয়, Windows যা সংরক্ষণ করেছে তা জিজ্ঞাসা করুন:

Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod

সেই আউটপুট উদ্দেশ্যের সঙ্গে মিলিয়ে নিন, তারপর নতুন সংযোগ শুরু করুন। ডায়াল ব্যর্থ হলে প্রোফাইল আবার বদলানোর আগে Event Viewer এ RAS ক্লায়েন্ট লগ দেখুন, কারণ লগটি ব্যর্থ হওয়া ধাপটির নাম বলে।

সম্পাদনার সময় প্রমাণীকরণের নকশা অক্ষত রাখুন। যে কমান্ড ঠিকানা বদলায় কিন্তু সার্টিফিকেট বা EAP কনফিগারেশন ফেলে দেয়, সেটি সম্পাদনার সঙ্গে সম্পর্কহীন মনে হওয়া ব্যর্থতা তৈরি করে, আর কাজ করা প্রোফাইল আগে রপ্তানি করলে অনুমানের বদলে ফিরিয়ে আনার কিছু থাকে।

সম্পর্কিত নিবন্ধ