কেন আপনার iPhone অ্যাপ একটি IP দেখায় আর সার্ভার আরেকটি লগ করে
একটি ইন্টারফেসের ঠিকানা, একটি সকেটের এন্ডপয়েন্ট আর সার্ভার যে উৎস লগ করে—এরা ভিন্ন প্রশ্নের উত্তর দেয়। একটি VPN প্রেক্ষাপট যোগ করে; তাদের এক সংখ্যা বানায় না।
সহায়তা টিকিট আসে যে অ্যাপটি একটি ঠিকানা দেখায় আর সার্ভার অন্য একটি লগ করেছে, তারপর জিজ্ঞেস করে কোনটি মিথ্যা বলছে। কোনোটিই নয়; এরা দুটি ভিন্ন জিনিসের দুটি পর্যবেক্ষণ। একটি ইন্টারফেসে বাঁধা ঠিকানা, একটি সকেটে বাঁধা ঠিকানা, এবং একটি দূরবর্তী সেবা যে উৎস-ঠিকানা দেখে, তিনটি আলাদা প্রশ্নের উত্তর দেয়। একটি VPN ফোনে একটি নেটওয়ার্ক প্রেক্ষাপট যোগ করে এবং ওই তিনটিকে একটি ডিভাইস-ব্যাপী সংখ্যায় নামিয়ে আনে না। ঠিকানাগুলো পড়ার আগে টিকিটের ফিল্ডের নামগুলো পড়ুন।
টিকিট সাধারণত কী বর্ণনা করে
Wi-Fi-তে একটি ফোন ভাবুন, যেখানে একটি টানেল চালু আছে। Wi-Fi ইন্টারফেস একটি LAN ঠিকানা ধরে রাখে, টানেল ইন্টারফেস একটি নির্ধারিত ভেতরের ঠিকানা ধরে রাখে, এবং টানেল দিয়ে বের হওয়া একটি অনুরোধ পথে যেকোনো রূপান্তর টিকে থাকা উৎস থেকে একটি পাবলিক সেবায় পৌঁছায়। ভেতরের ঠিকানা ছাপানো একটি অ্যাপ এবং রূপান্তরিত উৎস লগ করা একটি সার্ভার—দুটোই নির্ভুলভাবে রিপোর্ট করে, এবং দুটি মান কখনোই মিলবে না।
তিনটি পর্যবেক্ষণ শুধু কী বর্ণনা করে তা নয়, কী প্রমাণ করতে পারে তা নিয়েও আলাদা।
| Observation | What it describes | What it cannot prove |
|---|---|---|
| An address on a local interface | One configured attachment: Wi-Fi, cellular or a tunnel | The source a remote site receives |
| A socket's local endpoint | The binding used by that one connection | The address after translation further along |
| The peer address at a service | What arrived at that observation point | Any other interface on the phone |
ওই টেবিলটি সেই কোডের পাশে রাখুন যা এই মানগুলো একটি টিকিটে ভরে, কারণ এখানকার বেশিরভাগ বিভ্রান্তি নেটওয়ার্কের ত্রুটি নয়, কলামের গোলমাল।
একটি সকেট কল কী উত্তর দিতে পারে আর কী পারে না
API স্তরে getsockname জানায় কোনও নির্দিষ্ট সকেটে বর্তমানে বাঁধা স্থানীয় এন্ডপয়েন্টটি কী। একটি সংযুক্ত সকেটের ক্ষেত্রে এটি সেই উৎস যা কার্নেল ওই সংযোগের জন্য বেছে নিয়েছে, এবং এটি যেকোনো ইন্টারফেস তালিকার চেয়ে ইতিমধ্যেই বেশি নির্দিষ্ট। এটি পাবলিক ঠিকানা খোঁজা নয়, এবং অসংযুক্ত সকেটে এটি ডাকলে আপনাকে প্রায় কিছুই বলে না। এটি যা-ই ফেরত দিক, পথে পরে তা আবার লেখা হতে পারে, তাই সেবাটি কী পেয়েছে সে বিষয়ে শুধু সেবার নিজের পর্যবেক্ষণই প্রামাণ্য।
Apple প্ল্যাটফর্মে ইন্টারফেসের দিকের একটি আলাদা পৃষ্ঠতল আছে: টানেল সেটিংস টানেল ইন্টারফেসে নির্ধারিত ঠিকানাগুলো তালিকাভুক্ত করে। সেগুলো পড়লে বোঝা যায় টানেল কীভাবে কনফিগার হয়েছিল, আর বোঝা যায় না কোনও নির্দিষ্ট অনুরোধ কোন পথ নিয়েছিল, কারণ রাউটিং ও প্রতি-অ্যাপ নিয়ম প্রতিটি সংযোগের জন্য তা ঠিক করে।
বিভক্ত টানেলিং ফাঁকটা দৃশ্যমান করে। একটি অনুরোধ টানেল দিয়ে বের হতে পারে, আর পরেরটি ভিন্ন গন্তব্য বা ঠিকানা-পরিবারের দিকে লক্ষ্য করা হলে না-ও পারে, তাই একই অ্যাপের সেকেন্ডের ব্যবধানে পাওয়া দুটি ফল সৎ এবং ভিন্ন হতে পারে।
প্রশ্নের সঙ্গে মেলে এমন পর্যবেক্ষণ বেছে নিন
সবকিছু যন্ত্রপাতি দিয়ে মাপার বদলে সচেতনভাবে বেছে নিন। ব্যাকএন্ড কী দেখে তার জন্য ব্যাকএন্ডে উৎস লগ করুন, আর সামনে রিভার্স প্রক্সি থাকলে ক্লায়েন্টের ঠিকানা পড়ুন আপনার ডিপ্লয়মেন্ট যে ফরওয়ার্ডিং হেডার সত্যিই সেট করে তা থেকে, ক্লায়েন্ট যা পাঠিয়েছে তা থেকে নয়।
টানেল কনফিগার হয়েছে কি না জানতে ইন্টারফেস পড়ুন। এই অ্যাপের ট্রাফিক তা ব্যবহার করেছে কি না জানতে ওই অ্যাপ থেকে আপনি নিয়ন্ত্রণ করেন এমন গন্তব্যে ট্রাফিক পাঠান এবং দুই প্রান্তে উৎস মিলিয়ে দেখুন।
প্রতি-অ্যাপ নিয়ম নিজের একটা বাক্য দাবি করে। ব্রাউজারের ফল ওই ব্রাউজার সম্পর্কে প্রমাণ, এবং একটি পরিচালিত প্রতি-অ্যাপ টানেল একই মুহূর্তে একই ফোনের দুটি অ্যাপকে ভিন্ন পথে বসাতে পারে। কভারেজ যাচাই মানে প্রশ্নবিদ্ধ অ্যাপ থেকে, প্রশ্নবিদ্ধ ঠিকানা-পরিবারে ট্রাফিক পাঠানো।
ইন্টারফেসের নাম কোনো ডিটেক্টর নয়
ইন্টারফেসের নাম VPN যাচাই হিসেবেও ব্যবহার করবেন না। নামগুলো কোনো পাবলিক চুক্তি নয়, এবং একটি ফোনে কয়েকটি সংযুক্তি থাকতে পারে অথচ তাদের একটিই আপনার অনুরোধ বহন করে।
ফিল্ডের নাম দিন যে পর্যবেক্ষণটি সেটি ধরে রাখে তার নামে। local_interface_address, socket_local_endpoint এবং service_observed_source আনাড়ি এবং দ্ব্যর্থহীন, আর মানটি এক সপ্তাহ পরে সহায়তা টিকিটে গেলে আপনি দ্ব্যর্থহীনতাই চান। device IP নামের একটিমাত্র কলাম তিনটিই জমা করবে এবং তারপর একটিই বলে বিশ্বাস করা হবে।
ঠিকানার কলামের বাইরে পরিচয় রাখুন
একটি শেয়ার করা VPN এক্সিট ব্যবহারকারীর পরিচয় নয়, আর একটি প্রাইভেট ঠিকানা অ্যাক্সেসের প্রমাণপত্র নয়। দুটোই একজন মানুষ নয়, একটি পথ বর্ণনা করে, আর যেকোনোটিকে প্রমাণীকরণ হিসেবে গণ্য করা একটি রাউটিং দুর্ঘটনাকে অনুমোদনের সিদ্ধান্তে বদলে দেয়।
কেউ জিজ্ঞেস করলে ফোনের কী ঠিকানা আছে, তখন কাজের উত্তর হলো কোন সংযোগ আর কোন পর্যবেক্ষক—এই প্রশ্নটি। getsockname-এর সংজ্ঞা মাঝের ক্ষেত্রটির জন্য উদ্ধৃত করার মতো, কারণ এটি সকেটের প্রশ্নটি নিষ্পত্তি করে অথচ বাকি দুটির নিষ্পত্তির ভান করে না।
তারপর লিখে রাখুন তিনটির মধ্যে আপনার পণ্যকে সত্যিই কোনটি দেখাতে হবে, এবং বাকি দুটো ইন্টারফেস থেকে মুছে ফেলুন।