این یه تجربه پراکنده دیگه

امروز یه پست خیلی کوچیک و تو دل برو دارم. یعنی زیاد  توضیح نمیدم و تنها یه شمای کلی از راه حل میدم.

برای توزیع بار چند قدم ساده داره. یه مفهوم وجود داره به نام gateway که هر اتصال اینترنت یکی داره. در اولین قدم اینه که چندتا gateway رو با هم گروه‌بندی میکنید تا بتونید با استفاده از این گروه‌ها توزیع بار رو انجام بدید. در گروه یک اولویت به هر gateway اختصاص داده میشه و یه معیار برای اینکه کی بین اولویت‌های مختلف انتخاب انجام بشه. برای انجام این کار باید به منوی system -> routing رفت و توی tab به نام Group این گروه رو ساخت.

مرحله دوم هم خیلی ساده است. بایستی در قسمت قوانین دیواره آتش، قانون عمومی که برای اتصال LAN به اینترنت وجود داره رو ویرایش کرد و گفت که ترافیکی که توی این قانون صدق میکنه بجای اینکه به gateway پیش فرض فرستاده بشه به این گروه فرستاد بشه تا عملیات تقسیم بار به خوبی انجام بشه. و کار تا این لحظه تمومه.

مرحله سوم که اختیاری هم هست اینه که بایستی DNS هایی برای کل سیستم تعریف بشه که از هر کدوم از اون gateway ها قابل دسترس باشه. در حالت معمول نیاز به این تنظیم نیست اما اطمینان پذیری سرویس‌ها با این تنظیم افزایش پیدا می‌کنه.

 

بعد از یه مدت که سرم توی کار خیلی شلوغ بوده با یه تجربه پراکنده دیگه اومدم اینجا.

سوال اصلی که قرار جواب داده بشه اینه که اگه ما چند تا منبع اینترنت داشتیم و خواستیم برای افزایش قابلیت اطمینان پهنای باند اونها رو باهم ترکیب کنیم این کار چطور صورت میگیره.

خب راه حل‌های گوناگونی برای اینکار وجود داره. یکی از راه استفاده از سخت افزارهایی هست که برای این کار ساخته شده. mikrotik یا مسیریاب‌های اختصاصی شرکتهای دیگه که قابلیت loadbalancing رو دارند و معمولا با سام تجاری loadbalancing router شناخته میشن این قابلیت رو داره.

نرم افزارهای تجاری هم وجود دارند که این امکان رو برای شما ایجاد میکنه. اما از اونجایی که به قول دوستان ما روی راه حل‌های متن باز غیرت خاصی داریم اینجا هم میخوام چند تا محصول معرفی کنم که این کار باهاشون امکان پذیره.

البته باید بهتون بگم که تقریبا کرنل هر سیستم عاملی امکان انجام این کار رو داره و فقط باید به اندازه کافی بلد باشید که با کرنل حرف بزنید و اون رو کانفیگ کنید. تفاوت سیستم عامل های مختلف و راه حل‌های مختلف اینه که چقدر ابزار برای راحت تر کردن این کار انجام دادن.

خب راه حل هایی که من باهاشون مستقیما کار کردم zeroshell و pfSense هست که یکیشون یه لینوکسه یک دیگش هم یه freeBSD  هست. اما دیدم دوستان با استفاده از kerio و محصولات cisco اینکار رو انجام دادن. هردوی zeroshell و pfSense امکاناتی دارند که به راحتی کانفیگ میشن و این کار انجام میشه.

این مقدمه برای این پست کافیه تا تو یه پست کامل توضیح میدم که اینکار pfSense چطور انجام میشه.

خب به نظر میرسه وبلاگ من رو خاک گرفته! میدونم و تنها دلیلی که دارم الان مینویسم اینه دلم رزبری پی میخواد. البته بگم که من یه دونه پاندابرد دارم ولی دلم یکی از اینا رو هم میخواد.

قبلش بگم که این کار اندکی شیطنت و شیطان صفتی توش داره پس اگه خواستید انجامش بدید وجدان داشته باشید

این داستانی که میخوام براتون تعریف کنم توی چله تابستون وقتی که کسی دانشگاه نیست اتفاق افتاده و خب ما چون پایه ثابت خوابگاه بودیم! بودیم!اون سالی که من دانشجو بودم و این اتفاق افتاد دانشگاه صنعتی امیرکبیر اینترنتش رو از طریق سه یا چهارتا پروکسی squid به دانشجوها و اساتیدش در مقاطع مختلف ارائه میداد. اون سال بخاطر چله تابستون بودن دوستان انفورماتیک زحمت کشیده بودن و به همه بدون پسورد سرویس میدادن. یعنی هیچ یک از پراکسی ها پسورد نداشت و تنها محدودیت رو روی آی پی آدرس شما اعمال میکردن و شما رو محدود میکردن خب شما هم اگه جای من بودید دوست داشتید از این فرصت بوجود اومده استفاده کنید.

کل کاری که من کردم این بود که اولا تعداد آی پی هام توی لینوکسم که اگه اشتباه نکنم یه فدورا ۱۵ بود زیاد کردم. یه برنامه پیدا کردم که بتونیم بین پراکسی‌های مختلف تقسیم بار انجام بدم و خب یه سری بازی wii داشتم که میخواستم از megaupload خدا بیارمز دانلودش کنم. خب سعی میکنم که مرحله به مرحله توضیح بدم که چیکار کردم

اول : تقسیم بار روی سرور ها اولین کاری که کردم با استفاده از یه دستور خوب لینوکس به اینترفیس شبکه ام به تعداد کافی آی پی دادم

ifconfig eth0:1 192.168.49.8
ifconfig eth0:2 192.168.49.9
ifconfig eth0:3 192.168.49.10
ifconfig eth0:4 192.168.49.11
ifconfig eth0:5 192.168.49.12
ifconfig eth0:6 192.168.49.13

خب مرحله بعد این بود که بتونم با استفاده از هریک از این آدرسها به اون پروکس‌ها وصل بشم. تحقیقات بسیاری در این زمینه انجام دادم که چطوری این عمل امکان پذیره اما نمیدونم چطور (پیری و هزار عیب) به این نتیجه رسیدم که یه ابزار بسیار خوب برای این کار که خیلی هم ساده عمل میکنه وجود داره به اسم balance که این کار رو به شکل ساده و خیلی راحتی انجام میده تنها نیاز بود که من بگم روی کدوم آدرس به کدوم یک از پروکسی ها وصل بشه. کاری که بالانس میکنه یه پروکسی دیگه بوجود میاره که هر درخواست به اون روی مابقی پروکسی ها تقسیم میشن به همین سادگی. پس کاری که من کردم این بود که به ازای هر آی پی یک بالانس بالا آوردم و در نهایت یک بالانس در لایه بالاتر همه این بالانسهای رو به هم متصل میکرد که کدش تو پایین اومده

balance -B 192.168.49.8 8001 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.9 8002 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.10 8003 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.11 8004 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.12 8005 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080
balance -B 192.168.49.13 8006 msc.aut.ac.ir:8080 phd.aut.ac.ir:8080 staff.aut.ac.ir:8080

balance 8000 localhost:8001 localhost:8002 localhost:8003 localhost:8004 localhost:8005 localhost:8006

خب حالا ما یه لود بالانسر داریم که اگه تعداد زیادی کانکشن بهش برسه اون رو روی آی پی های مختلف روی پروکسی‌های مختلف تقسیم میکنه. بخش اول کار تمومه

دوم: دانلود بدون نظارت از megaupload چند تا مشکل توی دانلود از megaupload وجود داشت. یکی اینکه مگا آپلود فی…ل…تر بود. خب راه حلش چی میتونست باشه. من گشتم و گشتم تا متوجه شدم که میشه آدرس سایت رو به این صورت هم استفاده کرد whateveryoucouldthinkof.megaupload.com خب این کشف بزرگی بود و خوشبختانه اکثر این آدرسا فیلتر نبود. پس اول مشکل به حول و قوت خود مگا آپلود حل شد. مشکل بعدی این بود که این سایت برای اینکه بگذاره ما ازش دانلود کنیم نیاز به یوزر نیم و پسورد داشت که معنیش این بود که باید یه بروزر بصورت دستی لاگین بشه تا بشه ازش استفاده کرد. راه حل این مساله هم خدا رو شکر ساده بود. با استفاده از گوگل و یکم سرک کشیدن اینور اونر متوجه شدم اگه بتونم کوکی لاگین رو بسازم میتونم به خیلی از برنامه های دانلود که از خط فرمان پشتیبانی میکنن این کوکی رو میخونن و کارشون رو انجام میدن. خط فرمانی که من برای لاگین کردن به مگا آپلود پیدا کردم این بود

curl -c cook --data "login=1&redir=1&username=USER&password=PASS" "http://www.pashmak.megaupload.com/?c=login" > /dev/null

که یه فایل کوکی به نام cook میساخت. حالا میموند اینکه من از یه برنامه با تعداد کانکشن زیاد و بصورت همزمان فایلها رو دانلود کنم. اونم به کمک دانلودر قوی aria2 حل شد. با استفاده از این دانلودر میتونستم لیستی از فایلها رو بهش بدم و بگم به چند تا کانکشن همزمان اونها رو دانلود کن. دستور دانلودم هم این بود

#!/bin/bash
Name="$1"
ListName="$Name.list"
outDir="$Name"
LogName="$Name.log"

mkdir "$outDir"
aria2c -c --http-proxy=localhost:8000 --load-cookies=cook --split=25 --max-concurrent-downloads=4 --auto-file-renaming=false --dir="$outDir" --log="$LogName" -i "$ListName"

خب بعدش واسه اینکه کل فایلها رو یکجا بتونم دانلود کنم از یه شل اسکریپت دیگه استفاده کردم که اونم اینجا میارمش

#!/bin/bash
for i in *.list
do
	./mega_downloader_rev.sh "${i%.list}"
done

خب حالا بریم سراغ مرحله بعد.

مرحله سوم : استخراج اتوماتیک لیست فایلها از متن یک صفحه وب بسیاری از جزئیات این بخش رو یادم نمیاد و خب خیلی هاش رو هم دستی انجام دادم. اما کلیت این بود که متن‌های تکرار شونده (تگ های html و …) توی لیست رو پیدا کردم و حذف کردم. بعدش یه پارسر با سی پلاس پلاس نوشتم‌(اون زمان به awk و sed و …) مسلط نبودم و فایلها رو استخراج کردم که توی هر کردوم یه چیری شببه این بود

http://www.pashmak.megaupload.com/?d=CNWWDFO6
http://www.pashmak.megaupload.com/?d=N9DTPYU5
http://www.pashmak.megaupload.com/?d=S5JEGPJP
http://www.pashmak.megaupload.com/?d=4UGW2VOM
http://www.pashmak.megaupload.com/?d=DJ1CXILH
http://www.pashmak.megaupload.com/?d=H4LZ5UJN

همین به کسی پیشنهاد نمیکنم که این کار رو انجام بده اما من انجام دادم و لذتش رو بردم. یادم رفت بگم من اون زمان میتونستم توی یک شب تا صبح (چون در طول روز نامردی بود استفاده از این تریک) میتونستم نزدیک به ۸۰ گیگ از اینترنت دانلود کنم و بخاطر این موفقیت به خودم و لینوکسم میبالم!