Android-এ SSH SOCKS প্রক্সি: কেন আপনার অর্ধেক অ্যাপই সংযুক্ত হয়
ssh -D একটি SOCKS লিসেনার তৈরি করে, ডিভাইস টানেল নয়। অ্যাপ থেকে অ্যাডাপ্টার হয়ে SSH পর্যন্ত চেইন দেখুন, DNS ও জীবনকালের ফাঁক যাচাই করুন।
আপনি SSH দিয়ে লগইন করেন, -D 1080 যোগ করেন, আর কমান্ডটি সফল হয়। এখন ফোনে একটি SOCKS লিসেনার আছে, তবু অর্ধেক অ্যাপ মোবাইল ডেটাতেই বেরিয়ে যায়। এটাই স্বাভাবিক ফল, ভাঙা টানেল নয়: ssh -D একটি প্রক্সি এন্ডপয়েন্ট তৈরি করে, আর Android অ্যাপ প্রক্সি ব্যবহার করে কেবল তখনই যখন কিছু তাদের বাধ্য করে। চেইনটি ধাপে ধাপে অনুসরণ করলে দেখা যায় কাজের কোন অংশ আসলে কোথায় থাকে।
যেখান থেকে ট্রাফিক শুরু হয় সেখান থেকেই শুরু করুন
টানেল ব্যবহার করার কথা এমন একটি অ্যাপ বেছে নিন এবং দেখুন তার নিজের প্রক্সি সেটিং আছে কি না। SOCKS ফিল্ড আছে এমন ব্রাউজার সহজ ক্ষেত্র: এটিকে 127.0.0.1:1080 ঠিকানায় নির্দেশ করুন, সেটিং থাকলে দূরবর্তী DNS চালু করুন, অনুরোধটি পার হয়ে যাবে। এমন ফিল্ড নেই এমন চ্যাট অ্যাপ, ম্যাপ অ্যাপ বা গেমের লিসেনার ব্যবহারের কোনো উপায় নেই, আর SSH কমান্ডে যা লেখেন তা এটা বদলায় না।
অন্য কিছু জড়ানোর আগে ফোনের নিজের শেল থেকে SOCKS সরাসরি বলা ক্লায়েন্ট দিয়ে প্রমাণ করুন লিসেনারটি কাজ করে:
ssh -N -D 1080 [email protected]
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
ফিরে আসা ঠিকানাটি SSH সার্ভারের হওয়া উচিত, ফোনের নয়। যদি তাই হয়, প্রক্সির অর্ধেক কাজ শেষ, বাকিটা কভারেজ নিয়ে। যদি না হয়, আগে SSH দিকটি ঠিক করুন: কী প্রমাণীকরণ, সার্ভারের গন্তব্যে পৌঁছানোর ক্ষমতা, এবং SSH সার্ভারের নিজের ইগ্রেস।
Android-এর দরকারি অংশটি যোগ করুন
প্রক্সি সেটিং নেই এমন অ্যাপের দরকার এমন কিছু যা তাদের প্যাকেট ধরে প্রক্সি সংযোগে বদলে দেয়। রুট নেই এমন ডিভাইসে সেটি একটি VPN-সেবা অ্যাডাপ্টার: একটি অ্যাপ যা ভার্চুয়াল ইন্টারফেস নিয়ে বাছাই করা ট্রাফিক স্থানীয় SOCKS লিসেনারে পাঠায়। চেইনটি হয় অ্যাপ, অ্যাডাপ্টার, SOCKS লিসেনার, SSH সংযোগ, গন্তব্য।
অ্যাডাপ্টার ইনস্টল করুন, তাকে VPN অনুমতি দিন, এবং সে কোন অ্যাপ বা রুট ধরবে তা বাছুন। তখন স্ট্যাটাস বারের কী আইকন অ্যাডাপ্টারকেই বোঝায়, আলাদা বাণিজ্যিক VPN নয়। Android প্রতি ব্যবহারকারী প্রোফাইলে একটি সক্রিয় VPN-সেবা সংযোগই অনুমতি দেয়, তাই দ্বিতীয় VPN অ্যাপ চালু করলে চেইনের উপরে স্তর যোগ হয় না, বরং একই ভূমিকার জন্য প্রতিদ্বন্দ্বিতা করে।
এই ধাপেই একটি সফল পরীক্ষা আপনাকে বিভ্রান্ত করতে পারে। অ্যাডাপ্টার যদি কেবল সেই ব্রাউজারটিই ধরে যেটি আপনি আগেই প্রক্সিতে নির্দেশ করেছেন, সবকিছু কাজ করে আর অন্য কিছু ঢাকা পড়ে না। ডিভাইসটি টানেলে আছে বলে সিদ্ধান্ত নেওয়ার আগে ক্যাপচার তালিকাটি পড়ুন।
SSH পরিবহনকে ক্যাপচারের বাইরে রাখুন
SSH সংযোগ নিজেই যে SOCKS টানেল চালু রাখে তার ভেতরে ফিরে যাওয়া উচিত নয়। অ্যাডাপ্টার SSH অ্যাপের ট্রাফিক ধরলে টানেল এমন সংযোগের উপর নির্ভর করে যা টানেলের জন্য অপেক্ষা করছে, আর ফল হলো একটি লুপ যা অ্যাডাপ্টার চালু হওয়ামাত্র আটকে যায় বা ব্যর্থ হয়।
সংহত বাস্তবায়ন নিজের পরিবহন সকেট রক্ষা করে। আলাদা অ্যাপের সঙ্গে সমর্থিত ব্যতিক্রম দরকার: SSH অ্যাপকে ক্যাপচারের বাইরে রাখুন, বা ঠিকানা দিয়ে SSH এন্ডপয়েন্ট বাদ দিন। দুটিরই দাম আছে। পুরো টার্মিনাল অ্যাপ বাদ দিলে তার অসম্পর্কিত নেটওয়ার্ক কার্যকলাপও টানেল থেকে সরে যায়, আর ঠিকানা-ভিত্তিক ব্যতিক্রম ভেঙে যায় যখন সার্ভারের ঠিকানা বদলায় বা পরের সংযোগে নামটি ভিন্নভাবে সমাধান হয়।
বাইরে থেকে ব্যতিক্রমটি যাচাই করুন: অ্যাডাপ্টার আবার সংযুক্ত করুন, তারপর নিশ্চিত করুন SSH সেশন টিকে আছে এবং প্রক্সি অনুরোধ এখনও সার্ভারের ঠিকানা জানাচ্ছে। যে সেশন অ্যাডাপ্টার শুরুর আগ পর্যন্ত কাজ করে তারপর জমে যায়, সেটিই লুপ।
DNS আর UDP-কে চেইনের শেষ পর্যন্ত অনুসরণ করুন
OpenSSH-এর ডাইনামিক ফরওয়ার্ড TCP সংযোগ বহন করে। এটি UDP অ্যাসোসিয়েট বা ICMP পরিবহন নয়, আর অ্যাডাপ্টার UDP প্যাকেট গ্রহণ করে UDP ফরওয়ার্ডিং বানাতে পারে না। UDP-তে জোর দেওয়া সবকিছু, QUIC ও WebRTC মিডিয়াসহ, অ্যাপের উপর নির্ভর করে ব্যর্থ হয় বা TCP-তে ফিরে যায়।
DNS-এর নিজের সিদ্ধান্ত দরকার। যে অ্যাপ নাম স্থানীয়ভাবে সমাধান করে সে সংযোগের আগে সাধারণ রিজলভারের মাধ্যমে অনুরোধ পাঠায়, তাই টানেল সংযোগ বহন করে কিন্তু সন্ধান নয়। দূরবর্তী-DNS বিকল্প আছে এমন প্রক্সি-সচেতন ক্লায়েন্ট এটি এড়ায়; এমন বিকল্প নেই এমন ক্যাপচার করা অ্যাপ এড়ায় না। অ্যাডাপ্টার বদলে দিয়েছে ধরে নেওয়ার বদলে কোন রিজলভার উত্তর দিল তা দেখুন।
SOCKS লিসেনারকে loopback-এ বাঁধা রাখুন, প্রথম ব্যবহারে SSH সার্ভারের হোস্ট কী যাচাই করুন, এবং চূড়ান্ত সাইটের জন্য সাধারণ HTTPS যাচাই রাখুন। SSH ফোন থেকে সার্ভার পর্যন্ত অংশ রক্ষা করে; সার্ভার এরপর যা করে তা এটি এনক্রিপ্ট করে না।
দুটি জীবনকাল দেখে সিদ্ধান্ত নিন
অ্যাডাপ্টার আর SSH সেশনের জীবনকাল আলাদা। অ্যাডাপ্টার ধরে রাখতে থাকা অবস্থায় SSH কেটে গেলে অ্যাপ স্পষ্ট ত্রুটি ছাড়াই আটকে যেতে পারে, কারণ তাদের প্যাকেট এখনও এমন ভার্চুয়াল ইন্টারফেসে ঢোকে যার আর কাজ করা নির্গমনপথ নেই। অ্যাডাপ্টার থেমে গেলে অ্যাপ ডিভাইসের VPN নীতির উপর নির্ভর করে সরাসরি বেরোয় বা ব্লক হয়।
দুটি দিকই সচেতনভাবে পরীক্ষা করুন: অ্যাডাপ্টার চালু থাকতে SSH সেশন মেরে ফেলুন, তারপর SSH চালু থাকতে অ্যাডাপ্টার থামান। প্রতিটি ক্ষেত্রে ফোন যা করে সেটিই আপনি সত্যিই প্রয়োগ করা নীতি, সেটআপ নির্দেশনা যা-ই দাবি করুক।
যদি কাজের ধারায় অনুমানযোগ্য ব্যর্থতার সঙ্গে পুরো ডিভাইসের কভারেজ দরকার হয়, সৎ উত্তর হলো সত্যিকারের IP VPN বা এই চেইনের জন্য তৈরি রক্ষণাবেক্ষিত অ্যাডাপ্টার। অসম্পর্কিত ক্যাপচার অ্যাপের পাশে চলা একটি শেল সেশন রক্ষণাবেক্ষিত ডিভাইস টানেল নয়; এটি দুটি উপাদান যাদের মধ্যে একটি শেষ হলে কী হবে তা নিয়ে কোনো চুক্তি নেই।