iproute2 در مقابل net-tools (این قسمت: static routing) (قسمت سوم)

کرنل لینوکس فرای ۲ Routing Table اصلی local و main تا ۲۵۲ جدول را پشتیبانی می‌نماید. علاوه بر route های سنتی، می‌توان از RPDB که مخفف Routing Policy Database است استفاده نمود که کار باید به جای استفاده از دستور ip route برای آن از ip rule استفاده نمود. سیستم RPDB کار را خیلی آسان می‌نماید. فعلاً با ip route آشنا می‌شویم که اساس کار است.linux_foundation
هر Routing Table شامل تعدادی entry می‌باشد که هر Entry شامل موارد زیر می‌باشد:

  • آدرس مقصد; یک آدرس Network یا Host

  • ToS

  • scope

  • خروجی interface : خروجی که route مذکور باید از آن خارج شود.

هر Table با یک عدد مشخص می‌شود به فایل زیر در etc/iproute2/rt_tables/ دقت نمایید:

در دو صورت می‌توانید از table ها استفاده نمایید:

  • اسم یک table

  • ID یک table

به مثال‌های زیر توجه کنید:

هر دو معادل هستند و یک خروجی می‌دهند:

نکته: enx0253343a3532 پورت interface موبایل می‌باشد که از طریق USB به کامپیوتر وصل شده است و اینترنت به اشتراک گذاشته است.
نکته: خیلی از موارد در نسخه‌های خاصی از کرنل به آن اضافه گردید. حتماً از (8)ip-route استفاده نمایید.

۱. گرفتن query با ip route

برای شروع به چند دستور زیر دقت کنید که همگی یکی هستند:

نکته: همانطور که دقت کردید اگر جدولی را مشخص نکنید به صورت پیش‌فرض بنا را بر main می‌گذارد.
خروجی همه دستورات بالا خروجی زیر می‌باشد:

نکته: اگر به خاطر داشته باشید، اگر از دستور route در net-tools استفاده می‌کردید، برای شما کلمه‌ای به نام gateway ارمغان گذاشته است. اما همان کلمه در iproute2 به default تغییر کرده است. در هر دو بسته Default Route به صورت زیر مشخص می‌شود:

  • با net-tool :

  • با iproute2:

نکته: اما default های دیگری نیز داریم که در جلوتر توضیح می‌دهیم.(دیگر آن‌ها Default Gateway نیستند.)
نکته: همانطور که می‌دانید در هر ماشین یک Default Gateway نمی‌توان تعریف کرد. وقتی تعریف گردد، کل سیستم Routing شما به هم می ریزد.
ممکن دستور show در سرور‌های کاربردی خروجی‌های زیادی به شما نشان دهد،‌در این‌حالت grep نیز کارساز نمی‌باشد. خود ip route چندین حالت query گرفتن را برای شما میسر کرده است. به حالات زیر دقت نمایید:

بعد از کلمه show ممکن است ۲ کلمه to یا from پدیدار گردد که که اگر to باشد باید dst آدرس مشخص شود و اگر from، باید src آدرس مشخص شود.
بعد از آن‌ها ۳ کلمه اختیاری زیر را نیز می‌توانید به برید:

  • root

  • exact

  • match

نکته: هر چند کار با show طول و تفضیل زیادی دارد ولی ترجیح می‌دهم، مطالب مورد نیاز را بگویم تا در یک مورد عمیق شوم.
کلمه کاربردی دیگری برای query گرفتن به نام get نیز وجود دارد. به مثال زیر دقت نمایید:

نکته: یک سؤال جدی پیش میاید: کش routing table چیست؟ کش جدای از ۲۵۲ table نام برده شده نگهداری می‌شود. دستکاری Routing Table ها با تأخیر بر روی cache نوشته می‌شود. اگر می‌خواهید کش را پاک کنید باید از فرمان زیر استفاده نمایید:

فرمان فوق موجب می‌شود تا یکبار کش پاک شود و سریع با route های جدید جایگزین شود.
نکته: کش routing table را ممکن است در بعضی از سیستم‌ها با forwarding information base (FIB) بشناسند.

چگونه routing table را ذخیره و بازیابی کنیم:
بدین منظور از فرمان‌های زیر استفاده می‌کنیم:

به فرمان‌های بالا دقت نمایید، خط اول همیشه باید با STDIN مشخص شود. در مورد خط دوم برایتان به صورت متغیر نوشتم که اگر default gateway دارید با خطای معروف زیر مواجه نشوید:

پس شما مجبورید یکبار دستی آدرس شبکه default gateway خود را قبل از restore وارد نمایید. سپس با فرمان سوم restore نمایید.

۲. انواع route type ها:

قبل از هر گونه دستکاری باید با انواع Entry در Routing Table ها آشنا شویم:

  • unicast : اکثر route ها در routing table به عنوان unicast ذخیره می‌شوند. هر گونه route که دارای مقصد شبکه و یا هاست خاصی باشد، توصیف کننده یک مسیر به مقصد می‌باشد. حتی route های پیچیده همانند nexthop دارای unicast می‌باشند. ممکن است در CMD کلمه unicast مشاهده نشود. ولی آن route به عنوان unicast در نظر گرفته می‌شود. یک مثال بارز اضافه کردن Default Gateway می‌باشد که یک route از نوع unicast است. به مثال‌های زیر توجه نمایید:

  • broadcast : این نوع route فقط برای Link Layer استفاده می‌شود. و فقط در جدول local تعریف می‌شود. به مثال‌های زیر توجه نمایید:

  • local : زمانی که IP آدرسی به یک interface اضافه می‌گردد، کرنل یک route در جدول local برای آن در نظر می‌گیرد. این بدان معناست که IP ها به صورت محلی میزبان IP های دیگر می‌باشند. به مثال‌های زیر توجه نمایید:

  • nat : وقتی کاربر سعی می‌کند یک stateless NAT پیکربندی نماید، کرنل یک entry برای آن در routing table ثبت می‌کند. به مثال‌های زیر توجه نمایید:

  • unreachable : هنگامی که یک درخواست برای تصمیم Routing یک مقصد با نوع مقصد unreachable بر می‌گرداند، یک ICMP Unreachable تولید می‌گردد و به آدرس مبدأ فرستاده می‌شود. به مثال‌های زیر توجه نمایید:

  • prohibit : هنگامی که یک درخواست برای تصمیم Routing یک مقصد با نوع مقصد prohibit بر می‌گرداند، یک ICMP prohibit تولید می‌گردد و به آدرس مبدأ فرستاده می‌شود. فرق prohibit و blakhole همانند reject و drop در iptables است. به مثال‌های زیر توجه نمایید:

  • blackhole : اگر یک پکت با این route type رسید از فرستادن آن صرفنظر می‌شود و هیچ گونه ICMP message نیز فرستاده نمی‌شود. به مثال‌های زیر توجه نمایید:

  • throw : این نوع route type راه مناسبی است تا جلوی lookup شدن route گرفته شود. به مثال‌های زیر توجه نمایید:

۳. بررسی یک سناریوی واقعی

فرض بر این است که دو کامپیوتر با دو subnet مختلف به یک Gateway متصل می‌باشند.
صورت مسئله: قرار است این دو همدیگر را watch نمایند.

۱.۳ فرضیات مسئله :

دو range :

  • 172.16.0.0/12

  • 10.0.0.0/8

Interface های روی gatewaye:

  • vboxnet0 : برای رنج ۱۰

  • vboxnet1 : برای رنج ۱۷۲

برای هر کدام از interface های *vboxnet برای خوانا شدن آخر IP آن را ۱.۱ می‌گذاریم.
دو کامپیوتر از هر رنج انتخاب و IP آخر آن را ۲۰ می‌دهیم مثلا:

  • 172.16.1.20

  • 10.10.1.20

در ضمن برای هر کدام default gateway را ۱.۱ مشخص می‌کنیم.

۲.۳ دست به کار شویم:

اگر بخواهیم از طرف gw به هر subnet یک ping بفرستیم با ICMP زیر مواجه می‌شویم:

دلیلش ساده است، gw ما به جایی دیگر route شده است.
راه کار:

در net-tools با فرمت زیر آشنا بودید:

در خط بالا یک route به Routing Table اضافه شد که می‌گوید اگر هر بسته‌ای از شبکه فوق رسید، به آدرس ۱۷۲.۱۶.۱.۱ بر روی eth0 منتقل شود.
معادل iprout2 خط بالا چنین می‌شود:

حال که مسأله روشن شد به اضافه کردن route ها می‌پردازیم:

همچنین باید در هر طرف route شبکه مقابل را نیز افزود:

نکته: وقتی DHCP Server دارید، باید route های مربوط به client ها را درون آن بگذارید تا release شوند. زیرا دستی دادنشان برای شبکه‌های بزرگ سخت است.

حالا از هر دو طرفین می‌توان شبکه طرف مقابل را watch کرد…!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *