هنگامی که این مطلب را میخوانید، ممکن است توسط خودم یا دیگران تغییراتی کرده باشد. بدین ترتیب مشکلات آن برطرف شده و قسمتهای جدیدی به آن اضافه میشوند. همواره میتوانید آخرین نسخه این مطلب را در دانشنامه BSD مطالعه کنید.
مقدمه
برای اینکه یک کامپیوتر به یک شبکه کامپیوتری متصل شود، باید علاوه بر کابل کشی و اتصال سختافزاری آن به شبکه، اندکی تنظیمات نرم افزاری هم بر روی آن انجام پذیرد. این تنظیمات شامل اختصاص دادن یک آدرس IP ، تنظیمات DNS ، مشخص کردن مسیریاب پیشفرض و … است. این موارد باید بر روی تک تک رایانه های متصل به شبکه تنظیم شود. در صورتیکه تعداد رایانه ها زیاد باشد، این مسئله میتواند بسیار دردناک شود. برای رفع این مشکل پروتکل DHCP معرفی شد. در این روش تمام این موارد بصورت خودکار بر روی کامپیوترهای متصل به شبکه تنظیم میشود.
DHCP چگونه کار میکند؟
برای استفاده از DHCP، باید یکی از کامپیوترهای شبکه خود را به عنوان DHCP Server انتخاب کنید. این DHCP Server مسئول پیکربندی تنظیمات بر روی تمام کامپیوترها خواهد بود. کلاینتها درخواستهای خود را به این DHCP Server ارسال کرده و تنظیمات را دریافت میکنند. کلاینتها معمولا درخواستهای خود را از طریق پورت ۶۸ بر روی پروتکل UDP ارسال میکنند. سرور هم معمولا پاسخ آنها را از طریق پورت ۶۷ پروتکل UDP میدهد.
البته تمام تنظیماتی که از طریق DHCP انجام میشود، به صورت موقت بوده و در حقیقت کلاینتها این تنظیمات را «اجاره» میکنند. کلاینتها باید قبل از پایان یافتن مدت اجاره، با DHCP سرور ارتباط برقرار کرده و تنظیمات جدید را مجددا اجاره کنند.
برای راه اندازی DHCP هم باید کلاینتها و هم سرور را پیکربندی کنید.
تنظیم کلاینتها
برای تنظیم کلاینتها میتوانید از برنامه sysinstall استفاده کنید. وقتی که یک کارت شبکه را به کمک sysinstall پیکربندی میکنید، دومین سوالی که از شما پرسیده میشود این است که «آیا میخواهید این کارت شبکه از طریق DHCP پیکربندی شود؟» در اینجا میتوانید گزینه yes را انتخاب کرده تا این کار صورت پذیرد. برنامه sysinstall خود از برنامه dhclient استفاده میکند.
برای اینکه سیستم شما در هنگاه راهاندازی از DHCP استفاده کند، باید دو کار را انجام دهید:
- مطمئن شوید که هسته FreeBSD با گزینه bpf device کامپایل شده باشد. برای انجام این کار کافیست خط bpf device را به فایل پیکربندی هسته اضافه کرده و آن را کامپایل کنید.
این گزینه از قبل در هسته GENERIC (که هسته پیشفرض سیستم است) تعبیه شده است. پس اگر از هسته GENERIC استفاده میکنید نیازی به انجام این کار نیست.
- بصورت پیشفرض، تنظیمات DHCP در پسزمینه و بصورت ‘’غیر همزمان’’ انجام میشود. این حرف به این معنی است که سایر اسکریپتهای آغازین، منتظر اتمام مرحله DHCP نمانده و همچنان به اجرای خود ادامه میدهند که این باعث میشود سیستم با سرعت بیشتری راهاندازی شود. تا زمانیکه DHCP Server به سرعت به درخواستها پاسخ میدهد، مشکلی پیش نخواهد آمد و تنظیم DHCP بسرعت انجام میگیرد. با این حال ممکن است که در بعضی سیستم ها DHCP مدت زیادی طول بکشد. قبل از اتمام DHCP، هر گونه کوششی برای اجرای سرویسهای شبکه شکست خواهد خورد. اجرای DHCP بصورت ‘’همزمان’’ این مشکل را حل خواهد کرد. در این حالت، راهاندازی سیستم تا زمانیکه مرحله DHCP بپایان نرسیده متوقف میشود.
برای اتصال به DHCP Server در حالتی که دیگر سرویسها به اجرای خود ادامه میدهند (حالت غیر همزمان) از مقدار ‘’DHCP’’ در فایل /etc/rc.conf استفاده کنید:
ifconfig_fxp0=\"DHCP\"
برای توقف راهاندازی سیستم تا اتمام مرحله DHCP (یا همان حالت همزمان)، از مقدار “SYNCDHCP” استفاده کنید:
ifconfig_fxp0=\"SYNCDHCP\"
اگر برنامه dhclient در مسیر دیگری غیر از مسیر پیشفرض قرار دارد، یا همچنین اگر میخواهید این برنامه را با گزینههای دلخواه خود اجرا کنید، میتوانید بصورت زیر عمل کنید:
dhclient_program=\"/sbin/dhclient\" dhclient_flags=\"\"
نصب و پیکربندی DHCP Server
در ادامه خواهیم دید که چگونه میتوان FreeBSD را طوری پیکربندی کرد که به عنوان یک DHCP Server عمل کند. پیاده سازی های مختلفی از پروتکل DHCP وجود دارد که ما پیاده سازی ISC را بررسی خواهیم کرد.
برای اینکه FreeBSD را طوری پیکربندی کنیم که بعنوان یک DHCP Server عمل کند، باید مطمئن شویم که هسته از دستگاه bpf پشتیبانی میکند. برای انجام این کار خط زیر را به فایل پیکربندی کرنل اضافه کرده و آن را مجددا کامپایل کنید:
device bpf
این قابلیت در هسته GENERIC (که هسته پیشفرض سیستم هست) فعال است. پس اگر از این هسته استفاده میکنید، نیازی به انجام این کار نخواهید داشت.
در مرحله باید باید سرویس DHCP ا نصب کنید:
cd /usr/ports/net/isc-dhcp42-server make install clean
در مرحله بعد باید فایل dhcpd.conf را ویرایش و پیکربندی کنید. این فایل در مسیر /usr/local/etc/dhcpd.conf.sample قرار دارد. شما باید یک نسخه از این فایل را در مسیر /usr/local/etc/dhcpd.conf کپی کنید:
cp /usr/local/etc/dhcpd.conf.sample /usr/local/etc/dhcpd.conf
بکمک مثال راحتتر میتوان فایل dhcpd.conf را تشریح کرد:
option domain-name \"example.com\";(1) option domain-name-servers 192.168.4.100;(2) option subnet-mask 255.255.255.0;(3) default-lease-time 3600;(4) max-lease-time 86400;(5) ddns-update-style none;(6) subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.129 192.168.4.254;(7) option routers 192.168.4.1;(8) } host mailhost { hardware ethernet 02:03:04:05:06:07;(9) fixed-address mailhost.example.com;(10) }
(1) دامنه محلی را مشخص میکند. برای اطلاعات بیشتر resolv.conf(5) را ببینید.
(۲) DNS Server هایی را مشخص میکند که کلاینتها باید از آنها استفاده کنند. اگر میخواهید چند DNS Server را مشخص کنید، میتوانید آنها را توسط (,) از هم جدا کنید. برای اطلاعات بیشتر resolv.conf(5) را ببینید.
(۳) این خط netmsak مورد نظر ا مشخص میکند.
(۴) ممکن است یک کلاینت بخواهد تنظیمات را برای مدت زمان مشخصی اجاره کند که در این صورت باید بهمراه درخواست خود این مدت زمان را هم اعلام کند. اگر کلاینت هیچ زمانی را مشخص نکرده بود، از مقداری که جلوی default-lease-time نوشته شده استفاده میشود. این زمان بر حسب ثانیه است.
(۵) این خط مشخص کننده بیشترین مدت زمانی است که یک کلاینت مجاز به اجاره تنظیمات است.
(۶) این خط مشخص میکند که در هنگام اجاره دادن یا پس گرفتن یک آدرس، DNS هم باید بروزرسانی شود یا نه. این خط در پیادهسازی ISC اجباری است.
(۷) این خط یک محدوده آدرس را مشخص میکند. به هر کلاینت یک آدرس از این محدوده اختصاص مییابد.
(۸) مسیریاب پیشفرضی که کلاینتها باید استفاده کنند را مشخص میکند.
(۹) این خط آدرس سختافزاری یا همان Mac Address یک کلاینت را مشخص میکند. بدین ترتیب میتوان یک کلاینت را شناسایی کرد.
(۱۰) اگر میخواهید که یک کلاینت آدرس IP ثابتی را داشته باشد، میتوانید این آدرس را در جلوی fixed-address بنویسید. کلاینت توسط Mac Address آن شناسایی میشود.
بعد از اینکه dhcpd را پیکربندی کردید، خطوط زیر را به فایل /etc/rc.conf اضافه کنید تا این سرویس در هنگام راه اندازی سیستم بصورت خودکار اجرا شود:
dhcpd_enable=\"YES\" dhcpd_ifaces=\"dc0\"
شما باید dc0 را با کارت شبکه مورد نظر خود جایگزین کنید. dhcpd بر روی این کارت شبکه به درخواستها گوش میدهد.