কেউ একটি পোর্ট চেক চালায়, ওপেন শব্দটি দেখে, আর সার্ভারটিকে সমাধান হয়ে গেছে বলে ধরে নেয়। ওই ফলাফলের আসল অর্থ সংকীর্ণ: চেকারের অবস্থান থেকে, সেই মুহূর্তে, ওই ঠিকানা ও পোর্টে একটি TCP সংযোগ গৃহীত হয়েছিল। এটি Minecraft প্রোটোকল হ্যান্ডশেক, অ্যাকাউন্ট প্রমাণীকরণ, বা সার্ভার খেলোয়াড়কে কোনো বিশ্বে ঢুকতে দিয়েছিল কি না, সে সম্পর্কে কিছুই বলে না।

এগুলো চারটি আলাদা স্তর, আর এদের যেকোনোটিতে ব্যর্থতা খেলোয়াড়ের মুখ থেকে একই বাক্য বের করে: কাজ করেনি।

একটি প্রোব কেবল যা দেখতে পায় তা-ই পরীক্ষা করে

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

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

সময়ও গুরুত্বপূর্ণ। একটি প্রোব ফলাফল তার চালানোর মুহূর্তটি বর্ণনা করে, আর ডাইনামিক ঠিকানা বা বদলে যাওয়া ফরওয়ার্ডিং নিয়মযুক্ত একটি বাড়ির সংযোগ প্রকৃত উত্তরটি কয়েক মিনিট পরে সরিয়ে দিতে পারে। পাবলিক ঠিকানা, পোর্ট, ঠিকানা পরিবার এবং সময়—সবকিছু রায়ের সঙ্গে লিখে রাখুন, নইলে পর্যবেক্ষণটি পুনরুৎপাদনযোগ্য নয়। একই সংযোগে থাকা ফোন থেকে নয়, সত্যিই ভিন্ন একটি নেটওয়ার্ক থেকে চেকটি পুনরাবৃত্তি করুন।

সকেট ও খেলোয়াড়ের মধ্যে চারটি স্তর

একটি যোগ দেওয়া ক্লায়েন্ট আসলে যে ক্রমটি সম্পাদন করে তা কল্পনা করুন। প্রথমে এটি ঠিকানাটি রিজলভ করে, তারপর প্রকাশিত পোর্টে একটি TCP সংযোগ খোলে, তারপর দর-কষাকষি ও প্রমাণীকরণের জন্য গেমের নিজস্ব প্রোটোকল বলে, এবং শেষে সার্ভার সিদ্ধান্ত নেয় ওই পরিচয়কে বিশ্বে ঢোকার অনুমতি দেওয়া হবে কি না। প্রতিটি স্তরের নিজস্ব ব্যর্থতার স্বাক্ষর আছে, আর কেবল প্রথমটিই পোর্ট চেকারের কাছে দৃশ্যমান।

Java Edition-এর ডিফল্ট পোর্ট 25565, তবে অপারেটর ভিন্ন একটি বাহ্যিক পোর্ট প্রকাশ করে সেটি ভেতরে ফরওয়ার্ড করতে পারেন, তাই খেলোয়াড় যে সংখ্যাটি টাইপ করে সেটি সার্ভার যে সংখ্যা দেখে সেটি নাও হতে পারে। ভুল বাহ্যিক পোর্টে লক্ষ্য করা চেকার সার্ভার সম্পূর্ণ সুস্থ থাকা সত্ত্বেও বন্ধ বলে জানায়, আর এটিই এই পুরো ক্ষেত্রে সবচেয়ে সাধারণ ভুল অ্যালার্ম।

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

ভেতরের খেলোয়াড় কেন ভিন্ন পথ নেয়

একই LAN-এ থাকা খেলোয়াড়, অথবা ওই LAN-এ পৌঁছানো VPN-এ থাকা খেলোয়াড়, ভেতর থেকে পাবলিক ঠিকানায় পৌঁছাতে চেষ্টা করে। অনুরোধটি রাউটারের বাহ্যিক ঠিকানায় যায় এবং রাউটারকে সেটি আবার ভেতরে অনুবাদ করতে হয়—এই ব্যবস্থাটিকেই সাধারণত hairpinning বা NAT প্রতিফলন বলা হয়। এটি কাজ করতে হলে ফরওয়ার্ড অনুবাদ ও ফেরার পথ দুটোই মিলতে হবে, আর অনেক ভোক্তা রাউটার এটি একেবারেই বাস্তবায়ন করে না।

এই কারণেই বাইরের অতিথি যোগ দেয় আর সার্ভারের পাশে বসা ব্যক্তি পারে না। বাহ্যিক পথ সত্যিই ঠিক আছে; ভেতরের ঘুরপথটিই ব্যর্থ হয়, আর তা খেলোয়াড়ের স্ক্রিনে সার্ভারের সমস্যার মতো দেখায়। সার্ভারের নিজের লগই ঠিক করে কোনটি ঘটেছে, কারণ যে সংযোগ কখনো অনূদিত হয়নি তা কখনো সেখানে পৌঁছায় না।

দুটি সৎ সমাধান আর একটি খারাপ অভ্যাস আছে। ভালো বিকল্প হলো ভেতরের খেলোয়াড়দের প্রাইভেট ঠিকানা বা split-DNS নাম ব্যবহার করতে দেওয়া, যা ভেতরে প্রাইভেট ঠিকানায় রিজলভ হয়, অথবা ফিচারটি থাকলে ও ঠিকভাবে কাজ করলে রাউটারে প্রতিফলন চালু করা। খারাপ অভ্যাস হলো আরও পোর্ট খোলা বা হোস্ট ফায়ারওয়াল বন্ধ করা, যা রাউটার কখনো করেনি এমন অনুবাদে কোনো প্রভাব ফেলতে পারে না।

Netgate-এর NAT প্রতিফলন ডকুমেন্টেশন বাহ্যিক বনাম ভেতরের পার্থক্য এবং split-DNS বিকল্প আরও বিস্তারিত বর্ণনা করে। এটি কোনো নির্দিষ্ট VPN প্রোভাইডার বা রাউটার প্রতিটি loopback বৈচিত্র্য সমর্থন করে এমন প্রতিশ্রুতি নয়, বরং ব্যবস্থাটির বর্ণনা হিসেবে পড়ুন।

প্রতিটি দৃষ্টিকোণ থেকে প্রমাণ সংগ্রহ করুন

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

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

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