معرفی DHCP و پیاده سازی آن در سیسکو
DHCP یکی از پروتکلهای موجود در لایهی کاربرد (Application) شبکه است که وظیفهی تخصیص آدرس IP خودکار به کلاینتهای موجود در شبکه را بر عهده دارد، DHCP از عبارت Dynamic Host Configuration Protocol تشکیل شده و همانطور که از نامش پیداست میزبانهای موجود در شبکه را به صورت پویا (داینامیک) آدرسدهی و پیکربندی میکند، در ادامهی این آموزش با همیار آیتی همراه باشید تا به زبان ساده با این پروتکل و نحوهی عملکرد آن آشنا شویم.
همانطور که میدانیم تمام دستگاههایی که در یک شبکه هستند الزاما باید دارای آدرسی جهت شناسایی باشند که آن را آدرس IP مینامیم، اما تا به حال به این نکته دقت کردهاید که چگونه دستگاهها به محض روشن شدن به صورت خودکار یک آیپی غیر تکراری و یکتا دریافت میکنند؟ همانطور که در ابتدای آموزش اشاره کردیم سرور DHCP این آیپی را به تکتک دستگاهها اختصاص میدهد.
نحوهی عملکرد DHCP به زبان ساده
سرور DHCP یک رنج آیپی در اختیار دارد که میتواند از بین آنها اقدام به تخصیص آدرس آیپی به کلاینتهای موجود در شبکه کند، به عنوان مثال رنج آدرس ۱ تا ۲۵ در اختیار DHCP قرار میگیرد (این اعداد کاملا فرضی بوده و آدرس آیپی نیستند)
حال دستگاهی در شبکه روشن میشود که به یک آدرس آیپی احتیاج دارد، این دستگاه از وجود سرور DHCP در این شبکه بیخبر است، به همین علت یک بسته تحت عنوان (Discovery) را به صورت Broadcast روی شبکه ارسال میکند (یعنی این بسته را برای تمام میزبانهای موجود در شبکه میفرستد)
در مرحلهی بعد سرور DHCP به عنوان پاسخ بستهی (Offer) را ارسال میکند، این بسته شامل IP و Default Gateway خواهد بود و به دست ماشین اول (دستگاهی که IP درخواست کرده بود) میرسد.
سپس ماشین اول با دریافت این بسته اقدام به بررسی آن میکند و درصورتی که امکان استفاده از آن IP را داشت یک بسته تحت عنوان (Request) برای سرور دیاچسیپی ارسال میکند و در نهایت سرور نیز با ارسال یک تاییدیه (ACK) به ماشین اول این آیپی را به آن تخصیص میدهد.
هنگامی که یک IP توسط سرور DHCP به یک میزبان تحویل داده میشود، از لیست آیپیهای موجود حذف شده و تا مدت زمان خاصی که اصطلاحا آن را Lease duration مینامند در اختیار آن میزبان خواهد بود، در صورتی که این دستگاه برای مدت زمان بیشتری به آیپی احتیاج داشته باشد میتواند درخواست تمدید ارسال کرده و از انقضای زمان پس گرفتن آدرس آیپی جلوگیری کند، در غیر اینصورت DHCP این آیپی را پس گرفته و میتواند آن را در اختیار ماشین دیگری قرار دهد.
مزایا و معایب استفاده از سرور DHCP
از جمله مزایای به کارگیری از این سرویس عبارتند از:
- تخصیص آیپی خودکار به کلاینتها
- سرعت بالای تخصیص آیپیها
- کاهش تداخل میان آیپیها
- همچنین به کارگیری این سرویس برای مکانهایی که افراد مختلفی در آن حضور داشته و ثابت نیستند بسیار عالیست، اما در کنار تمام مزایایی که دارد میتوند
معایبی نیز به همراه داشته باشد، به عنوان مثال:
- عدم وجود یک آیپی ثابت و همیشگی برای کلاینتها
- افزایش احتمال حملهی DHCP Spoofing به شبکه
- هزینهی تهیه و نگهداری سرور مناسب برای DHCP
هرچند این سرویس تا حد بسیار زیادی از بروز تداخل IP جلوگیری میکند، اما این احتمال وجود دارد که خود DHCP نیز تحت شرایطی خاص (به عنوان مثال تنظیم و پیکربندی نادرست خود سرور) باعث بروز IP Conflict (تداخل آدرس آیپی) در شبکه شود، در چنین شرایطی کافیست یکبار دستگاه کلاینت را خاموش و مجددا روشن کنید تا این مشکل برطرف شود (هرچند اگر این کار را نیز انجام ندهید DHCP میتواند به صورت خودکار آن را برطرف کند) اما اگر این مشکل همچنان با ریاستارت حل نشد باید به فکر تعمیر سرور DHCP خود باشید!
ساختار و معماری پیامهای پروتکل DHCP
به دلیل نیاز به سرعت بالا، پیامهای این سرویس در قالب دیتاگرامهای UDP حمل میشوند، سرور از پورت ۶۷ و کلاینت از پورت ۶۸ برای ارسال و دریافت پیامها استفاده میکنند، در حقیقت این پروتکل جایگزینی برای پروتکل قدیمی BOOTP بود، پروتکل BOOTP امکان جمعآوری آدرس آیپیهای تخصیص داده شده را نداشت و به همین دلیل بعدها DHCP جایگزین آن شد، شما میتوانید ساختار بستههای DHCP را در تصویر زیر به خوبی مشاهده کنید.
در تصویر بالا:
- OpCode نشاندهندهی نوع پیام است (درخواست یا پاسخ)
- Hardware Type نوع آدرس سختافزاری موجود در Client Hardware Address را مشخص میکند.
- Hardware Length طول آدرس سختافزاری موجود در Client Hardware Address را مشخص میکند.
- Hops تعداد روترهای میان سرور و کلاینت را مشخص میکند.
- Transaction ID نشاندهندهی شناسهی یکتای فرایند است.
- Seconds Elapsed مدت زمان گذشته از شروع تخصیص آیپی را نشان میدهد.
- Flags فلگهای بسته هستند.
- Client IP Address آیپی آدرس کلاینت را مشخص میکند (زمان دریافت آیپی مجدد)
- Your IP Address آیپی فعلی کلاینت شما را نشان میدهد (آیپی واگذار شده به شما)
- Server IP Address آدرس آیپی سرور بعدی را تعیین میکند.
- Gateway IP Address دربردارندهی آدرس آیپی واسطههاست (در صورت نیاز)
- Client Hardware Address حاوی آدرس سختافزاری کلاینت است.
- Server Host Name شامل نام سرور DHCP است.
- Boot File دربردارندهی فایل راهانداز برای کلاینتهای بدون دیسک.
- Option نیز فیلدی است که میتواند دربردارندهی گزینههای اختیاری برای بستهی DHCP باشد.
در ضمن اندازهی بستههای DHCP با توجه به طول فیلدها حدودا میتواند به اندازهی ۳۴۰ بایت باشد.
DHCP Relay Agent چیست و چه کاربردی دارد؟
هر کامپیوتری که به شبکه وصل شود اقدام به گرفتن آدرس تعریف شده درون Scope می کند ولی موقعیت هایی به وجود می آید که ما را مجبور به پیاده سازی راه هایی می کنند که با وجود کاربردی بودنشان، ممکن است گران تمام شوند. یکی از مشکلات زمانی ایجاد می شود که بخواهیم بیشتر از یک Scope برای شبکه خود تعریف کنیم و بخواهیم client و سرورهای DHCP را در subnet های مختلفی قرار دهیم. از آنجایی که درخواست های مربوط به DHCP که مربوط به ۴ حالت اصلی DISCOVER , OFFER , REQUEST , ACK/NACK هستند همگی به دلایل کاملا فنی و تکنیکی دارای نوع Broadcast هستند و همچنین یک Router به هیچ وجه درخواست های Broadcast رو از خودش عبور نمیدهد پس اگر کامپیوتری در یک Subnet ای باشد که درآن یک DHCP Server نیست و در Subnet کناری آن DHCP Server باشد، درخواست Broadcast آن از همان روتر دور ریخته می شود.
ایجاد و توسعه یک DHCP در شبکه یک بخشی آسان است زمانی که بیشتر از یک Subnet در شبکه داریم مدیریت یه کم پیچیده می شود و این به آن دلیل است که DHCP پیغام های همه پخشی را دریافت می کند که نمی تواند از روتر عبور کند. چندین راه برای مدیریت این وضعیت وجود دارد یکی از آن ها قرار دادن DHCP server در هر بخش از شبکه است. که قطعآ برای یک سازمان که تعداد بخش های آن زیاد است هزینه زیاد و مدیرت سنگینی برای مدیر آن شبکه خواهد داشت و در واقع از این راه منابع زیادی را از دست داده ایم. راه دیگر ایجاد DHCP Relay Agent است. DHCP relay agent پروتکلی برای انتقال پیام ها بین clientهای DHCP و سرور DHCP است که در شبکه هایی با IP های متفاوت قرار دارند. در واقع برای هر بخش شبکه که client های DHCP را شامل می شود به سرور DHCP یا یک کامپیوتر که مانند DHCP Relay Agent عمل می کند نیاز است. که این امر از دو راه میسر می شود و هر کدام مزایا و معایب خود را دارند.
۱- اگر یک کامپیوتر در هر Subnet وجود داشته باشه که به هنگام شنیدن درخواست IP این درخواست را بگیرد و نوع آن را تبدیل Unicast کند و سپس آن را به روتر ارسال کند این مشکل حل می شود. دستگاهی که درsubnet مستقر شده و کار تبدیل درخواست های Broadcast کلاینت ها موجود در شبکه و تبدیل آن به درخواست های unicast را برعهده دارد Relay Agent DHCP نامیده می شود.
۲- در راه حل قبلی باز هم مشکل نصب یک سیستم عامل Server درون هر Subnet برطرف نمی شود بلکه نیاز به نصب چندین DHCP Server از بین برده شد. در راه حل دیگر روترها می توانند به گونه ای تنظیم شوند که پیغام های Bootstrap Protocol DHCP BOORP را از خود عبور دهند. که در این حالت روتر BOOTP Relay نامیده می شود. BOOTP Relay Agent بسته را مورد بررسی قرار می دهد و ضمن ایجاد تغییراتی در بسته آن را به DHCP Server ارسال می کند. اما تعدادی از روترها این ویژگی BOOTP Relay را پشتیبانی نمی کنند. که در این حالت می توان از پیکربندی یک سیستم با ویندوز سرور ۲۰۰۰ RRAS و نصب DHCP Relay Agent در این سیستم اقدام کرد.
مراقب اصطلاحات باشد! Agent ،relay است نه یک Forwarder
مطمئن باشید که تفاوت بین DHCP//BOOTP Relay Agent و روتری که به عنوان BOOTP forwarder عمل می کند تشخیص داده باشد. به یاد داشته باشید که forwarder پیغام های Broadcast را از روتر مستقیمآ عبور می دهد. در حالیکه DHCP Relay Agent تغییراتی در پیغام های همه پخشی DHCP می دهد و آن را به یک سرور DHCP ارسال می کند.
سناریوی راه اندازی DHCP بر روی روتر سیسکو
در این سناریوی ساده قرار است روتر سیسکوی ما نقش DHCP را داشته باشد و به پی سی های ما IP بدهد. برای شروع تنظیمات اولیه روتر به صورت زیر می باشد.
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
حال یک pool با نام nextadmin ایجاد می کنیم و رنج شبکه ۱۹۲٫۱۶۸٫۱٫۰ را برای آن وارد می کنیم تا در این رنج آی پی به کاربران داده شود و سپس دی ان اس سرور ۸٫۸٫۸٫۸ و ۱٫۱٫۱٫۱ را برای بحث DNS کاربران وارد می کنیم، و در آخر نیز با دستور default-router و زدن ای پی ۱۹۲٫۱۶۸٫۱٫۱ به کاربران اطلاع می دهیم که Gateway آن ها روتر ۱۹۲٫۱۶۸٫۱٫۱ می باشد.
Router(config)#ip dhcp pool nextadmin
Router(dhcp-config)#network 192.168.1.0 255.255.255.0
Router(dhcp-config)#dns-server 8.8.8.8 1.1.1.1
Router(dhcp-config)#default-router 192.168.1.1
در صورتی که نیاز باشد یک بخش از آی پی ها را به کاربران به صورت DHCP ندهیم می توانیم آن رنج را excluded کنیم، برای این کار از دستور زیر استفاده می کنیم که در اینجا از ۱۹۲٫۱۶۸٫۱٫۱ تا ۱۹۲٫۱۶۸٫۱٫۱۰ به کاربران داده نمی شود.
Router(config)#ip dhcp excluded-address 192.168.1.1 192.168.1.10
با استفاده از دستور زیر شما می توانید تمام ای پی هایی که DHCP روتر داده است را ببینید.
Router#show ip dhcp binding
show ip dhcp binding
show ip dhcp binding
همانطور که در عکس بالا نیز مشخص است DHCP ای پی ها را در یک بازه زمانی که با آن Lease Time گفته می شود به کاربران می دهد که بر اساس شرایط شبکه شما می تواند این تایم بلند و یا دائمی باشد و یا یک بازی چند ساعته و حتی چند دقیقه ای، برای تنظیم آن نیز به صورت زیر عمل می کنیم. ما در این جا میخواهیم در بازه ۰ روز و ۲ ساعت و ۳۰ دقیقه ای پی ها را به کاربران بدهیم.
Router(dhcp-config)#lease 0 2 30
در صورتی که میخواهید ای پی ها به صورت دائم و بدون expir شدن به کاربران داده شود از دستور زیر استفاده میکنیم. (بهتر است از این دستور بجز موارد خاص استفاده نکنید زیرا باعث می شود Pool شما از ای پی هایی که می تواند بدهد خالی شود)
Router(dhcp-config)#lease infinite
در بالای همین مطلب توضیح دادیم که DHCP Relay Agent چیست و حالا می خواهیم آن را با سناریویی پیاده سازی کنیم.
ما یک سرور DHCP ویندوزی داریم که ای پی خودش ۱۹۲٫۱۶۸٫۲٫۲ می باشد ولی یک Pool برای آن تعریف کرده ایم که از ۱۹۲٫۱۶۸٫۱٫۵۰ تا ۱۹۲٫۱۶۸٫۱٫۱۰۰ ای پی بدهد.
روتر ما دو اینترفیس دارد که قرار است شبکه ۱۹۲٫۱۶۸٫۱٫۰ ما از DHCP ما ای پی دریافت کند که تنظیمات پیش فرض روتر ما به صورت زیر می باشد.
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
برای این که شبکه ما بتواند درخواست خودش را برای DHCP ارسال کند و هر کاربر ای پی خودش را بگیرد ما باید بر روی اینترفیسی که سمت کاربران ما قرار دارد بگویم که اگر درخواست DHCP از سمت کاربران آمد آن را برای سرور ۱۹۲٫۱۶۸٫۲٫۲ ارسال کند و اجازه عبور برادکست را به آن درخواست ها بدهد، که این کار را با دستور زیر انجام می دهیم.
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip helper-address 192.168.2.2
نکته: چون درخواست ها از سمت ۱۹۲٫۱۶۸٫۱٫۰ روتر برای DHCP ارسال شده است، خود DHCP متوجه می شود که باید IP از رنج ۱۹۲٫۱۶۸٫۱٫۰ بدهد.
منبع مقاله: سایت https://nextadmin.net/