ডিসপ্যাচ প্রক্সি ব্যবহার করে একাধিক নেটওয়ার্কের স্পিড একত্র করার সিস্টেম

সোমবার, ৩ মে ২০২১, দুপুর ১২:০৩ সময়

আমার ৬০ এম্বিপিএস এর দুইটা শেয়ার্ড ইন্টারনেট কানেকশন। একসাথে ১২০ এম্বিপিএস নিতে পারতাম, কিন্তু দুইটা বাসার দুই পাশে ব্যবহার হয়। তার উপর মাঝে মাঝে দুইটাই ডাউন থাকলেও ইন্টারনেট কানেকশন হঠাৎ চলে গেলে বিব্রতকর পরিস্থিতি তৈরি হয়।

গ্রামান্চলে এখনো পুরোপুরি স্পিড আসেনি। একটা বাড়িতে ত ২জি ঠিকমত আসেনা। ওদিন গ্রামে গিয়ে দেখি রবির ইন্টারনেট ৩ এম্বিপিএস পাচ্ছে আর স্কিটোর স্পিড ৩ এম্বিপিএস পাচ্ছে। দুইটা একত্র করলে ৬ এম্বিপিএস ব্যবহার করতে পারবো অনায়সে।

Techdiary: article-image

এমন না যে কনসেপ্টটা একদমই নতুন।

  1. উইন্ডোজে আগে আমরা স্পিডিফাই, কানেক্টিফাই এইসব ব্যবহার করতাম। এগুলার ভিপিএন দিয়ে দুই তিনটা কানেকশন একত্র করে ফাইল ডাউনলোড করতাম, স্পিড ১২০-১৫০ এম্বিপিএস উঠতো বিডিআইএক্সগুলোতে। কিন্তু সফটওয়্যারগুলো লিনাক্সে ব্যবহার করা যেত না।
  2. সবসময় গিগাবিট ল্যান কার্ডও ব্যবহার করা যায়না সব জায়গায়, এটা পোর্টেবল না। আবার গিগাবিট লাইন দিয়ে একটা ইন্টারনেটের ব্যাকআপ দিয়ে অন্যটা চালানো যায় না।

সেটাপ

তো দেখি আমরা কিভাবে করবো।

এটা করার জন্য প্রথমে একটা ল্যাপটপ বা ডেস্কটপ লাগবে যেটাতে দুইটা বা তিনটা নেটওয়ার্ক এডাপ্টার আছে। একদমই না হলে বাজার হতে ছোট ছোট ওয়্যারলেস এডাপ্টার কিংবা ইউএসবি ল্যান কার্ড কিনে নেয়া যায়। একটা আইএসপির লাইনে কানেক্টেড থাকলে, আরেকটা হয়তো মোবাইলের হটস্পটে কানেক্ট হবে। কম্পিউটারে আমরা একই সাথে সবগুলো নেটওয়ার্কে কানেক্ট করবো।

Techdiary: এখানে দেখা যাচ্ছে আমি Wired আর ওয়াইফাই দুইটাতেই কানেক্ট করেছি।
এখানে দেখা যাচ্ছে আমি Wired আর ওয়াইফাই দুইটাতেই কানেক্ট করেছি।

কিন্তু কম্পিউটার ত বুঝতে হবে দুইটা কানেকশন একসাথে ব্যবহার করা জরুরী। ওকে বুঝাতেই আমরা ডিসপ্যাচ প্রক্সি ব্যবহার করবো।

ডিসপ্যাচ প্রক্সি এমন একটা প্রক্সি যেটা দুই বা ততোধিক ইন্টারনেট কানেকশনে ট্রাফিক ব্যালেন্স করবে। একটা কানেকশন তৈরি হবে এই ইন্টারনেট কানেকশনে (একটা ইন্টারফেস দিয়ে), আর আরেকটা কানেকশন তৈরি হবে ওই ইন্টারনেট কানেকশনে (আরেকটা ইন্টারফেস দিয়ে)। যারা টরেন্ট বা কোন ডাউনলোড ম্যানেজার ব্যবহার করেন তারা হয়তো দেখবেন একসাথে কয়েকটা কানেকশন তৈরি হয় বড় কিছু ডাউনলোড করতে গেলে।

কয়েক বছর আগে লিনাক্সের জন্য এমন একটা ভার্সন খুঁজতে গিয়ে আমি dispatch-proxy মডিউলটার খবর পাই। এটা দিয়ে HTTP রিকুয়েস্টগুলো সহজেই হ্যান্ডেল করা যাচ্ছিলো, উইন্ডোজে এটা অনেক ভালো কাজ করছিলো কিন্তু লিনাক্সে একটা ইন্টারফেসে সে কানেক্টই করতে পারছিলো না। আর সব কানেকশন ত HTTP হয় না, কিছু কিছু সময় HTTPS আর TCP/UDP কানেকশনও তৈরি করা লাগতে পারে। সব মিলিয়ে এটার উপর বেশ অখুশি হয়েছিলাম।

কয়েকদিন আগে আবার খোঁজ পাই go-dispatch-proxy মডিউলটার। এটা আগের মডিউলটাই নতুন করে গো দিয়ে লেখা হয়। আর মাত্র কয়েক মাস আগে লিনাক্সের সাপোর্ট আনা হয়। ফাইল সাইজও মাত্র ৬০০ কিলোবাইট। আমি খুশিতে এটা ঘাটাঘাটি শুরু করে দিলাম।

প্রথমে আমার উবুন্টু বা লিনাক্স প্লাটফর্মের জন্য releases পেজ হতে এটার বাইনারি ফাইলটা ডাউনলোড করলাম। ফাইলটা আনজিপ করলাম।

এরপর এটাকে এক্সিকিউট করার পারমিশন দিলাম। উইন্ডোজে এটা করা লাগবেনা যদিও।

chmod +x go-dispatch-proxy

এরপর আমার সবগুলা ইন্টারফেসের একটা লিস্ট করতে বললাম।

➜  ./go-dispatch-proxy --list
--- Listing the available adresses for dispatching
[+] eno2, IPv4:192.168.11.13
[+] wlo1, IPv4:192.168.10.17
[+] br-5015f3732a10, IPv4:172.18.0.1
[+] br-75c7d426f1b1, IPv4:172.19.0.1
[+] br-c1c6a8b3e54a, IPv4:172.20.0.1
[+] docker0, IPv4:172.17.0.1
[+] br-ebbde8cd162b, IPv4:172.21.0.1

এখানে eno2 হলো আমরা ল্যান কার্ড আর wlo1 হলো ওয়্যারলেস কার্ড। মোবাইল দিয়ে usb tether করলে আরো ইন্টারফেস দেখাতো এখানে। 

তো, আমি ওকে বলবো একটা প্রক্সি তৈরি করার জন্য যেটা সবগুলো রিকোয়েস্ট ওই ইন্টারফেসগুলোর মধ্য দিয়ে ব্যালেন্স করবে। এটা করার জন্য আমাকে ওই ইন্টারফেসের আইপি বলে দিতে হবে। আর এই এপটাকে সবগুলা ইন্টারফেস একসেস করার জন্য প্রয়োজনীয় পারমিশন দিতে হবে।

➜ sudo setcap cap_net_raw=eip ./go-dispatch-proxy
➜ ./go-dispatch-proxy 192.168.11.13 192.168.10.17
[INFO] Load balancer 1: 192.168.11.13, contention ratio: 1
[INFO] Load balancer 2: 192.168.10.17, contention ratio: 1
[INFO] Local server started on  127.0.0.1:8080

তো, আমাকে একটা SOCKS5 সার্ভার দিলো। SOCKS সার্ভারের সুবিধা হলো এটা দিয়ে TCP/UDP কানেকশনগুলোও হ্যান্ডেল করা যায়, টরেন্ট এপগুলোতে সহজে ব্যবহার করা যায়। 

ওকে এখানে বলে দিতে পারতাম কোনটা দিয়ে বেশি রিকুয়েস্ট যাবে বা কম যাবে, কোন পোর্টে প্রক্সি তৈরি করবে, এমনকি আলাদা SSH কানেকশন কিংবা প্রক্সি দিয়েও টানেল করতে পারতাম, তবে আপাতত এডভান্সড কিছুতে না যাই।

প্রতিবার আইপি দিতে গেলে বড়ই ঝামেলা হবে বলে আমি একটু ছোট স্নিপেট লিখে ফেললাম।

sudo ./go-dispatch-proxy $(./go-dispatch-proxy -list | grep -E "eno|wlo" | awk '{split($0, a, ":");print a[2]}')

এই কোডটা করবে কি, লিস্ট eno আর wlo এর ইন্টারফেসগুলোর আইপি নিয়ে নিজে থেকেই কানেক্ট করে নিবে। এটা অবশ্য অত্যাবশ্যক না। আমি এটাকে একটা .sh ফাইলে সেভ করে রাখি যেন পরে ব্যবহার করা যায়।

ব্যবহার

আচ্ছা প্রক্সি ত পেলাম, এটাকে ব্যবহার করবো কিভাবে?

ফায়ারফক্সে Preferences এ গিয়ে Network Settings এ যেতে হবে। এরপর SOCKS host এ নিচের মত করে বসাতে হবে। খেয়াল রাখতে হবে SOCKS v5 যেন সিলেক্ট করা থাকে এবং HTTP প্রক্সি সহ বাকিগুলো খালি থাকে।

Techdiary: article-image

ক্রোমে একটু জটিল। আমরা Proxy SwitchyOmega এক্সটেনশনটি ব্যবহার করতে পারি। এখানে নিচের মত করে প্রক্সি সেট করে Apply Changes বাটন প্রেস করতে হবে।

Techdiary: article-image

এরপর আমরা এটাকে সিলেক্ট করে দিবো।

Techdiary: article-image

আর সরাসরি উবুন্টুতে প্রক্সি সেট করতে গেলে, Network settings এ গিয়ে ম্যানুয়ালি প্রক্সি সেট করতে পারবো।

Techdiary: article-image

এরপর যাই ব্রাউজ করতে যাবো, ও যে কিভাবে রিকুয়েস্ট ব্যালেন্স করছে, তা দেখতে পাবো।

➜  sudo ./go-dispatch-proxy $(./go-dispatch-proxy -list | grep -E "eno2|wlo1" | awk '{split($0, a, ":");print a[2]}')
[INFO] Load balancer 1: 192.168.11.13, contention ratio: 1
[INFO] Load balancer 2: 192.168.10.17, contention ratio: 1
[INFO] Local server started on  127.0.0.1:8080
[DEBUG] github.com:443 -> 192.168.11.13:0
[DEBUG] github.githubassets.com:443 -> 192.168.10.17:0
[DEBUG] github.githubassets.com:443 -> 192.168.11.13:0
[DEBUG] camo.githubusercontent.com:443 -> 192.168.11.13:0
[DEBUG] avatars.githubusercontent.com:443 -> 192.168.10.17:0
[DEBUG] browser.events.data.microsoft.com:443 -> 192.168.10.17:0

এখানে দেখা যাচ্ছে একটা রিকুয়েস্ট ১৩ দিয়ে যাচ্ছে আরেকটা রিকুয়েস্ট ১৭ দিয়ে যাচ্ছে।

এভাবে আমরা ডিসপ্যাচ প্রক্সি ব্যবহার করতে পারলাম। স্পিডিফাই, ক্র্যাক সফটওয়্যার, উইন্ডোজ ডিপেন্ডেন্সি এগুলো নিয়ে চিন্তা করার কোন মানেই নেই।