dhcpd.leases(5) File Formats Manual dhcpd.leases(5)

dhcpd.leases - پایگاه‌داده اجاره‌های سرور DHCP

سرور DHCP کنسرسیوم سامانه‌های اینترنتی (ISC) پایگاه‌داده‌ای پایدار از اجاره‌های اختصاص‌یافته را نگهداری می‌کند. این پایگاه‌داده یک فایل اسکی (ASCII) آزاد‌قالب شامل مجموعه‌ای از اعلان‌های اجاره است. هر بار که یک اجاره به دست می‌آید، تمدید یا آزاد می‌شود، مقدار جدید آن در انتهای فایل اجاره‌ها ثبت می‌گردد؛ بنابراین اگر بیش از یک اعلان برای یک اجاره مشخص وجود داشته باشد، آخرین مورد موجود در فایل، حالت جاری و معتبر است.

هنگامی که dhcpd برای نخستین بار نصب می‌شود، هیچ پایگاه‌داده اجاره‌ای وجود ندارد. با این حال، dhcpd نیازمند این است که پیش از شروع به کار، پایگاه‌داده اجاره وجود داشته باشد. برای ساخت پایگاه‌داده اولیه اجاره‌ها، کافی است یک فایل خالی با نام DBDIR/dhcpd.leases ایجاد کنید. این کار با دستور زیر قابل انجام است:

touch DBDIR/dhcpd.leases

برای جلوگیری از رشد بی‌رویه و نامحدود پایگاه‌داده اجاره‌ها، این فایل هر از گاهی بازنویسی می‌شود. ابتدا یک پایگاه‌داده موقت اجاره ایجاد شده و تمام اجاره‌های شناخته‌شده در آن ثبت می‌شوند. سپس پایگاه‌داده قدیمی اجاره‌ها به DBDIR/dhcpd.leases~ تغییر نام می‌یابد. در پایان، پایگاه‌داده تازه‌نوشته‌شده جایگزین آن می‌گردد.

برای پردازش پیام‌های DHCPv4 و DHCPv6، باید دو نمونه مجزا از فرایند dhcpd را اجرا کنید. هر یک از این نمونه‌ها به فایل اجاره اختصاصی خود نیاز دارند. می‌توانید از گزینه -lf در خط فرمان سرور برای تعیین نام فایل اجاره متفاوت برای یک یا هر دو سرور استفاده کنید.

توصیفات اجاره در قالبی ذخیره می‌شوند که با همان تجزیه‌کننده نزولی بازگشتی (recursive descent parser) مورد استفاده برای خواندن فایل‌های dhcpd.conf(5) و dhclient.conf(5) تجزیه می‌گردد. فایل‌های اجاره می‌توانند حاوی اعلان‌های اجاره، و همچنین اعلان‌های گروه (group) و زیرگروه (subgroup)، اعلان‌های میزبان (host) و اعلان‌های وضعیت جایگزینی پس از خرابی (failover) باشند. اعلان‌های گروه، زیرگروه و میزبان برای ثبت شیءهای ایجادشده از طریق پروتکل OMAPI به کار می‌روند.

فایل اجاره دارای ساختاری مبتنی بر گزارش رویداد (log-structured) است؛ هر بار که اجاره‌ای تغییر کند، محتوای آن اجاره به انتهای فایل افزوده می‌شود. این بدان معناست که وجود دو یا چند اعلان از یک اجاره مشخص در فایل به طور هم‌زمان کاملاً محتمل و طبیعی است. در این حالت، نمونه‌ای از آن اجاره مشخص که در آخر فایل قرار دارد، نمونه معتبر و دارای اثر است.

اعلان‌های گروه، زیرگروه و میزبان در فایل اجاره به همین شیوه مدیریت می‌شوند، با این تفاوت که اگر هر یک از این شیءها حذف شوند، یک علامت حذف (rubout) در فایل اجاره نوشته می‌شود. این علامت دقیقاً همان اعلان است که عبارت { deleted; } در محدوده آن قرار گرفته است. هنگامی که فایل اجاره بازنویسی می‌شود، تمام علامت‌های حذف قابل‌حذف پاکسازی خواهند شد. اگر اعلانی در فایل dhcpd.conf حذف شود، علامت حذف آن هرگز از فایل dhcpd.leases حذف نخواهد شد.

اگرچه قالب فایل‌های اجاره برای DHCPv4 و DHCPv6 متفاوت است، اما دستورها و ساختارهای مشترک بسیاری میان آن‌ها وجود دارد. این بخش به توصیف دستورهای مشترک می‌پردازد، در حالی که بخش‌های بعدی دستورهای اختصاصی هر پروتکل را توضیح می‌دهند.

تاریخ‌ها (Dates)

یک date بسته به مقدار پیکربندی‌شده برای پارامتر db-time-format به دو روش مشخص می‌شود. اگر روی default تنظیم شده باشد، فیلدهای date به صورت زیر نمایش داده می‌شوند:

weekday year/month/day hour:minute:second

روز هفته (weekday) برای تسهیل خواندن زمان انقضای اجاره توسط انسان قرار داده شده است؛ این مقدار به صورت عددی بین صفر تا شش مشخص می‌شود که صفر نمایانگر یکشنبه است. روز هفته در ورودی نادیده گرفته می‌شود. سال همراه با سده مشخص می‌شود، بنابراین به جز در اجاره‌های بسیار طولانی، معمولاً چهار رقمی است. ماه به صورت عددی با شروع از ۱ برای ژانویه مشخص می‌شود. روز ماه نیز به همین ترتیب با شروع از ۱ تعیین می‌گردد. ساعت عددی بین ۰ تا ۲۳، دقیقه عددی بین ۰ تا ۵۹، و ثانیه نیز عددی بین ۰ تا ۵۹ است.

زمان‌های اجاره بر حسب ساعت هماهنگ جهانی (UTC) مشخص می‌شوند، نه بر حسب منطقه زمانی محلی. در هیچ کجای دنیا زمان ثبت‌شده در اجاره الزاماً با ساعت دیواری محلی یکسان نیست. در بیشتر سیستم‌های یونیکس، می‌توانید زمان کنونی را بر حسب UTC با وارد کردن date -u مشاهده کنید.

اگر db-time-format روی local پیکربندی شده باشد، فیلدهای date به صورت زیر خواهند بود:


epoch <seconds-since-epoch>; # <day-name> <month-name> <day-number> <hours>:<minutes>:<seconds> <year>

مقدار seconds-since-epoch مطابق با ساعت محلی سیستم (که اغلب «زمان یونیکس» نامیده می‌شود) است. نماد # یک توضیح (کامنت) ارائه می‌دهد که نشان می‌دهد بر اساس منطقه زمانی پیکربندی‌شده سیستم در زمان ثبت مقدار، این چه زمانی بوده است. این مقدار صرفاً برای خواندن توسط انسان ارائه شده است.

اگر یک اجاره هرگز منقضی نشود، date به‌جای یک تاریخ واقعی، never خواهد بود.

متغیرهای عمومی (General Variables)

به عنوان بخشی از پردازش یک اجاره، ممکن است اطلاعاتی به ساختار اجاره پیوست شود؛ برای نمونه، اطلاعات DDNS یا متغیری که در فایل پیکربندی مشخص کرده‌اید. برخی از این‌ها، مانند اطلاعات DDNS، در ادامه توضیحات مشخصی دارند. برای موارد دیگر، مانند مواردی که خودتان تعریف می‌کنید، یک خط عمومی به شکل زیر گنجانده خواهد شد:

set variable = value;

دستور set مقدار یک متغیر را روی اجاره تنظیم می‌کند. برای اطلاعات عمومی درباره متغیرها، به صفحه راهنمای dhcp-eval(5) مراجعه کنید.

متغیرهای DDNS (DDNS Variables)

متغیرهای ddns-text و ddns-dhcid

این متغیرها برای ثبت مقدار رکورد شناسایی کلاینت در زمانی که سرور DNS را برای یک اجاره مشخص به‌روزرسانی کرده است، استفاده می‌شوند. رکورد متنی (text) با شیوه به‌روزرسانی DDNS موقت (interim) به کار می‌رود، در حالی که رکورد dhcid برای شیوه به‌روزرسانی DDNS استاندارد استفاده می‌شود.

متغیر ddns-fwd-name

این متغیر مقداری از نام را ثبت می‌کند که در صورت موفقیت‌آمیز بودن به‌روزرسانی DDNS توسط سرور، برای به‌روزرسانی رکورد A کلاینت استفاده شده است. سرور همچنین ممکن است از این نام برای به‌روزرسانی رکورد PTR کلاینت استفاده کرده باشد.

متغیر ddns-client-fqdn

اگر سرور طوری پیکربندی شده باشد که هم از شیوه به‌روزرسانی DDNS موقت یا استاندارد استفاده کند و هم به کلاینت‌ها اجازه دهد FQDN خود را به‌روزرسانی کنند، در این صورت اگر کلاینت در واقع FQDN خود را به‌روز کرده باشد، متغیر ddns-client-fqdn نامی را ثبت می‌کند که کلاینت اعلام کرده در حال استفاده از آن است. این نامی است که سرور در این حالت برای به‌روزرسانی رکورد PTR کلاینت استفاده کرده است.

متغیر ddns-rev-name

اگر سرور با موفقیت رکورد PTR کلاینت را به‌روزرسانی کند، این متغیر نامی را ثبت خواهد کرد که سرور DHCP برای رکورد PTR استفاده کرده است. نامی که رکورد PTR به آن اشاره می‌کند، یا ddns-fwd-name خواهد بود یا ddns-client-fqdn.

دستورهای قابل‌اجرا (Executable Statements)

on events { statements... } دستور on فهرستی از گزاره‌ها را برای اجرا در هنگام وقوع رویدادی مشخص ثبت می‌کند. رویدادهای ممکنی که می‌توانند برای یک اجاره فعال رخ دهند، release و expiry هستند. می‌توان بیش از یک رویداد را مشخص کرد؛ در این حالت، رویدادها با نویسه «|» از یکدیگر جدا می‌شوند.

دستور authoring-byte-order

authoring-byte-order [ big-endian | little-endian ] ;

این دستور به‌طور خودکار توسط سرور به بالای فایل‌های اجاره جدید افزوده می‌شود. این عبارت ترتیب بایت داخلی (internal byte order) سرور را نشان می‌دهد. این ویژگی به فایل‌های اجاره ایجادشده در سروری با یک شکل از ترتیب بایت امکان می‌دهد توسط سروری با ترتیبی متفاوت خوانده شوند. با فایل‌های اجاره‌ای که فاقد این ورودی هستند، طوری رفتار می‌شود که گویی دارای همان ترتیب بایت سرور خواننده هستند. اگر در حال انتقال فایل‌های اجاره تولیدشده توسط سروری هستید که قدیمی‌تر از این دستور است و ترتیب بایتی متفاوت از سرور مقصد شما دارد، می‌توانید این دستور را به صورت دستی اضافه کنید. این دستور باید پیش از هر ورودی اجاره قرار گیرد. مقادیر معتبر برای این پارامتر little-endian و big-endian هستند.

lease ip-address { statements... }

هر اعلان اجاره شامل تک نشانی IP است که به کلاینت اجاره داده شده است. گزاره‌های درون آکولاد مدت زمان اجاره و این‌که به چه کسی اختصاص داده شده است را مشخص می‌کنند.

starts date;
ends date;
tstp date;
tsfp date;
atsfp date;
cltt date;

زمان شروع و پایان یک اجاره با استفاده از دستورهای starts و ends ثبت می‌شود. دستور tstp در صورتی وجود دارد که پروتکل جایگزینی پس از خرابی (failover) به کار گرفته شده باشد، و نشان می‌دهد که چه زمانی به گره مقابل (peer) اعلام شده که اجاره منقضی می‌شود. دستور tsfp نیز در صورت استفاده از پروتکل failover وجود دارد و زمان انقضای اجاره را که توسط گره مقابل تأیید شده است نشان می‌دهد. دستور atsfp زمان واقعی ارسال‌شده از شریک failover است. دستور cltt آخرین زمان تراکنش کلاینت (client's last transaction time) است.

توضیحات مربوط به تاریخ‌ها را در بخش ساختارهای مشترک ببینید.

hardware hardware-type mac-address;

دستور hardware نشانی MAC رابط شبکه‌ای را که اجاره روی آن استفاده خواهد شد، ثبت می‌کند. این نشانی به صورت مجموعه‌ای از اکتت‌های هگزادسیمال که با دونقطه از هم جدا شده‌اند مشخص می‌شود.

uid client-identifier;

دستور uid شناسه کلاینت (client identifier) را که توسط کلاینت برای دریافت اجاره استفاده شده ثبت می‌کند. کلاینت‌ها ملزم به ارسال شناسه کلاینت نیستند و این دستور تنها زمانی نشان داده می‌شود که کلاینت در عمل شناسه‌ای ارسال کرده باشد. شناسه‌های کلاینت معمولاً یک نوع ARP (مقدار ۱ برای اترنت) به همراه نشانی MAC هستند، درست مانند دستور hardware اما این امر اجباری نیست.

شناسه کلاینت به صورت یک لیست هگزادسیمال جداشده با دونقطه یا به صورت یک رشته درون گیومه ثبت می‌شود. اگر به صورت رشته درون گیومه ثبت شود و حاوی یک یا چند کاراکتر غیرقابل‌چاپ باشد، آن کاراکترها به صورت کدهای اکتال (یک نویسه اسلش وارو به همراه سه رقم هشت‌هشتی) نشان داده می‌شوند. قالب مورد استفاده توسط پارامتر lease-id-format تعیین می‌شود که مقدار پیش‌فرض آن octal است.

client-hostname hostname ;

بیشتر کلاینت‌های DHCP نام میزبان خود را در گزینه host-name ارسال می‌کنند. اگر کلاینتی نام میزبان خود را به این صورت ارسال کند، نام میزبان با یک دستور client-hostname روی اجاره ثبت می‌شود. با این حال، این مورد در پروتکل الزامی نیست، بنابراین بسیاری از کلاینت‌های تخصصی DHCP گزینه host-name را ارسال نمی‌کنند.

binding state state;
next binding state state;

دستور binding state وضعیت پیوند (binding state) اجاره را اعلام می‌کند. هنگامی که سرور DHCP برای استفاده از پروتکل failover پیکربندی نشده باشد، وضعیت پیوند یک اجاره می‌تواند active (فعال)، free (آزاد) یا abandoned (متروکه) باشد. پروتکل failover وضعیت‌های گذار دیگری را نیز اضافه می‌کند، به همراه وضعیت backup که نشان می‌دهد اجاره برای تخصیص توسط سرور ثانویه failover در دسترس است. لطفاً برای اطلاعات بیشتر درباره اجاره‌های متروکه، به صفحه راهنمای dhcpd.conf(5) مراجعه کنید.

دستور next binding state نشان می‌دهد که پس از انقضای وضعیت فعلی، اجاره به چه وضعیتی منتقل خواهد شد. زمانی که وضعیت فعلی منقضی می‌شود در دستور ends مشخص می‌گردد.

rewind binding state state;

این دستور بخشی از یک بهینه‌سازی برای استفاده با failover است. این به سرور کمک می‌کند تا یک اجاره را به وضعیتی که اخیراً به گره مقابل مخابره شده بود، بازگرداند (rewind کند).

option agent.circuit-id string;
option agent.remote-id string;

این دستورها برای ثبت گزینه‌های circuit ID و remote ID ارسال‌شده توسط عامل رله (relay agent) استفاده می‌شوند، البته در صورتی که عامل رله از relay agent information option استفاده کند. این امکان باعث می‌شود این گزینه‌ها در ارزیابی‌های شرطی حتی زمانی که کلاینت مستقیماً و نه از طریق عامل رله با سرور تماس می‌گیرد، به طور یکنواخت استفاده شوند.

متغیر vendor-class-identifier

سرور گزینه Vendor Class Identifier ارائه‌شده توسط کلاینت را برای مقاصد اطلاع‌رسانی و جهت ارائه در پاسخ‌های DHCPLEASEQUERY نگهداری می‌کند.

bootp;
reserved;

در صورت وجود، آن‌ها نشان می‌دهند که فلگ‌های failover مربوط به BOOTP و RESERVED (به ترتیب) باید تنظیم شوند. با اجاره‌های پویای BOOTP و RESERVED متفاوت از اجاره‌های پویای معمولی رفتار می‌شود، زیرا تنها توسط کلاینتی قابل استفاده هستند که در حال حاضر به آن اختصاص داده شده‌اند.

سایر موارد گزینه‌ها یا دستورهای اجرایی دیگری نیز ممکن است گنجانده شوند؛ شرح آن‌ها را در بخش ساختارهای مشترک ببینید.

ia_ta  IAID_DUID { statements... }
ia_na  IAID_DUID { statements... }
ia_pd  IAID_DUID { statements... }

هر اعلان اجاره با برچسبی شروع می‌شود که نشان‌دهنده نوع اجاره است. ia_ta برای نشانی‌های موقت، ia_na برای نشانی‌های غیرموقت و ia_pd برای تفویض پیشوند (prefix delegation) است. به دنبال این برچسب، ترکیب IAID و DUID دریافتی از کلاینت برای این اجاره قرار می‌گیرد.

مقدار IAID_DUID به صورت یک فهرست هگزادسیمال جداشده با دونقطه یا رشته‌ای درون گیومه ثبت می‌شود. اگر به صورت رشته درون گیومه ثبت شود و شامل یک یا چند کاراکتر غیرقابل‌چاپ باشد، آن کاراکترها به صورت کدهای اکتال (یک نویسه اسلش وارو به همراه سه رقم هشت‌هشتی) نشان داده می‌شوند. قالب مورد استفاده توسط پارامتر lease-id-format کنترل می‌شود که مقدار پیش‌فرض آن octal است.

cltt date;

دستور cltt آخرین زمان تراکنش کلاینت است.

توضیحات مربوط به تاریخ‌ها را در بخش ساختارهای مشترک ببینید.

iaaddr ipv6-address { statements... }
iaprefix ipv6-address/prefix-length { statements... }

درون یک اجاره مشخص می‌تواند چندین دستور iaaddr و iaprefix وجود داشته باشد. هر کدام یا یک نشانی IPv6 خواهند داشت یا یک پیشوند IPv6 (یک نشانی و طول پیشوند که نمایانگر یک بلوک نشانی به سبک CIDR است). دستورهای زیر می‌توانند درون هر iaaddr یا iaprefix رخ دهند.

binding state state;

دستور binding state وضعیت پیوند اجاره را اعلام می‌کند. در DHCPv6 معمولاً این مقدار را به صورت active یا expired خواهید دید.

preferred-life lifetime;

طول عمر ترجیحی (preferred lifetime) مربوط به این نشانی IPv6 بر حسب ثانیه.

max-life lifetime;

طول عمر معتبر (valid lifetime) مربوط به این نشانی بر حسب ثانیه.

ends date;

زمان پایان اجاره. توضیحات تاریخ‌ها را در بخش ساختارهای مشترک ببینید.

گزینه‌ها یا گزاره‌های اجرایی دیگری نیز ممکن است گنجانده شوند. توضیحات مربوط به آن‌ها را در بخش ساختارهای مشترک ببینید.

وضعیت هرگونه ترتیبات همتای جایگزینی پس از خرابی (failover peering) نیز با استفاده از دستور failover peer در فایل اجاره ثبت می‌شود:

failover peer name state {
my state state at date;
peer state state at date;
}

وضعیت‌های گره مقابل با نام name ثبت می‌شود. هم وضعیت سرور در حال اجرا (my state) و هم شریک failover دیگر (peer state) ثبت می‌گردند. وضعیت‌های زیر ممکن هستند: unknown-state, partner-down, normal, communications-interrupted, resolution-interrupted, potential-conflict, recover, recover-done, shutdown, paused و startup.

DBDIR/dhcpd.leases DBDIR/dhcpd.leases~

dhcpd(8), dhcp-options(5), dhcp-eval(5), dhcpd.conf(5), RFC2132, RFC2131.

dhcpd(8) توسط ISC نگهداری می‌شود. اطلاعات درباره کنسرسیوم سامانه‌های اینترنتی را می‌توانید در نشانی زیر بیابید: https://www.isc.org