সবুজ আইকন, একই পাবলিক IP: VPN কোন রুটটি এড়িয়ে গেল
ট্রে আইকন একটি টানেলের কথা জানায়, ডিফল্ট রুটের নয়। চারটি লুকআপ দেখায় ক্লায়েন্ট রুটটি বসিয়েছে কি না, নাকি এক্সিট কখনও আপনার সোর্স অনুবাদ করেনি।
সংযুক্ত, সবুজ ট্রে আইকন, আর ঠিকানা-প্রতিধ্বনি পাতা এখনও প্রোভাইডারের ঠিকানা দেখাচ্ছে, এর মানে স্বয়ংক্রিয়ভাবে কোনো ত্রুটি নয়। ক্লায়েন্ট দুটি আলাদা কাজ করে: এটি একটি টানেল তৈরি করে, এবং এটি রাউটিং টেবিল সম্পাদনা করে। যেকোনোটি অন্যটি ছাড়াই ঘটতে পারে, আর সিলেক্টিভ রাউটিং হলো সেই কনফিগারেশন যেখানে দ্বিতীয়টি সচেতনভাবে বাদ দেওয়া হয়।
ক্লায়েন্ট আসলে কী ইনস্টল করেছে
টানেল চালু আছে কি না তা জিজ্ঞাসা করার বদলে জিজ্ঞাসা করুন কোন ইন্টারফেস একটি প্যাকেটকে প্রকৃত গন্তব্যে নিয়ে যাবে। সেই গন্তব্যের জন্য রুটহীন টানেল এমন একটি ব্যক্তিগত রাস্তা যা কেউ ব্যবহার করছে না।
ip route get 9.9.9.9
Find-NetRoute -RemoteIPAddress 9.9.9.9
route print -4প্রথম কমান্ডটি Linux ও macOS-এ উত্তর দেয়, আর বাকি দুটি Windows-এর সমতুল্য যেখানে একটি যথেষ্ট। উত্তর যদি ফিজিক্যাল অ্যাডাপ্টারের নাম বলে, তবে টানেল চালু আছে এবং ডিফল্ট রুট কখনও সরেনি। যে গন্তব্যের জন্য টানেল ব্যবহার করা উচিত তার জন্য লুকআপটি পুনরাবৃত্তি করুন, কারণ দুটি লুকআপ, একটি দূরবর্তী ও একটি সাধারণ, বলে দেয় কোন ডিজাইন মোতায়েন আছে।
সিলেক্টিভ রাউটিংয়ের তিনটি রূপ
একটি ফুল-টানেল প্রোফাইল সাধারণত ইন্টারফেসের দিকে নির্দেশ করা একটি ডিফল্ট রুট লেখে, অথবা জোড়া অর্ধ-পরিসর প্রিফিক্স লেখে যা প্রিফিক্স দৈর্ঘ্যে জেতে, আর মূল ডিফল্ট টেবিলে থাকে। সিলেক্টিভ রাউটিং হলো অন্য পছন্দ, এবং এটি কয়েকটি রূপে আসে। একটি প্রোফাইল RDP সার্ভারের মতো একক হোস্ট রাউট করে, আরেকটি একটি পাবলিক রেঞ্জ রাউট করে যেখানে নির্দিষ্ট স্থান থেকে পৌঁছাতে হয়, আর তৃতীয়টি সচেতনভাবে একটি অ্যাপ্লিকেশন বাদ দেয়। তিনটিই বৈধ, এবং এর কোনোটিই একটি সাধারণ ওয়েবসাইট যে ঠিকানা দেখে তা বদলায় না।
grep -nE "redirect-gateway|route-nopull|route " /etc/openvpn/client/*.conf
ip route show table main | head -20যে নির্দেশটি সিদ্ধান্ত নেয় তার জন্য প্রোফাইল পড়ুন, তারপর কী উৎপন্ন হয়েছে তার জন্য টেবিল পড়ুন। পুশ করা নির্দেশ ক্লায়েন্টে দমনও করা যায়, তাই সার্ভারকে দোষ দেওয়ার আগে প্রোফাইল ও টেবিলকে মিলতে হবে।
দূরের পাশকে সোর্স ঠিকানা নতুন করে লিখতে হবে
একটি দ্বিতীয় ব্যর্থতা আছে যা ব্রাউজার থেকে একই রকম দেখায়। রুটটি টানেলের ভেতরে যায়, সার্ভার প্যাকেটগুলো পায়, তারপর ক্লায়েন্টের ব্যক্তিগত ঠিকানা অক্ষত রেখেই সেগুলো ফরওয়ার্ড করে। পরবর্তী হপের সেই ঠিকানার জন্য ফেরার পথ নেই, তাই উত্তরগুলো উবে যায় এবং পাতা ঝুলে থাকে। সার্ভারকে অন্তত ফরওয়ার্ড করতে হবে, আর সোর্সকে এমন কিছুতে অনুবাদ করতে হবে যা ইন্টারনেট ফিরতি রাউট করতে পারে।
sysctl net.ipv4.ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -S | grep MASQUERADEযে ইন্টারফেস সত্যিই ইন্টারনেটের দিকে মুখ করে তার নাম দিন, যা আধুনিক ডিস্ট্রিবিউশনে সবসময় eth0 নয়। নির্দিষ্ট ঠিকানার হোস্টেড সার্ভার masquerade ব্যবহার না করে সরাসরি সেই ঠিকানায় অনুবাদ করতে পারে। দুই অর্ধই গুরুত্বপূর্ণ, কারণ অনুবাদ ছাড়া ফরওয়ার্ডিং অরাউটেবল সোর্স ফাঁস করে, আর ফরওয়ার্ডিং ছাড়া অনুবাদ প্যাকেটটি কখনও দেখে না।
নাম রেজোলিউশন নিজের পথ নেয়
ট্রাফিক টানেল দিয়ে বেরোতে পারে, অথচ যে লুকআপ নামটি খুঁজে পেয়েছে সেটি স্থানীয় নেটওয়ার্কের একটি রিজলভারে গেছে। দৃশ্যমান ঠিকানা একই থাকে, কোয়েরিগুলো থাকে না, আর সেই ফাঁকটাই ঠিক যা একটি স্প্লিট-DNS ডিজাইন বেছে নেয়।
resolvectl status | head -20
resolvectl query example.orgলক্ষ্য করুন কোন সার্ভার উত্তর দিয়েছে এবং তা টানেল-পূর্ব বেসলাইন থেকে আলাদা কি না। একটি স্প্লিট টানেলে এটি সাধারণত সেই সেটিং যা মানুষ ঠিকানা নিয়ে অভিযোগ করার সময় বদলাতে চেয়েছিল, আর এটাই সেই সেটিং যা তারা কখনও দেখেনি।
চারটি পর্যবেক্ষণ যা বিষয়টি নিষ্পত্তি করে
টানেল বন্ধ থাকলে এক্সিট ঠিকানা নিন, তারপর চালু থাকলে। উভয় অবস্থায় গন্তব্য লুকআপ চালান এবং প্রতিবার ইন্টারফেসটি লক্ষ্য করুন।
curl -sS https://ifconfig.me/ip
ip route get 9.9.9.9যখন লুকআপ টানেলের ভেতরে পড়ে আর প্রতিধ্বনি এখনও প্রোভাইডারের ঠিকানা দেখায়, তখন এক্সিটে অনুবাদ অনুপস্থিত। যখন লুকআপ ফিজিক্যাল অ্যাডাপ্টারে পড়ে, তখন প্রোফাইল সিলেক্টিভ এবং পাবলিক ঠিকানা কখনও পরিসরেই ছিল না। আপনি যে প্রতিধ্বনি সেবা বিশ্বাস করেন তা দিয়ে বদলান এবং চারটি পর্যবেক্ষণ একসাথে লিখুন, কারণ আলাদা আলাদা তারা উপাখ্যান। একসাথে তারা চিহ্নিত করে ক্লায়েন্ট আসলে দুটি কাজের কোনটি সম্পন্ন করেছে।