VPN টানেল কী, আর সুরক্ষা কোথায় থামে
একটি টানেল নির্বাচিত প্যাকেটগুলোকে আপনার আগে থেকেই থাকা লিংকের ওপর দ্বিতীয় খামে মুড়ে দেয়। একটি অনুরোধ অনুসরণ করে দেখুন কোন ঠিকানাটি ওয়েবসাইট সত্যিই লিপিবদ্ধ করে।
ক্লায়েন্ট বলছে সংযুক্ত, তালা বন্ধ, তবুও একটি সাইট আপনার ফ্ল্যাটের ঠিকানা লিপিবদ্ধ করছে। কোনো কিছু ব্যর্থ হয়নি। একটি টানেল আপনার Wi-Fi বা মোবাইল লিংক প্রতিস্থাপন করে না; এটি নির্দিষ্ট কিছু প্যাকেটের চারপাশে দ্বিতীয় খাম বসায় এবং সেই খামটি আপনার আগে থেকেই থাকা নেটওয়ার্কের ওপর পাঠায়। কৌশলটি বোঝা মূলত একটি অনুরোধ অনুসরণ করা এবং খামটি কোথায় খোলা হয় তা লক্ষ্য করা, কারণ প্রায় প্রতিটি বিভ্রান্তিকর উপসর্গ, বাড়ির ঠিকানা ফাঁস থেকে শুরু করে বড় ডাউনলোড আটকে যাওয়া পর্যন্ত, ওই সীমা থেকেই আসে।
দুটি খাম, একটি ভৌত লিংক
আপনার ল্যাপটপ রাউটারের সঙ্গে তার স্বাভাবিক সংযোগ রাখে, আর রাউটার প্রদানকারীর সঙ্গে তার স্বাভাবিক সংযোগ রাখে। টানেল চালু হলে ওই পথে কিছুই বদলায় না। যা বদলায় তা হলো নির্বাচিত প্যাকেটগুলো একটি ভার্চুয়াল ইন্টারফেসে দেওয়া হয়, VPN পিয়ারের ঠিকানায় নতুন প্যাকেটের ভেতরে মুড়ে দেওয়া হয়, এবং ভৌত লিংকের ওপর সাধারণ ট্রাফিক হিসেবে পাঠানো হয়।
গ্রহণকারী প্রান্ত হলো একটি ডিভাইস যা খামটি খোলে এবং মূল প্যাকেটটি তার গন্তব্যের দিকে পাঠায়। দুই প্রান্তের মধ্যে একজন পর্যবেক্ষক বাইরের হেডার দেখে, ভেতরের সম্পর্কে কিছুই দেখে না, যদি না প্রোটোকল তা এনক্রিপ্ট করে, যা অধিকাংশ ভোক্তা প্রোটোকল করে এবং সাধারণ কৌশলটি করতে বাধ্য করে না।
এই কারণেই ভার্চুয়াল ইন্টারফেস একই সঙ্গে বাস্তব এবং বিভ্রান্তিকর। এটি একটি কার্নেল অবজেক্ট হিসেবে ঠিকানা ও সর্বোচ্চ ট্রান্সমিশন ইউনিট নিয়ে বিদ্যমান, এবং অপারেটিং সিস্টেম অন্য যেকোনো ইন্টারফেসের মতোই এতে ট্রাফিক পাঠায়। এটি কোনো কেবল নয়, এবং এর অস্তিত্ব কেবল প্রমাণ করে যে একটি উপাদান ইনস্টল করা আছে। আপনার ব্রাউজার এটি ব্যবহার করে কি না তা রুট নির্ধারণ করে, ইন্টারফেস চালু আছে কি না তা নয়।
একটি অনুরোধের যাত্রা দেখুন
একটি গন্তব্য বাছুন এবং কার্নেলকে জিজ্ঞাসা করুন এটি কোন ইন্টারফেস ব্যবহার করবে। এই একটি কমান্ডই টানেল কিছু করছে কি না নিয়ে বেশিরভাগ বিতর্কের মীমাংসা করে:
ip route get 203.0.113.7
ip -brief addr show
ip -4 addr show dev wg0
যদি রুট আউটপুটে টানেল ইন্টারফেসের নাম থাকে, প্যাকেটটি মুড়ে দেওয়া হবে। যদি ভৌত ইন্টারফেসের নাম থাকে, তা হবে না, এবং ক্লায়েন্ট পুনরায় চালু করা যতবারই হোক তা বদলাবে না। দ্বিতীয় কমান্ডটি দুটি ইন্টারফেস পাশাপাশি দেখায়, আর এভাবেই আপনি ঠিকানাহীন বা ভুল পরিবারের ঠিকানাসহ ওঠা একটি টানেল ধরতে পারেন।
তারপর খামের ভেতর থেকে প্রথম হপের দিকে তাকান, এবং বাইরের প্রথম হপের সঙ্গে তুলনা করুন:
traceroute -n -m 3 203.0.113.7
sudo tcpdump -ni wg0 -c 5
টানেলের ভেতরে প্রথম হপ হলো পিয়ারের অভ্যন্তরীণ ঠিকানা, আপনার রাউটার নয়। টানেল ইন্টারফেসে ক্যাপচার অভ্যন্তরীণ প্যাকেটগুলো দেখায়, এটাই সেই ট্রাফিক যা অ্যাপ্লিকেশন মনে করে সে পাঠাচ্ছে। একই সময়ে ভৌত ইন্টারফেসে ক্যাপচার বাইরের প্যাকেটগুলো দেখায়, এবং দুটো মিলে টানেল আসলে কী করে তার সবচেয়ে স্পষ্ট প্রদর্শন।
তিনটি ঠিকানা, এবং ওয়েবসাইট কেবল একটি দেখে
মানুষ এগুলো নিয়ে বারবার গুলিয়ে ফেলে, এবং সেই গোলমাল মিথ্যা লিক রিপোর্ট তৈরি করে। এগুলো ভিন্ন হেডারের ভিন্ন ক্ষেত্র, যাদের আয়ুষ্কালও ভিন্ন।
| Address | Where it appears | Who can see it |
|---|---|---|
| Endpoint address | Outer header, the peer you connect to | Your access network and the path to it |
| Inner tunnel address | Inside the envelope, on the virtual interface | The peer, and anything the peer routes to |
| Exit address | Source of the packet that reaches the website | The website and its upstream |
ভার্চুয়াল অ্যাডাপ্টারের পাশের সংখ্যাটি দ্বিতীয় সারি। এটি ওয়েবসাইট যে ঠিকানা লিপিবদ্ধ করে তা নয়, এবং এটিকে আপনার পাবলিক IP হিসেবে উদ্ধৃত করা কেবল ভুল। ওয়েবসাইট যে ঠিকানা দেখে তা নির্ধারণ করে এক্সিট, এবং একটি প্রাইভেট নেটওয়ার্কের টানেলে কোনো পাবলিক এক্সিট আদৌ নাও থাকতে পারে, কারণ গন্তব্যটি ইন্টারনেটে নয়, প্রতিষ্ঠানের ভেতরে থাকে।
সাইট-থেকে-সাইট টানেল ভিন্ন প্রান্তবিন্দু নিয়ে একই কৌশল। দুটি রাউটার নেটওয়ার্কের মধ্যে ট্রাফিক মুড়ে দেয়, এবং কোনো একক ডিভাইসে ক্লায়েন্ট ইনস্টল থাকে না। খামটি নীতিগতভাবে অভিন্ন, প্রশাসনিক সীমা নয়।
খাম কোথায় খোলে, আর তা থেকে কী টিকে থাকে
টানেল তার পিয়ারে শেষ হয়। যদি অ্যাপ্লিকেশনের নিজস্ব এনক্রিপশন আরও দূরে বিস্তৃত হয়, তা ওই সীমা পেরিয়ে টিকে থাকে, যা HTTPS-এর স্বাভাবিক ক্ষেত্র: ব্রাউজারের সেশন ওয়েবসাইটে শেষ হয়, তাই এক্সিট এমন সাইফারটেক্সট পাঠায় যা সে পড়তে পারে না।
ডিফল্টভাবে আর কিছুই টেকে না। এনক্রিপ্ট না করা অনুরোধ এক্সিটে ঠিক তেমনই পঠনযোগ্য থাকে যেমনটা ক্যাফের Wi-Fi-তে ছিল, আর টানেল এমন সুরক্ষা যোগ করে না যা অ্যাপ্লিকেশনের কখনোই ছিল না। একইভাবে, এক্সিটের ফায়ারওয়াল নিয়ম ও ফরওয়ার্ডিং নীতি ঠিক করে এরপর কী হবে; সফল হ্যান্ডশেক পিয়ার সংযোগের ব্যাপারে একটি সত্য, বাকি যাত্রার ব্যাপারে নয়।
ওভারহেড আরেকটি দৃশ্যমান পরিণতি। প্রতিটি প্যাকেট অতিরিক্ত হেডার বহন করে, এবং বাইরের পরিবহন নিজের হেডার যোগ করতে পারে, তাই প্রতি প্যাকেটে ব্যবহারযোগ্য পেলোড কমে যায়। নির্দিষ্ট সর্বোচ্চ ট্রান্সমিশন ইউনিটের পথে ঠিক এ কারণেই একটি টানেল পিং পার করে বড় আপলোড আটকে দিতে পারে।
অ্যাপ্লিকেশন আসলে যে পথ নিয়েছে তা পরীক্ষা করুন
শেষ ধাপ হলো সাধারণভাবে মেশিন নয়, নির্দিষ্ট অ্যাপ্লিকেশনটি নিশ্চিত করা। গন্তব্য রিজলভ করুন, ওই ঠিকানার রুট দেখুন, তারপর সংযোগ খোলা থাকা অবস্থায় তা পর্যবেক্ষণ করুন:
getent hosts example.com
ip route get "$(getent hosts example.com | awk '{print $1; exit}')"
ss -tnp state established '( dport = :443 )'
যদি রুটে টানেলের নাম থাকে কিন্তু সকেট তালিকায় ভৌত ইন্টারফেসের উৎস ঠিকানার একটি সংযোগ দেখায়, তবে অ্যাপ্লিকেশন নির্দিষ্ট কিছুর সঙ্গে বাঁধা, অথবা দ্বিতীয় একটি টানেল ডিফল্ট রুটের জন্য প্রতিদ্বন্দ্বিতা করছে। এটি রাউটিংয়ের প্রশ্ন, এবং ক্লায়েন্টের স্ট্যাটাস স্ক্রিন নয়, এই তিনটি আউটপুট থেকেই এর উত্তর পাওয়া যায়।
RFC 4301 নিরাপত্তা স্থাপত্য IPsec-এর জন্য এই মোড়ানোর IP-স্তরের সংস্করণ বর্ণনা করে, এবং একই স্তরবিন্যাস যুক্তি WireGuard ও OpenVPN-এর ক্ষেত্রেও প্রযোজ্য। একবার আপনি ভেতরের প্যাকেট ও বাইরের প্যাকেটকে আলাদা বস্তু হিসেবে দেখাতে পারলে, টানেলের বেশিরভাগ আচরণ রহস্যময় থাকা বন্ধ করে দেয় এবং এমন একটি রাউটিং টেবিলে পরিণত হয় যা আপনি পড়তে পারেন।