جمعه، 29 خردادماه 1383

مسیریابی بر اساس پارامترهای خاص

یکی از مسائلی که در بحث مسیر یابی در Router ها وجود داره ، استفاده از تکنیک های مسیریابی با استفاده از پارامتر های خاصی است ( به طور کلی Policy Routing گفته میشه ) . این پارامتر ها می توانند پارامتر های متنوعی باشند . به عنوان مثال مسیریابی بر اساس مبدا ، بر اساس TOS ، بر اساس پروتوکل مانند TCP یا UDP یا خیلی پارامتر های دیگر که در هر Packet وجود داره و شما می تونید بر اساس اونها تصمیم بگیرید .
به عنوان مثال در مورد مسیریابی بر اساس مبدا ( که یک نمونه پر کاربرد هستش و بر اساس همین نمونه می تونید بقیه رو هم متوجه بشید ) پارامتری که در مسیریابی مورد توجه قرار می گیرد مبدا تولید Packet می باشد .
فرض کنید یک Packet دست Router شما رسید ، در حالت عادی هر Router یه جدول مسیریابی ( Routing Table ) دارد که آدرسهای مقصد در آن به همراه مسیر آنها موجود است . در آخر این جدول یک گزینه Default Route وجود دارد که در صورتیکه آدرس مقصد در جدول مسیریابی پیدا نشد بر اساس مسیر Default Route عمل می کند . پس همانطور که می بینید همه تصمیمها بر اساس آدرس مقصد گرفته می شود و در مسیریابی عادی هیچ راهی برای تصمیم گیری بر اساس خصوصیات خود Packet نیست . به این معنا که همه یا شما مقصد آنرا می شناسید و بر اساس مسیر آن، آنرا هدایت می کنید ، یا اینکه در جدول مسیر یابی مسیر به خصوصی برای آن پیدا نمی کنید و آنرا تحویل مسیر Default Route خودتان می دهید .
حالا فرض کنید که شما یک دستگاه Router دارید ( خیال نکنید منظورم از Router مثلا Cisco یا دستگاه خاصی هستش ، router به مفهوم کلی می تواند یک دستگاه کامپیوتر معمولی هم باشد ) و دو ارتباط به اینترنت از طریق دو ISP مختلف و می خواهید از هر دوی این ارتباطات استفاده کنید . مشکلی که در این حالت عادی مسیر یابی وجود دارد این است که شما در مسیر یابی معمولی تنها می توانید یک default route داشته باشید ( حالا یا ملقمه ای از چند default route هنگامیکه Balance انجام می دهید ) در حالیکه در اینجا شما باید درخواستهایی که از مبدا آدرس های مربوط به هر کدام از ISP ها ایجاد شده را از طریق همان ISP مسیریابی کنید . پس ملاحظه می کنید که در اینجا مهمترین عامل در مسیریابی آدرس مبدا هستش . ( این حالت رو Source Routing هم می گویند )
حالا فرض کنید که Router شما یک دستگاه Cisco باشد . این کار با راحتی با دستوراتی شبیه به زیر قابل انجام است :


route-map ISP permit 10
match ip address ISP1-ACCESS-LIST
set ip default next-hop ISP1-GATEWAY
!
route-map ISP permit 20
match ip address ISP2-ACCESS-LIST
set ip default next-hop ISP2-GATEWAY
!


در اینجا شما باید یک access-list درست کنید که در آن مشخص کنید که آدرسهایی که از سمت ISP1 برای شما اختصاص یافته است چیست ( همچنین ISP2 ). سپس با گذاشتن IP Address مربوط به Gateway سرویس دهنده ISP1 می توانید دستور زیر را برای فعال سازی عمل Source Routing انجام دهید ( همچنین ISP2 ):


interface FastEthernet0/0
description Connected to Local Area Network
ip policy route-map ISP
....


حال فرض کنید شما از یک دستگاه Linux برای این کار استفاده کنید . به همین سادگی یک rule ایجاد کنید :


ip ru add from ISP1-IP-CLASS/BITMASK to 0/0 table 101 pref 101
ip ru add from ISP2-IP-CLASS/BITMASK to 0/0 table 102 pref 102


حالا می خواهیم source routing رو فعال کنیم :


ip route add table 101 via ISP1-GATEWAY
ip route add table 102 via ISP2-GATEWAY


دیدید این Linux چه خدائیه تو این قضیه . به نظر من مفهمومش خیلی از Cisco قشنگتره در این زمینه .
حالا FreeBSD رو داشته باشد . در FreeBSD همه این گونه اعمال توسط IPFilter انجام میشه . در حقیقت از یک زاویه دیگه به مساله نگاه کرده که نسبت به دید Cisco و Linux فرق داره .
فرض می کنیم که در etc/rc.conf/ گزینه ipfilter_enable=YES رو دارید . حالا با اضافه کردن دو خط به etc/ipf.rules/ کار تمام است :


pass in quick on de0 to fxp0:ISP1-GATEWAY from ISP1-IP-CLASS/BITMASK to any
pass in quick on de0 to fxp1:ISP2-GATEWAY from ISP2-IP-CLASS/BITMASK to any


کار تمام است . این هم برای خودش خدائی هستش . دقت کنید که در اینجا فرض کردم de0 در حقیقت interface مربوط به Local Area Network شما است و fxp0 هم Interface مربوط به ISP1 هستش و fxp1 هم مربوط به ISP2 هستش .
در کل نگاه Linux رو بیشتر می پسندم و تازه چون در Linux توسط دستور ip route انجام می شود خیلی بهتر است ، چرا که محدودیت های IPFilter را ندارد ( مثل اینکه وقتی تعداد packet زیاد میشود باید برید 100 جای سیستم محدودیت ها رو زیاد کنید و اینها ) .
حالا سعی می کنم در آینده توسط همین مبنا روشی رو توضیح دهم که شما بتوانید از سرویس دهنده های ایران که همگی Send رو برای IP های غیر از خودشون بستند ، Send داشته باشید :) حواستون باشه که Tunnel رو هم بستند معمولا پس باید به روشهای شیطانی روی آورد ;)

[ جمعه، 29 خردادماه 1383، 3:22 صبح ]

آول اینکه عالی بود.
بعد حمید چرا میگی تونل رو بستند؟

[ JraNil ] | [ جمعه، 29 خردادماه 1383، 10:28 صبح ]

خوب براي اينکه امتحان کن . از خط مخابرات تونل هاي معروف کار نمي کنه ! مثل ipip يا ip_gre يا خيلي هاي ديگه .

[ حميد هاشمي ] | [ جمعه، 29 خردادماه 1383، 4:24 بعدازظهر ]

سلام
يک بحثي در Persiantools مطرح است که چطور ميشه فقط به کمک ويندوز بدون اينکه از سخت افزار يا نرم افزار خاصي استفاده کنيم بتونيم با دو تا مودم به ۲ تا ISP مختلف وصل بشيم. نظر شما در اين مورد چيه ؟
http://forum.persiantools.com/showthread.php?t=6461&page=2&pp=15

[ babak ] | [ جمعه، 29 خردادماه 1383، 9:40 بعدازظهر ]

salam
iprodev.net ro dobare blogesh ro rah andakhtim]
doost dashti ye sar bezan va agaram khasti ye post benevis bara doostat
ya hagh

[ meysam ] | [ جمعه، 29 خردادماه 1383، 11:35 بعدازظهر ]

سلام

جناب آقاي حميد هاشمي، مطلب بسيار جالبي را مطرح کرديد که حداقل خيلي مورد نياز بنده است. اگر ممکن است با فرض داشتن دود روتر جداگانه براي هر ISP نمونه Access Listها را هم مرقوم بفرماييد.

با نهايت تشکر

[ محمد ] | [ چهارشنبه، 3 تیرماه 1383، 0:02 بعدازظهر ]

اطلاعات خوبی بود.
ولی به این نکته هم دقت کنیم که همیشه بهتره روی gateway شبکه داخلی مسیر یابی مبدا رو غیر فعال کنیم. چون یه هکر با استفاده از امتیاز میتونه حمله هایی رو بر علیه شبکه ترتیب بده.
trueend5

[ علیرضا ] | [ سه شنبه، 10 شهریورماه 1383، 4:15 بعدازظهر ]
ارسال نظرات









اطلاعات شما را بیاد داشته باشم ؟