مقدمه

برای اینکه یک کامپیوتر به یک شبکه کامپیوتری متصل شود، باید علاوه بر کابل کشی و اتصال سخت‌افزاری آن به شبکه، اندکی تنظیمات نرم‌افزاری هم بر روی آن انجام پذیرد. این تنظیمات شامل اختصاص دادن یک آدرس 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"
نکته:
شما باید fxp0 را با نام کارت شبکه خود جایگزین کنید.

اگر برنامه 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)
}

(۱) دامنه محلی را مشخص می‌کند. برای اطلاعات بیشتر ‎resolv.conf را ببینید.

(۲) DNS Server هایی را مشخص می‌کند که کلاینت ها باید از آنها استفاده کنند. اگر می خواهید چند DNS Server را مشخص کنید، می توانید آنها را توسط (,) از هم جدا کنید. برای اطلاعات بیشتر ‎resolv.conf‎ را ببینید.

(۳) این خط 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 بر روی این کارت شبکه به درخواست ها گوش می‌دهد.