RIP

RIP – Routing Information Protocol یک پروتکل مسیریابی داخلی (IGP) است که به طور گسترده استفاده می‌شود. RIP در دهه 1970 در آزمایشگاه‌های Xerox به عنوان بخشی از پروتکل مسیریابی XNS توسعه یافت. RIP یک پروتکل distance-vector است و بر اساس الگوریتم‌های Bellman-Ford کار می‌کند. به عنوان یک پروتکل distance-vector، روتر RIP به صورت دوره‌ای به همسایه‌های خود به‌روزرسانی ارسال می‌کند، که این امر اجازه همگرایی به یک توپولوژی شناخته شده را می‌دهد. در هر به‌روزرسانی، فاصله تا هر شبکه مشخص به روترهای همسایه broadcast می‌شود.

ripd از RIP نسخه 2 که در RFC 2453 توصیف شده و RIP نسخه 1 که در RFC 1058 توصیف شده پشتیبانی می‌کند.

RIP netmask

قابلیت‌های netmask در ripd از هر دو نسخه 1 و 2 RIP پشتیبانی می‌کند. نسخه 1 RIP در اصل شامل اطلاعات netmask نبود. در RIP نسخه 1، کلاس‌های شبکه برای تعیین اندازه netmask استفاده می‌شدند. شبکه‌های کلاس A از 8 بیت mask، شبکه‌های کلاس B از 16 بیت mask و شبکه‌های کلاس C از 24 بیت mask استفاده می‌کنند. امروزه، روشی که به طور گسترده برای mask شبکه استفاده می‌شود، اختصاص mask به بسته بر اساس اینترفیسی است که بسته را دریافت کرده است. نسخه 2 RIP از variable length subnet mask (VLSM) پشتیبانی می‌کند. با گسترش subnet mask، mask می‌تواند تقسیم و دوباره استفاده شود. هر subnet می‌تواند برای اهداف مختلف مانند LAN های بزرگ تا متوسط و لینک‌های WAN استفاده شود.

در صورت وجود اطلاعات مشابه با همان prefix و metric، اطلاعات قدیمی سرکوب می‌شود. ripd در حال حاضر از مسیریابی multipath با هزینه مساوی پشتیبانی نمی‌کند.

سناریو ۱: پیکربندی پایه RIP

در سناریوی زیر قصد داریم مسیریابی پویا را با استفاده از RIP در روتر ها تنظیم کنیم. همچنین فرض شده است که IP در اینترفیس ها در بخش تنظیم ip در اینترفیس تنظیم شده اند :

3node

پیکربندی RIP

router rip [vrf NAME]

دستور router rip برای فعال کردن RIP ضروری است. برای غیرفعال کردن RIP، از دستور no router rip استفاده کنید. RIP باید قبل از انجام هر یک از دستورات RIP فعال شود.

ابتدا به تنظیمات روتر RIP با دستورات زیر وارد می‌شویم :

soodar1# conf t
soodar1(config)#
soodar1(config)# router rip
soodar1(config-router)#
network NETWORK

اینترفیس‌های فعال RIP را با استفاده از NETWORK تنظیم می‌کند. اینترفیس‌هایی که آدرس‌های آن‌ها با NETWORK مطابقت دارد فعال می‌شوند.

این گروه از دستورات اینترفیس‌های RIP را بین تعداد مشخصی از آدرس شبکه فعال یا غیرفعال می‌کند. به عنوان مثال، اگر شبکه 10.0.0.0/24 برای RIP فعال شود، این باعث می‌شود که تمام آدرس‌های از 10.0.0.0 تا 10.0.0.255 برای RIP فعال شوند. دستور no network RIP را برای شبکه مشخص شده غیرفعال می‌کند.

network IFNAME

اینترفیس فعال RIP را با استفاده از IFNAME تنظیم می‌کند. هم ارسال و هم دریافت بسته‌های RIP در پورت مشخص شده در دستور network ifname فعال می‌شود. دستور no network ifname RIP را در اینترفیس مشخص شده غیرفعال می‌کند.

اضافه کردن شبکه ها

می توان با استفاده از آدرس شبکه و هم چنین نام اینترفیس شبکه هایی که قرار است روی آن ها RIP اجرا شود و با دیگر روتر ها صحبت کند مشخص کرد :

soodar1(config-router)# network 200.1.2.0/24
soodar1(config-router)# network 200.1.3.0/24
neighbor A.B.C.D

یک همسایه RIP را برای ارسال به‌روزرسانی‌ها مشخص می‌کند. این زمانی لازم است که یک همسایه از طریق شبکه‌ای متصل شده باشد که از multicast پشتیبانی نمی‌کند، یا زمانی که می‌خواهید یک همسایه را به صورت استاتیک تعریف کنید. به‌روزرسانی‌های RIP از طریق unicast به هر همسایه ارسال می‌شود. به‌روزرسانی‌های همسایه علاوه بر هر به‌روزرسانی multicast ارسال شده زمانی که یک اینترفیس در حالت passive نیست (به دستور passive-interface مراجعه کنید) است. RIP به پردازش به‌روزرسانی‌های دریافت شده از هم همسایه و هم از طریق multicast ادامه می‌دهد. دستور no neighbor a.b.c.d همسایه RIP را غیرفعال می‌کند.

passive-interface (IFNAME|default)

این دستور اینترفیس مشخص شده را در حالت passive تنظیم می‌کند. در اینترفیس passive، تمام بسته‌های دریافتی به صورت عادی پردازش می‌شوند و ripd هیچ بسته RIP multicast یا unicast ارسال نمی‌کند به جز به همسایه‌های RIP مشخص شده با دستور neighbor. اینترفیس ممکن است به عنوان default مشخص شود تا ripd به صورت پیش‌فرض در تمام اینترفیس‌ها passive باشد.

پیش‌فرض این است که در تمام اینترفیس‌ها passive باشد.

ip split-horizon [poisoned-reverse]

کنترل split-horizon در اینترفیس. پیش‌فرض ip split-horizon است. اگر نمی‌خواهید split-horizon را در اینترفیس انجام دهید، لطفاً no ip split-horizon را مشخص کنید.

اگر poisoned-reverse نیز تنظیم شود، روتر مسیرهای مسموم شده با بالاترین metric را به روتر ارسال‌کننده برمی‌گرداند.

allow-ecmp [1-MULTIPATH_NUM]

کنترل می‌کند که RIP چند مسیر ECMP می‌تواند برای همان prefix تزریق کند. اگر بدون عدد مشخص شود، حداکثر (64) در نظر گرفته می‌شود.

توزیع مسیرها

redistribute <bgp|connected|isis|kernel|ospf|sharp|static|table> [metric (0-16)] [route-map WORD]

مسیرها را از منابع دیگر به RIP توزیع می‌کند.

soodar1(config-router)# redistribute connected
default-information originate

مسیر پیش‌فرض را در RIP تبلیغ می‌کند.

route A.B.C.D/M

این دستور خاص FRR است. دستور route یک مسیر استاتیک فقط در داخل RIP ایجاد می‌کند. این دستور باید فقط توسط کاربران پیشرفته که به طور خاص در مورد پروتکل RIP دانش دارند استفاده شود. در بیشتر موارد، ما توصیه می‌کنیم که یک مسیر استاتیک در FRR ایجاد کنید و آن را در RIP با استفاده از redistribute static توزیع کنید.

تنظیمات را به همین شکل برای soodar2 و soodar3 انجام می دهیم :

soodar2# conf t
soodar2(config)# router rip
soodar2(config-router)# network 200.1.2.0/24
soodar2(config-router)# network 200.2.3.0/24
soodar2(config-router)# redistribute connected
soodar2(config-router)#end
soodar2# write
------------------------------
soodar3# conf t
soodar3(config)# router rip
soodar3(config-router)# network 200.2.3.0/24
soodar3(config-router)# network 200.1.3.0/24
soodar3(config-router)# redistribute connected
soodar3(config-router)#end
soodar3# write

مشاهده جدول مسیریابی

با دستور زیر جدول مسیریابی تشکیل شده را مشاهده می کنیم که شبکه های 2.1.1.0 و 3.1.1.0 در روتر soodar1 توسط پروتکل RIP مسیریابی شده اند :

soodar1# sh ip fib 
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued route, r - rejected route

C>* 1.1.1.0/24 is directly connected, ge2, 00:04:19
R>* 2.1.1.0/24 [120/2] via 200.1.2.2, ge0, 00:04:13
R>* 3.1.1.0/24 [120/2] via 200.1.3.3, ge1, 00:04:15
C>* 200.1.2.0/24 is directly connected, ge0, 00:04:19
C>* 200.1.3.0/24 is directly connected, ge1, 00:04:19
R>* 200.2.3.0/24 [120/2] via 200.1.2.2, ge0, 00:04:13

توجه

باید ارتباط شبکه ای 1.1.1.0 , 2.1.1.0 , 3.1.1.0 بوسیله پروتکل RIP برقرار شده باشد .

کنترل نسخه RIP

RIP می‌تواند برای ارسال بسته‌های نسخه 1 یا نسخه 2 پیکربندی شود. پیش‌فرض ارسال RIPv2 است در حالی که هر دو RIPv1 و RIPv2 را می‌پذیرد (و با بسته‌های نسخه مناسب برای REQUESTS / به‌روزرسانی‌های triggered پاسخ می‌دهد). نسخه برای دریافت و ارسال می‌تواند به صورت global مشخص شود، و در صورت نیاز به صورت جداگانه برای ارسال و دریافت در هر اینترفیس override شود.

نکته مهم

RIPv1 نمی‌تواند احراز هویت شود. علاوه بر این، اگر RIPv1 فعال شود، RIP به بسته‌های REQUEST پاسخ می‌دهد و وضعیت جدول مسیریابی RIP خود را به هر روتر راه‌دور که درخواست می‌کند ارسال می‌کند. برای بحث دقیق‌تر در مورد پیامدهای امنیتی RIPv1 به بخش RIP Authentication مراجعه کنید.

غیرفعال کردن RIPv1 با مشخص کردن نسخه 2 به شدت توصیه می‌شود. این ممکن است در نسخه‌های آینده به عنوان پیش‌فرض شود.

version VERSION

نسخه RIP را برای پذیرش در خواندن و ارسال تنظیم می‌کند. VERSION می‌تواند 1 یا 2 باشد.

پیش‌فرض: ارسال نسخه 2 و پذیرش هر دو نسخه.

ip rip send version VERSION

VERSION می‌تواند 1، 2، یا 1 2 باشد.

این دستور اینترفیس تنظیم global نسخه rip را override می‌کند و انتخاب می‌کند که کدام نسخه RIP برای ارسال بسته‌ها با این اینترفیس استفاده شود. انتخاب RIP نسخه 1، RIP نسخه 2، یا هر دو نسخه. در مورد اخیر، جایی که 1 2 مشخص شده است، بسته‌ها هم broadcast و هم multicast می‌شوند.

پیش‌فرض: ارسال بسته‌ها طبق نسخه global (نسخه 2)

ip rip receive version VERSION

VERSION می‌تواند 1، 2، یا 1 2 باشد.

این دستور اینترفیس تنظیم global نسخه rip را override می‌کند و انتخاب می‌کند که کدام نسخه‌های بسته‌های RIP در این اینترفیس پذیرفته می‌شوند. انتخاب RIP نسخه 1، RIP نسخه 2، یا هر دو.

پیش‌فرض: پذیرش بسته‌ها طبق تنظیم global (هم 1 و هم 2)

فیلتر کردن مسیرهای RIP

مسیرهای RIP می‌توانند با استفاده از distribute-list فیلتر شوند.

distribute-list [prefix] LIST <in|out> IFNAME

می‌توانید access list ها را به اینترفیس با دستور distribute-list اعمال کنید. اگر prefix مشخص شود LIST یک prefix-list است. اگر prefix مشخص نشود، LIST نام access list است. in بسته‌های دریافتی را مشخص می‌کند و out بسته‌های خروجی را مشخص می‌کند. در نهایت اگر یک اینترفیس مشخص شود، در برابر اینترفیس خاص اعمال می‌شود.

دستور distribute-list می‌تواند برای فیلتر کردن مسیر RIP استفاده شود. distribute-list می‌تواند access-list ها را به یک اینترفیس انتخاب شده اعمال کند. ابتدا باید access-list مشخص شود. سپس نام access-list در دستور distribute-list استفاده می‌شود.

مثال:

router rip
 distribute-list private in eth0
!
access-list private permit 10.0.0.0/8
access-list private deny any
!

distribute-list می‌تواند هم به داده‌های ورودی و هم خروجی اعمال شود.

دستکاری Metric RIP

Metric RIP یک مقدار برای فاصله شبکه است. معمولاً ripd metric را زمانی که اطلاعات شبکه دریافت می‌شود افزایش می‌دهد. metric مسیرهای توزیع شده روی 1 تنظیم می‌شود.

default-metric (1-16)

این دستور مقدار metric پیش‌فرض را برای مسیرهای توزیع شده تغییر می‌دهد. مقدار پیش‌فرض 1 است. این دستور حتی اگر با redistribute connected توزیع شود، مسیر connected را تحت تأثیر قرار نمی‌دهد. برای تغییر مقدار metric مسیر connected، لطفاً از redistribute connected metric یا route-map استفاده کنید. offset-list نیز مسیرهای connected را تحت تأثیر قرار می‌دهد.

offset-list ACCESS-LIST (in|out)
offset-list ACCESS-LIST (in|out) IFNAME

مقدار metric را برای مسیرهای مطابق با access-list افزایش می‌دهد.

RIP distance

مقدار distance در daemon zebra استفاده می‌شود. distance پیش‌فرض RIP 120 است.

distance (1-255)

distance پیش‌فرض RIP را به مقدار مشخص شده تنظیم می‌کند.

distance (1-255) A.B.C.D/M

distance پیش‌فرض RIP را به مقدار مشخص شده تنظیم می‌کند زمانی که آدرس IP منبع مسیر با prefix مشخص شده مطابقت دارد.

distance (1-255) A.B.C.D/M ACCESS-LIST

distance پیش‌فرض RIP را به مقدار مشخص شده تنظیم می‌کند زمانی که آدرس IP منبع مسیر با prefix مشخص شده مطابقت دارد و access-list مشخص شده.

RIP route-map

استفاده از پشتیبانی route-map در ripd.

آرگومان اختیاری route-map MAP_NAME می‌تواند به هر دستور redistribute اضافه شود.

redistribute static [route-map MAP_NAME]
redistribute connected [route-map MAP_NAME]

Cisco route-map را قبل از اینکه مسیرها به جدول مسیر rip export شوند اعمال می‌کند. در پیاده‌سازی تست فعلی FRR، ripd route-map را بعد از اینکه مسیرها در جدول مسیر فهرست شده‌اند و قبل از اینکه مسیرها به یک اینترفیس اعلام شوند (چیزی شبیه فیلتر خروجی) اعمال می‌کند.

برای استفاده از قابلیت route-map، دستور route-map لازم است.

match interface WORD

این دستور با اینترفیس ورودی مطابقت دارد. نمادگذاری این match با Cisco متفاوت است. Cisco از لیستی از اینترفیس‌ها استفاده می‌کند - NAME1 NAME2 … NAMEN. Ripd فقط یک نام را مجاز می‌داند (شاید در آینده تغییر کند). بعد - Cisco به اینترفیسی اشاره می‌کند که next-hop مسیرها را شامل می‌شود (کمی شبیه دستور “ip next-hop” است). Ripd به اینترفیسی اشاره می‌کند که این مسیر به آن ارسال می‌شود. این تفاوت به این دلیل است که “next-hop” همان مسیرها که به اینترفیس‌های مختلف ارسال می‌شوند باید متفاوت باشند.

match ip address WORD
match ip address prefix-list WORD

مطابقت می‌کند اگر مقصد مسیر توسط access-list مجاز باشد.

match ip next-hop WORD
match ip next-hop prefix-list WORD

مطابقت می‌کند اگر next-hop مسیر (یعنی next-hop فهرست شده در جدول مسیر rip که با “show ip rip” نمایش داده می‌شود) توسط access-list مجاز باشد.

match metric (0-4294967295)

این دستور با مقدار metric به‌روزرسانی‌های RIP مطابقت دارد. برای سازگاری با پروتکل‌های دیگر محدوده metric به صورت (0-4294967295) نشان داده می‌شود. اما برای پروتکل RIP فقط محدوده مقدار (0-16) معنی دارد.

set ip next-hop A.B.C.D

این دستور مقدار next-hop را در پروتکل RIPv2 تنظیم می‌کند. این دستور RIPv1 را تحت تأثیر قرار نمی‌دهد زیرا فیلد next-hop در بسته وجود ندارد.

set metric (0-4294967295)

یک metric برای مسیر مطابق هنگام ارسال اعلامیه تنظیم می‌کند. محدوده مقدار metric برای سازگاری با پروتکل‌های دیگر بسیار بزرگ است. برای RIP، مقادیر metric معتبر از 1 تا 16 هستند.

ip rip authentication mode text

اینترفیس را با احراز هویت رمز عبور ساده RIPv2 تنظیم می‌کند.

ip rip authentication string STRING

RIP نسخه 2 احراز هویت متن ساده دارد. این دستور رشته احراز هویت را تنظیم می‌کند. رشته باید کوتاه‌تر از 16 کاراکتر باشد.

ip rip authentication key-chain KEY-CHAIN

زنجیره Keyed MD5 را مشخص می‌کند.

مثال:

key chain test
 key 1
  key-string test
!
interface eth1
 ip rip authentication mode md5
 ip rip authentication key-chain test
!

احراز هویت RIP

RIPv2 اجازه می‌دهد بسته‌ها از طریق یک رمز عبور متن ساده ناامن، که با بسته گنجانده شده است، یا از طریق یک HMAC مبتنی بر MD5 امن‌تر احراز هویت شوند. RIPv1 اصلاً نمی‌تواند احراز هویت شود، بنابراین زمانی که احراز هویت پیکربندی شده است ripd به‌روزرسانی‌های مسیریابی دریافت شده از طریق بسته‌های RIPv1 را رد می‌کند.

با این حال، مگر اینکه دریافت RIPv1 به طور کامل غیرفعال شود، بسته‌های REQUEST RIPv1 که دریافت می‌شوند، که روتر را برای اطلاعات مسیریابی query می‌کنند، هنوز توسط ripd honored می‌شوند و ripd به چنین بسته‌هایی پاسخ می‌دهد.

به طور خلاصه: فعال کردن احراز هویت از به‌روزرسانی مسیرها توسط روترهای راه‌دور غیرمجاز جلوگیری می‌کند، اما هنوز می‌تواند اجازه دهد مسیرها (یعنی کل جدول مسیریابی RIP) از راه دور query شوند، به طور بالقوه توسط هر کسی در اینترنت، از طریق RIPv1.

برای جلوگیری از چنین query کردن غیرمجاز مسیرها، RIPv1 را غیرفعال کنید.

ip rip authentication mode md5

اینترفیس را با احراز هویت RIPv2 MD5 تنظیم می‌کند.

تایمرهای RIP

timers basic UPDATE TIMEOUT GARBAGE

پروتکل RIP چندین تایمر دارد. کاربر می‌تواند مقادیر این تایمرها را با دستور timers basic پیکربندی کند.

تنظیمات پیش‌فرض برای تایمرها به شرح زیر است:

  • تایمر update 30 ثانیه است. هر update timer ثانیه، فرآیند RIP بیدار می‌شود تا یک پیام Response غیردرخواستی حاوی جدول مسیریابی کامل را به تمام روترهای RIP همسایه ارسال کند.

  • تایمر timeout 180 ثانیه است. با انقضای timeout، مسیر دیگر معتبر نیست؛ با این حال، برای مدت کوتاهی در جدول مسیریابی نگه داشته می‌شود تا همسایه‌ها مطلع شوند که مسیر حذف شده است.

  • تایمر garbage collect 120 ثانیه است. با انقضای تایمر garbage-collection، مسیر در نهایت از جدول مسیریابی حذف می‌شود.

دستور timers basic اجازه می‌دهد مقادیر پیش‌فرض تایمرهای فهرست شده در بالا تغییر کند.

نمایش اطلاعات RIP

show ip rip [vrf NAME]

مسیرهای RIP را نمایش می‌دهد.

این دستور تمام مسیرهای RIP را نمایش می‌دهد. برای مسیرهایی که از طریق RIP دریافت می‌شوند، این دستور زمان ارسال بسته و اطلاعات tag را نمایش می‌دهد. این دستور همچنین این اطلاعات را برای مسیرهای توزیع شده به RIP نمایش می‌دهد.

show ip rip [vrf NAME] status

این دستور وضعیت فعلی RIP را نمایش می‌دهد. شامل تایمر RIP، فیلتر کردن، نسخه، اینترفیس فعال RIP و اطلاعات همتا RIP است.

مثال خروجی:

ripd> show ip rip status
Routing Protocol is "rip"
  Sending updates every 30 seconds with +/-50%, next due in 35 seconds
  Timeout after 180 seconds, garbage collect after 120 seconds
  Outgoing update filter list for all interface is not set
  Incoming update filter list for all interface is not set
  Default redistribution metric is 1
  Redistributing: kernel connected
  Default version control: send version 2, receive version 2
    Interface  Send  Recv
  Routing for Networks:
    eth0
    eth1
    1.1.1.1
    203.181.89.241
  Routing Information Sources:
    Gateway    BadPackets BadRoutes  Distance Last Update

دستورات Debug RIP

debug rip events

رویدادهای RIP را نمایش می‌دهد. ارسال و دریافت بسته‌ها، تایمرها و تغییرات در اینترفیس‌ها رویدادهایی هستند که با ripd نمایش داده می‌شوند.

debug rip packet

اطلاعات دقیق در مورد بسته‌های RIP را نمایش می‌دهد. مبدأ و شماره پورت بسته و همچنین dump بسته نمایش داده می‌شود.

debug rip zebra

این دستور ارتباط بین ripd و zebra را نمایش می‌دهد. اطلاعات اصلی شامل اضافه و حذف مسیرها به kernel و ارسال و دریافت اطلاعات اینترفیس است.

show debugging rip

نمایش می‌دهد که کدام سطح debug RIP فعال است.

تمام اطلاعاتی که در حال حاضر برای debug ripd تنظیم شده است را نمایش می‌دهد.

سناریو ۲: پیکربندی RIP با احراز هویت

در این سناریو قصد داریم RIP را با احراز هویت MD5 پیکربندی کنیم:

soodar1(config)# key chain rip-auth
soodar1(config-keychain)# key 1
soodar1(config-keychain-key)# key-string MySecretKey123
soodar1(config-keychain-key)# exit
soodar1(config-keychain)# exit
soodar1(config)# interface ge0
soodar1(config-if)# ip rip authentication mode md5
soodar1(config-if)# ip rip authentication key-chain rip-auth
soodar1(config-if)# exit
soodar1(config)# interface ge1
soodar1(config-if)# ip rip authentication mode md5
soodar1(config-if)# ip rip authentication key-chain rip-auth

همین تنظیمات را باید در روترهای دیگر نیز اعمال کنید.

سناریو ۳: پیکربندی RIP با فیلتر کردن مسیرها

در این سناریو می‌خواهیم فقط مسیرهای خاصی را در RIP تبلیغ کنیم:

soodar1(config)# access-list rip-filter permit 10.0.0.0/8
soodar1(config)# access-list rip-filter deny any
soodar1(config)# router rip
soodar1(config-router)# distribute-list rip-filter out ge0
soodar1(config-router)# distribute-list rip-filter in ge1

سناریو ۴: پیکربندی RIP با تنظیمات پیشرفته

مثال پیکربندی کامل:

debug rip events
debug rip packet

router rip
 network 11.0.0.0/8
 network eth0
 route 10.0.0.0/8
 distribute-list private-only in eth0
 version 2
 timers basic 30 180 120
 default-metric 2

access-list private-only
 permit 10.0.0.0/8 any
 deny any any