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

উইজার্ড ছাড়াই প্রোফাইল তৈরি করুন

Add-VpnConnection একটি নেটিভ ফোন-বুক এন্ট্রি লেখে, তাই ফলাফল সেই একই অবজেক্ট যা সেটিংস অ্যাপ পরে সম্পাদনা করে। মেশিনের প্রতিটি অ্যাকাউন্টের জন্য সংযোগটি থাকা উচিত হলে এটি উন্নীত সেশন থেকে চালান, আর ব্যক্তিগত থাকা উচিত হলে ব্যবহারকারীর প্রসঙ্গ থেকে:

Add-VpnConnection -Name "Contoso L2TP" `
  -ServerAddress 203.0.113.10 `
  -TunnelType L2tp `
  -EncryptionLevel Required `
  -AuthenticationMethod MSChapv2 `
  -RememberCredential -Force

গেটওয়ে যা দেয় তার সঙ্গে -AuthenticationMethod মিলিয়ে নিন। MSChapv2, EAP এবং PAP পরস্পর বিনিময়যোগ্য নয়, এবং যে প্রোফাইল এমন পদ্ধতি দাবি করে যা সার্ভার গ্রহণ করবে না, তা কোনো ব্যবহারকারী রেকর্ড দেখার আগেই ব্যর্থ হয়। আসল যেকোনো কিছুর জন্য -EncryptionLevel Required রাখুন; Optional Windows-কে অনুমতি দেয় যে পিয়ার একটি দিলে অসংকেতিত টানেল গ্রহণ করবে, যা একটি ল্যাব-শর্টকাট, পাঠানোর মতো সেটিং নয়।

আপনি যদি -L2tpPsk দেন, সেই পূর্ব-শেয়ার করা কী ডিস্কের প্রোফাইলে লেখা হয়, যেখান থেকে ওই মেশিনে প্রোফাইল পড়তে পারে এমন যে কেউ তা উদ্ধার করতে পারে। গেটওয়ে সমর্থন করলে পিয়ার প্রমাণীকরণের জন্য সার্টিফিকেট ব্যবহার করুন, আর PSK অনিবার্য হলে তা প্রতিটি প্রভিশনিং রানে পেস্ট না করে রিপোজিটরি ও শেল ইতিহাসের বাইরে রাখুন।

ডিফল্ট মেনে নেওয়ার বদলে প্রস্তাব পিন করুন

Windows নিজেই IPsec ট্রান্সফর্মগুলো ভরে দেয়, তাই দেখতে অভিন্ন দুটি সংযোগ একই গেটওয়ের বিপরীতে ভিন্নভাবে ব্যর্থ হতে পারে। Set-VpnConnectionIPsecConfiguration সেগুলো পিন করার সমর্থিত উপায়:

Set-VpnConnectionIPsecConfiguration -ConnectionName "Contoso L2TP" `
  -AuthenticationTransformConstants SHA256128 `
  -CipherTransformConstants AES128 `
  -EncryptionMethod AES128 `
  -IntegrityCheckMethod SHA256 `
  -DHGroup Group14 `
  -PfsGroup None `
  -PassThru -Force

এই সেটটি একটি সাধারণ L2TP/IPsec বিন্যাস, সর্বজনীন উত্তর নয়। প্রতিটি প্যারামিটার নির্দিষ্ট মানের তালিকা নেয়, এবং প্ল্যাটফর্ম যে সমন্বয় ম্যাপ করতে পারে না তা নীরবে দুর্বল প্রোফাইল নয়, বরং cmdlet ত্রুটি হিসেবে ফেরত আসে। এমন ত্রুটিকে মান সম্পর্কে বক্তব্য হিসেবে ধরুন, আপনার অনুমতি সম্পর্কে নয়।

গেটওয়ের ডকুমেন্টেশন বা তার চলমান ফেজ-1 ও ফেজ-2 সেটিংস থেকে প্রস্তাবটি অনুলিপি করুন, এবং একবারে একটি ক্ষেত্র কেবল তখনই বদলান যখন গেটওয়ে যে ট্রান্সফর্ম প্রত্যাখ্যান করে তা লগ করছে। পাঁচটি ক্ষেত্র ঘুরে দেখা এমন সংযোগ দেয় যা দৈবাৎ কাজ করে এবং এমন রেকর্ড দেয় যা পরের মানুষকে কিছুই বোঝায় না।

ব্যর্থতা ধাপ অনুযায়ী পড়ুন, ত্রুটির লেখা অনুযায়ী নয়

789 কোডের এমন একটি পরিবারের অন্তর্গত যা ক্লায়েন্ট ডায়ালগে সব একই রকম দেখায়। প্রোফাইলে আবার হাত দেওয়ার আগে কোডটিকে তার ধাপের বিপরীতে বসান:

What you seeStage that failedCheck first
Nothing happens, then a timeoutNo IKE response at allServer address, UDP 500 and 4500 reachability, NAT traversal on the gateway
Error 789IKE security exchangeProposal, pre-shared key, certificate trust and client clock
Error 691 or a repeated password promptUser authenticationAccount state, domain, RADIUS or NPS policy
Tunnel up, some hosts unreachableRouting or DNS after PPPSplit-tunnel routes, pushed DNS, remote subnet mask

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

সার্টিফিকেটের পথে, যাচাই শিথিল করার কথা ভাবার আগে ক্লায়েন্টের ঘড়ি, ট্রাস্ট চেইন এবং গেটওয়ে যে পরিচয় আশা করে তা পরীক্ষা করুন। যাচাই বন্ধ করা একটি দৃশ্যমান 789-কে ভুল পিয়ারকে বিশ্বাস করে সংযোগ করা টানেলে পরিণত করে, আর ক্লায়েন্টে কিছুই আপনাকে বলবে না যে তা ঘটেছে। Microsoft-এর দূরবর্তী অ্যাক্সেস ত্রুটির তালিকা নিজেরাই কোডগুলোর জন্য তথ্যসূত্র, এবং এটি নিরাপত্তা-স্তরের ব্যর্থতাগুলোকে লগইন ব্যর্থতা থেকে আলাদা করে।

ঠিক হয়েছে বলার আগে দুই প্রান্ত থেকেই যাচাই করুন

প্রোফাইলটি ফিরে পড়ুন, তবে আউটপুটে প্রস্তাব আশা করবেন না। Get-VpnConnection নাম, সার্ভার ঠিকানা, টানেলের ধরন, এনক্রিপশন স্তর এবং প্রমাণীকরণ পদ্ধতি জানায়, আর ট্রান্সফর্ম সম্পর্কে কিছুই জানে না, তাই ফিরে পড়া নিশ্চিত করে যে এন্ট্রিটি আছে এবং সঠিক হোস্টের দিকে ইশারা করে:

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

কমান্ড লাইন থেকে ডায়াল করুন যাতে ডায়ালগের বদলে একটি সংখ্যা পান: rasdial "Contoso L2TP" ইন্টারফেস যে একই ব্যর্থতার কোড দিত তা দেয়, আর rasdial "Contoso L2TP" /disconnect চেষ্টাগুলোর মধ্যে তা মুছে দেয়। তারপর ওই একই চেষ্টার জন্য গেটওয়ের দিকটি পড়ুন। strongSwan-এর ipsec statusall বা রাউটারের IKE লগ বলে কোন প্রস্তাব এসেছে এবং কোনটি প্রত্যাখ্যাত হয়েছে, আর তা cmdlet-এর মানের সঙ্গে তুলনা করাই একমাত্র ধাপ যা সত্যিই প্রমাণ করে দুই প্রান্ত একমত হয়েছে।

সফল সংযোগ শেষ রেখা নয়। ব্যবহারকারীর কাছে গুরুত্বপূর্ণ অ্যাপটি খুলুন, কারণ রুট, পুশ করা DNS এবং স্প্লিট-টানেল সেটিংস টানেল ওঠার পরে ব্যর্থ হয় এবং কোনো ত্রুটি ডায়ালগই দেয় না।

এটি স্বয়ংক্রিয় করুন, এবং পরিষ্কারভাবে ফিরিয়ে নিন

অসহায়ক সেটআপই এটি স্ক্রিপ্ট করার কারণ, আর ডায়াল ধাপটিই যেখানে ক্রেডেনশিয়াল ফাঁস হয়। rasdial সেগুলো নিজের কমান্ড লাইনে নেয়, যেখানে অন্য স্থানীয় ব্যবহারকারী এবং বেশিরভাগ লগ সংগ্রাহক সেগুলো পড়তে পারে:

subprocess.run(["rasdial", "Contoso L2TP"], check=True)

চাকরি চালানো অ্যাকাউন্টে সীমিত ক্রেডেনশিয়াল পছন্দ করুন, বা প্রোফাইলকে -RememberCredential দিয়ে তা সংরক্ষণ করতে দিন, নির্ধারিত কাজে পাসওয়ার্ড আর্গুমেন্ট হিসেবে দেওয়ার বদলে। প্রভিশনিং কমান্ডগুলো নিজেরাই -Force দিয়ে পুনরাবৃত্তি করা নিরাপদ, কিন্তু তারা আনন্দের সঙ্গে পুরোনো প্রস্তাবের ওপর চাপিয়ে দেবে, তাই স্ক্রিপ্ট চলতি মান বহন করলেই কেবল পুনরায় চালানো কাজে লাগে।

প্রোফাইল রিবুট পেরিয়ে টেকে এবং যে গেটওয়ে কনফিগারেশনের জন্য তৈরি হয়েছিল তার চেয়ে বেশি দিন বাঁচে। গেটওয়ের প্রস্তাব সরে গেলে, দ্বিতীয় মানের সেট স্তরে চাপানোর বদলে এন্ট্রিটি সরিয়ে আবার তৈরি করুন: Remove-VpnConnection -Name "Contoso L2TP" -Force, তারপর নতুন সেট দিয়ে দুটি cmdlet পুনরাবৃত্তি করুন।

স্ক্রিপ্টের পাশে থাকা চারটি পরীক্ষা দিয়ে লুপটি বন্ধ করুন: Get-VpnConnection প্রত্যাশিত টানেলের ধরন ও এনক্রিপশন স্তর দেখায়; গেটওয়ে আপনার ক্লায়েন্ট ঠিকানার জন্য সম্পূর্ণ ফেজ 1 ও ফেজ 2 লগ করে; rasdial সফলতা দেয় এবং অ্যাপ খোলে; এবং স্ক্রিপ্টে লিপিবদ্ধ প্রস্তাব চলতি গেটওয়ে সেটিংয়ের সঙ্গে মেলে। পরের 789 এলে সেই তুলনা বিকেলের বদলে কয়েক মিনিট নেয়।

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