.\" Generated automatically from the html documentation by html2confman.pl
.\"
.\" Manpage for pdnsd.conf (pdnsd configuration file)
.\"
.\" Copyright (C) 2000, 2001 Thomas Moestl
.\" Copyright (C) 2003, 2004, 2005, 2006, 2007 Paul A. Rombouts
.\"
.\" This manual is a part of the pdnsd package, and may be distributed in
.\" original or modified form under terms of the GNU General Public
.\" License, as published by the Free Software Foundation; either version
.\" 3, or (at your option) any later version.
.\" You can find a copy of the GNU GPL in the file COPYING in the source
.\" or documentation directory.
.\"
.TH PDNSD.CONF 5 "Apr 2012" "pdnsd 1.2.9b-par"
.SH "نام (NAME)"
pdnsd.conf \- پرونده پیکربندی pdnsd
.hw config
.SH "توضیحات (DESCRIPTION)"
.PP
این صفحه راهنما ساختار پرونده پیکربندی
.BR pdnsd (8)
و گزینههای پیکربندی موجود را شرح میدهد.
مکان پیشفرض پرونده /etc/pdnsd.conf است. این مسیر میتواند با گزینه خط فرمان
\fB-c\fP
تغییر یابد.
یک نمونه pdnsd.conf همراه با توزیع pdnsd در دایرکتوری مستندات یا در /etc/pdnsd.conf.sample قرار دارد.
.SH "قالب پرونده (FILE FORMAT)"
.PP
پرونده پیکربندی به بخشهایی تقسیم میشود. هر بخش با نام بخش و آکولاد باز ({) آغاز شده و با آکولاد بسته (}) خاتمه مییابد.
در هر بخش، گزینههای پیکربندی میتوانند به شکل زیر مشخص شوند:
\fIoption_name\fP=\fIoption_value\fP;
مقدار گزینه ممکن است یک رشته، یک عدد، مشخصه زمان یا یک مقدار ثابت باشد.
در نسخههای قبلی pdnsd، رشتهها باید در علامت نقلقول (") قرار میگرفتند، اما از نسخه 1.1.10 این کار دیگر الزامی نیست، مگر اینکه رشته شامل نویسههای خاص مانند فاصله خالی، نشانهای که معمولاً کامنت را شروع میکند، یا یکی از نویسههای ",;{}\e" باشد.
از نسخه 1.2.9 به بعد، یک بکاسلش (\e) داخل یک رشته بهعنوان نویسه گریز (escape) تفسیر میشود، بنابراین میتوان با قرار دادن یک بکاسلش قبل از نویسههای خاص، آنها را در رشتهها (چه داخل نقلقول و چه بدون آن) درج کرد. برخی از دنبالههای گریز همانند زبان برنامهنویسی C تفسیر میشوند؛ بهعنوان مثال \et به نویسه برگه (tab) و \en به نویسه خط جدید تبدیل میشود.
.br
مشخصه زمان شامل دنبالهای از ارقام است که پس از آن یک پسوند تکحرفی قرار میگیرد.
پسوندهای زیر شناسایی میشوند:
s (ثانیه)، m (دقیقه)، h (ساعت)،
d (روز) و w (هفته).
اگر پسوند حذف شود، ثانیه در نظر گرفته میشود.
اگر چندین مشخصه زمانی به هم الحاق شوند، مقادیر آنها با یکدیگر جمع میشوند؛
مثلاً 2h30m بهصورت 2*60*60 + 30*60 = 9000 ثانیه تفسیر میشود.
.br
برخی گزینهها بیش از یک مقدار میپذیرند؛ در این حالت، مقادیر با کاما از یکدیگر جدا میشوند.
.br
اگر مجاز به ارائه یکی از مجموعهای از مقادیر ممکن برای یک گزینه باشید، این موضوع در مستندات بهصورت زیر نشان داده شده است:
(option1|option2|option3|...)
.br
ثابتهای true|false و yes|no
بهعنوان مترادفهایی برای ثابتهای on|off پذیرفته میشوند.
.br
کامنتها ممکن است میان /* و */ قرار گیرند؛ کامنتهای تودرتو نیز مجاز هستند. اگر علامت # یا دو اسلش (//) در پرونده پیکربندی ظاهر شوند، هر چیزی از این نشانهها تا انتهای خط جاری بهعنوان کامنت در نظر گرفته شده و نادیده گرفته میشود.
.br
تقریباً برای همه گزینهها در پرونده پیکربندی نمونه (sample config file) مثالهایی وجود دارد.
.SS "بخش global"
بخش global پارامترهایی را مشخص میکند که بر رفتار کلی سرور تأثیر میگذارند. اگر چندین بخش global تعیین کنید، تنظیمات بخشهای بعدی پرونده، مقادیر قبلی را بازنویسی خواهند کرد.
.br
گزینههای ممکن عبارتند از:
.TP
.B perm_cache=(\fInumber\fP|off);
حافظه نهان (کَش) دیسک را خاموش میکند یا بیشینه اندازه کَش را بر حسب کیلوبایت تعیین مینماید. اگر کَش دیسک خاموش باشد، همچنان ۸ بایت روی دیسک نوشته خواهد شد.
کَش حافظه همیشه ۱۰ کیلوبایت بزرگتر از کَش پرونده است.
این مقدار بهطور پیشفرض 2048 (معادل ۲ مگابایت) است.
.TP
.B cache_dir=\fIstring\fP;
دایرکتوری نگهداری کَش را تنظیم میکند.
پیشفرض "/var/cache/pdnsd" است
(مگر اینکه pdnsd با پیشفرض دیگری کامپایل شده باشد).
.TP
.B server_port=\fInumber\fP;
پورت سرور را تنظیم میکند. این گزینه بهویژه زمانی مفید است که بخواهید سرور را اجرا کنید و دسترسی کاربر ریشه (root) ندارید. توجه داشته باشید که در حالت غیر ریشه، نمیتوانید uptest=ping را نیز در بخش سرور مشخص کنید.
.br
پورت پیشفرض 53 (پورت استاندارد RFC) است. توجه داشته باشید که تنها زمانی باید از پورتهای غیراستاندارد استفاده کنید که صرفاً کلاینتهای روی ماشین خودتان نیاز به برقراری ارتباط با سرور دارند؛ دیگران احتمالاً در تلاش برای تماس با سرور بر اساس رکورد NS شکست خواهند خورد، زیرا رکورد A که آدرس کارگزارهای نام را تأمین میکند فاقد مشخصه شماره پورت است.
.TP
.B server_ip=\fIstring\fP;
یا
.PD 0
.TP
.PD
.B interface=\fIstring\fP;
آدرس IP که pdnsd روی آن به درخواستها گوش میدهد را تنظیم میکند. این گزینه هنگامی مفید است که میزبان دارای چندین رابط شبکه باشد و بخواهید pdnsd روی همه رابطها گوش ندهد. بهعنوان مثال، میتوان pdnsd را به 127.0.0.2 متصل کرد تا بتواند یک فورواردر برای BIND باشد.
تنظیم پیشفرض این گزینه server_ip=any است، به این معنی که pdnsd روی تمام رابطهای محلی شما گوش خواهد داد.
در حال حاضر در اینجا تنها میتوانید یک آدرس را مشخص کنید؛ اگر میخواهید pdnsd روی چندین رابط اما نه همه آنها گوش دهد، باید server_ip=any را مشخص کرده و از قوانین فایروال برای محدود کردن دسترسی استفاده کنید.
.br
پیشتر آدرس IP نیاز به نقلقول داشت، اما از نسخه 1.1.10 این کار دیگر لازم نیست.
.br
اگر pdnsd با پشتیبانی از هر دو IPv4 و IPv6 کامپایل شده باشد و بخواهید در اینجا یک آدرس IPv6 مشخص کنید، مگر اینکه pdnsd بهطور پیشفرض برای اجرا در حالت IPv6 کامپایل شده باشد، نیاز است از گزینه خط فرمان \-6 استفاده کنید یا ابتدا run_ipv4=off را تنظیم نمایید (به زیر مراجعه کنید) تا اطمینان حاصل شود که آدرس IPv6 بهدرستی تجزیه میشود.
.br
اگر pdnsd در حالت IPv6 در حال اجرا باشد و یک آدرس IPv4 در اینجا مشخص کنید، بهطور خودکار به یک آدرس IPv6 نگاشت خواهد شد.
.br
\fIجدید در نسخه 1.2:\fP میتوانید به جای آدرس IP، نام یک رابط شبکه مانند "lo" یا "eth0" را نیز در اینجا وارد کنید
(این ویژگی روی لینوکس آزمایش شده است و ممکن است روی پلتفرمهای دیگر کار کند یا نکند).
pdnsd به نام رابط متصل نمیشود، بلکه هنگام راهاندازی، آدرس رابط را جستجو کرده و روی آن آدرس گوش میدهد. اگر آدرس رابط در حین اجرای pdnsd تغییر کند، pdnsd متوجه آن نخواهد شد. در این صورت باید pdnsd را مجدداً راهاندازی کنید.
.TP
.B outgoing_ip=\fIstring\fP;
یا
.PD 0
.TP
.PD
.B outside_interface=\fIstring\fP;
\fIجدید در نسخه 1.2.9:\fP
آدرس IP رابطی را که pdnsd برای پرسوجوهای خروجی استفاده میکند تنظیم میکند.
این گزینه زمانی مفید است که میزبان دارای چندین رابط باشد و بخواهید pdnsd پرسوجوهای خروجی را تنها از طریق یکی از آنها ارسال کند.
برای مثال، اگر pdnsd روی میزبانی با یک رابط با آدرس IP 192.168.1.1 متصل به شبکه محلی و رابط دیگری با آدرس IP 123.xxx.yyy.zzz متصل به اینترنت اجرا میشود، میتوانید server_ip=192.168.1.1 و outgoing_ip=123.xxx.yyy.zzz را مشخص کنید تا الزام شود pdnsd تنها به پرسوجوهای دریافتی از شبکه محلی پاسخ دهد و پرسوجوهای خروجی را فقط از طریق رابط متصل به اینترنت ارسال نماید.
.br
تنظیم پیشفرض برای این گزینه any است، به این معنی که هسته آزاد است تصمیم بگیرد از کدام رابط استفاده کند.
همانند گزینه server_ip، میتوانید در اینجا نیز به جای آدرس IP، نام یک رابط شبکه را وارد کنید.
.TP
.B linkdown_kluge=(on|off);
این گزینه راهحلی موقت (kluge) را فعال میکند که ممکن است برخی افراد به آن نیاز داشته باشند: هنگامی که تمام سرورها قطع (down) علامتگذاری شدهاند، با فعال بودن این گزینه حتی هنگام دریافت پرسوجو از کَش استفاده نمیشود و در هر صورت خطای DNS برگردانده میشود. تنها استثنا این است که رکوردهای محلی (همانطور که در بخشهای rr و source مشخص شدهاند) همچنان بهصورت عادی ارائه میشوند.
بهطور کلی، معمولاً مایل هستید حتی زمانی که شبکه قطع است رکوردهای کَششده را دریافت کنید، بنابراین این گزینه بهطور پیشفرض off است.
.TP
.B max_ttl=\fItimespec\fP;
این گزینه بیشینه زمانی را که یک رکورد در کَش نگه داشته میشود تعیین میکند. تمام رکوردهای منبع DNS دارای یک فیلد زمان حیات (time to live) هستند که مشخص میکند رکورد قبل از نیاز به پرسوجوی مجدد تا چه مدت میتواند کَش شود. اگر این مقدار بیشتر از مقدار تعیینشده با max_ttl باشد، مقدار زمان حیات روی max_ttl تنظیم میشود.
این کار برای جلوگیری از کَش شدن رکوردها برای مدت طولانی و نامناسب انجام میشود، زیرا تقریباً هرگز کار مناسبی نیست. مقدار پیشفرض 604800s (یک هفته) است.
.TP
.B min_ttl=\fItimespec\fP;
این گزینه کمینه زمانی را که یک رکورد در کَش نگه داشته میشود تعیین میکند. تمام رکوردهای منبع DNS دارای یک فیلد زمان حیات هستند که میگوید رکورد چه مدت قبل از پرسوجوی مجدد میتواند کَش شود. اگر این مقدار کمتر از مقدار دادهشده با min_ttl باشد، مقدار زمان حیات روی min_ttl تنظیم میشود.
پیشفرض 120 ثانیه است.
.TP
.B neg_ttl=\fItimespec\fP;
این گزینه زمانی را تعیین میکند که رکوردهای کَششده منفی در صورت عدم امکان تعیین زمان حیات، در کَش معتبر خواهند ماند. این حالت همواره زمانی رخ میدهد که کل دامنهها بهصورت منفی کَش میشوند، و علاوه بر آن زمانی که انواع رکورد برای دامنهای که هیچ رکورد SOA برای آن نزد pdnsd شناخته شده نیست، بهصورت منفی کَش گردند. اگر یک SOA وجود داشته باشد، ttl مربوط به SOA در نظر گرفته میشود.
.TP
.B neg_rrs_pol=(on|off|auth|default);
سیاست مجموعه RR را برای کَش منفی تعیین میکند؛ این گزینه به pdnsd میگوید تحت چه شرایطی باید یک نوع رکورد را برای یک دامنه خاص بهصورت منفی کَش کند. مقدار off کَش منفی انواع رکورد را خاموش میکند، on همیشه زمانی که یک سرور نام نوع رکوردی را که از آن خواستهایم برنگرداند یک مدخل کَش منفی اضافه میکند، و auth تنها در صورتی چنین مدخلهایی را اضافه میکند که پاسخ از سوی یک سرور نام معتبر (authoritative) برای آن دامنه آمده باشد.
.br
\fIجدید در نسخه 1.2.8:\fP تنظیم پیشفرض (default) در صورتی یک رکورد کَش منفی اضافه میکند که یا پاسخ معتبر بوده باشد، یا پاسخ نشان دهد که سرور نام ویژگی "recursion available" را داشته در حالی که پرسوجو صراحتاً چنین بازگشتی (recursion) را درخواست کرده باشد.
.br
مقدار پیشفرض "default" است (پیشتر auth بود).
.TP
.B neg_domain_pol=(on|off|auth);
این گزینه مشابه neg_rrs_pol برای کَش منفی کل یک دامنه است. فعال کردن آن (on) باید ایمن باشد، زیرا سرور کَشکنندهای مشاهده نشده است که بهاشتباه ادعا کند دامنهای وجود ندارد.
.br
پیشفرض auth است.
.TP
.B run_as=\fIstring\fP;
این گزینه به شما امکان میدهد پس از انجام عملیاتی که نیاز به امتیازات ویژه دارند، شناسه کاربر و گروه pdnsd را تغییر دهید. این کار به کاهش خطرات امنیتی کمک میکند و بنابراین توصیه میشود. رشته ارائهشده نام کاربری را مشخص میکند که شناسه کاربر و شناسه گروه اصلی آن اعمال خواهد شد.
.br
جزئیات بیشتر: پس از خواندن پرونده پیکربندی، تبدیل شدن به دیمن (در صورت تعیین) و شروع رشته (thread) وضعیت سرور، رشته اصلی شناسه گروه (gid) و شناسه کاربر (uid) خود را تغییر میدهد، همانطور که تمام رشتههای تازه ایجاد شده پس از آن نیز چنین میکنند. با گرفتن uid و gid دیگر، آن رشتهها با امتیازات کاربر مشخصشده اجرا میشوند.
در لینوکس و FreeBSD، رشته وضعیت سرور تنها زمانی با امتیازات اصلی اجرا میشود که گزینه strict_setuid روی off تنظیم شده باشد (به زیر مراجعه کنید، بهطور پیشفرض on است)، زیرا ممکن است این امتیازات برای تستهای فعال بودن با exec مورد نیاز باشند. رشته مدیر (manager thread) نیز در این حالت امتیازات اصلی خود را حفظ میکند.
باید دقت داشته باشید که کاربر تعیینشده دارای مجوزهای نوشتن روی پرونده کَش و لوله وضعیت (status pipe، در صورت نیاز به آن) باشد. باید به پیامهای خطایی مانند "permission denied" و "operation not permitted" توجه کنید تا مشکلات دسترسی را شناسایی نمایید.
.br
.TP
.B strict_setuid=(on|off);
هنگامی که همراه با گزینه run_as استفاده میشود، این گزینه به شما امکان میدهد مشخص کنید که تمام رشتههای برنامه با امتیازات کاربر run_as اجرا شوند. این امر امنیت بالاتری نسبت به گزینه عادی run_as فراهم میکند، اما همیشه امکانپذیر نیست. برای توضیحات بیشتر به گزینه run_as مراجعه کنید.
.br
این گزینه بهطور پیشفرض on است.
.br
توجه داشته باشید که این گزینه در سیستمهای غیر لینوکسی هیچ تأثیری ندارد.
.TP
.B paranoid=(on|off);
بهطور معمول، pdnsd از تمام سرورها در حالت بازگشتی (recursive) پرسوجو میکند (یعنی به سرورها دستور میدهد در صورت امکان خودشان از سایر سرورها پرسوجو کنند و پاسخهایی برای دامنههایی که ممکن است در حیطه اختیارات آنها نباشد بازگردانند)، و رکوردهای اضافی حاوی اطلاعات برای سرورهایی که در حیطه اختیارات سرور پرسیدهشده نیستند را میپذیرد. این امر امکان مسمومسازی حافظه نهان (cache poisoning) را باز میکند: یک مهاجم خرابکار ممکن است سرور DNS راهاندازی کند که هنگام پرسوجو، رکوردهای اضافی جعلی بازگرداند. به این ترتیب، او میتواند با مجبور کردن سرور DNS شما به بازگرداندن آدرسهای IP نامعتبر، سرورهای مورد اعتماد را با سرورهای خود جایگزین کند. این گزینه با رد رکوردهای اضافی که دامنههای موجود در فضای اختیارات سرور پرسیدهشده را توصیف نمیکنند و عدم انجام پرسوجوهای بازگشتی بیشتر، شما را در برابر مسمومسازی کَش محافظت میکند. یک استثنا برای این قاعده، سرورهایی هستند که در پرونده پیکربندی خود مشخص میکنید، که مورد اعتماد هستند.
.br
هزینه این کار افت احتمالی کارایی است؛ بهویژه، ممکن است پرسوجوهای بیشتری برای همان عملیات لازم باشد.
.br
همچنین باید توجه داشته باشید که ممکن است مشکلات امنیتی مشابه دیگری وجود داشته باشند که اساساً مشکلات خود DNS هستند، یعنی هر سرور "سنتی" آنها را دارد (افزونههای امنیتی DNS این مشکلات را حل میکنند، اما بهطور گسترده پشتیبانی نمیشوند).
یکی از این آسیبپذیریها این است که مهاجم ممکن است شما را با پاسخهای جعلی بمباران کند به این امید که یکی از آنها با پرسوجویی که انجام دادهاید مطابقت داشته باشد. اگر چنین پرسوجویی انجام داده باشید، از هر ۶۵۵۳۶ بسته جعلی یکی موفق خواهد بود (یعنی میانگین ۳۲۷۶۸ بسته برای آن حمله لازم است). pdnsd میتواند از TCP برای پرسوجوها استفاده کند که سربار کمی بالاتر دارد، اما در سیستمعاملهای معقول بسیار کمتر در برابر چنین حملاتی آسیبپذیر است. همچنین، pdnsd شناسههای پرسوجوی تصادفی انتخاب میکند تا مهاجم نتواند مسیر میانبر بزند. با این حال، اگر مهاجم قادر به شنود ترافیک شبکه شما باشد، این حمله نسبتاً آسان است.
.br
این آسیبپذیری تقصیر pdnsd نیست و با استفاده از هر کارگزار نام سنتی امکانپذیر است (اگر pdnsd را وادار به استفاده از TCP کنید، شاید کمی در برابر این نوع حملات ایمنتر باشد).
.br
گزینه paranoid بهطور پیشفرض off است.
.br
.TP
.B ignore_cd=(on|off);
\fIجدید در نسخه 1.2.8:\fP این گزینه به شما امکان میدهد مشخص کنید که بیت CD در پرسوجوی DNS نادیده گرفته شود.
در غیر این صورت، pdnsd به کلاینتهایی که این بیت را در پرسوجو تنظیم میکنند با FORMERR پاسخ خواهد داد.
فعال کردن این گزینه ایمن است، زیرا بیت CD به 'Checking Disabled' اشاره دارد که به این معنی است کلاینت دادههای احراز هویتنشده را خواهد پذیرفت.
.br
این گزینه بهطور پیشفرض on است. اگر رفتار قدیمی (قبل از نسخه 1.2.8) را میخواهید، آن را خاموش کنید.
.TP
.B scheme_file=\fIstring\fP;
علاوه بر تستهای فعال بودن (uptests) معمول، میتوانید مشخص کنید که برخی سرورها تنها زمانی پرسوجو شوند که یک طرح (scheme) خاص pcmcia-cs فعال باشد (تنها در لینوکس). برای این منظور، pdnsd باید بداند پروندهای که اطلاعات طرح pcmcia را نگهداری میکند در کجا قرار دارد. معمولاً این مسیر یا /var/lib/pcmcia/scheme است یا /var/state/pcmcia/scheme.
.TP
.B status_ctl=(on|off);
این گزینه همان اثر گزینه خط فرمان \-s را دارد: کنترل وضعیت زمانی که on مشخص شود فعال میگردد.
.br
\fIافزوده شده توسط Paul Rombouts\fP: توجه داشته باشید که pdnsd\-ctl امکان پیکربندی در زمان اجرای pdnsd را فراهم میکند، حتی آدرسهای IP کارگزارهای نام را میتوان تغییر داد. اگر از pdnsd\-ctl استفاده نمیکنید و حداکثر امنیت را میخواهید، نباید این گزینه را فعال کنید. این گزینه بهطور پیشفرض غیرفعال است.
.TP
.B daemon=(on|off);
این گزینه همان اثر گزینه خط فرمان \-d را دارد: حالت دیمن زمانی که on مشخص شود فعال میگردد.
.br
پیشفرض off است.
.TP
.B tcp_server=(on|off);
مقدار tcp_server=on همان اثر گزینه خط فرمان \-t یا \-\-tcp را دارد: سرویسدهی از طریق TCP را فعال میکند.
مشابهاً، tcp_server=off مانند گزینه خط فرمان \-\-notcp است.
.br
پیشفرض on است.
.TP
.B pid_file=\fIstring\fP;
این گزینه همان اثر گزینه خط فرمان \-p را دارد: میتوانید پروندهای را مشخص کنید که pdnsd هنگام شروع در حالت دیمن، شناسه فرآیند (pid) خود را در آن بنویسد.
.TP
.B verbosity=\fInumber\fP;
این گزینه همان اثر گزینه خط فرمان \-v را دارد: میتوانید با استفاده از آن میزان پرگویی (verbosity) پیامهای pdnsd را تنظیم کنید. آرگومان عددی بین 0 (پیامهای اندک) تا 3 (بیشترین پیامها) است.
.TP
.B query_method=(tcp_only|udp_only|tcp_udp|udp_tcp);
این گزینه همان اثر گزینه خط فرمان \-m را دارد.
مستندات گزینه خط فرمان را در این مورد مطالعه کنید.
مقدار tcp_only متناظر با to، مقدار udp_only متناظر با uo،
مقدار tcp_udp متناظر با tu و udp_tcp متناظر با آرگومان ut
در گزینه خط فرمان است.
.br
اگر از query_method=tcp_udp استفاده میکنید، توصیه میشود که گزینه سرآمد زمانی کلی (global timeout) را حداقل دو برابر طولانیترین زمان سرآمد سرور تنظیم کنید.
.TP
.B run_ipv4=(on|off);
این گزینه همان اثر گزینه خط فرمان \-4 یا \-6 را دارد:
اگر on مشخص شود، پشتیبانی از IPv4 فعال شده و پشتیبانی از IPv6 (در صورت وجود) غیرفعال میشود.
اگر off مشخص شود، IPv4 غیرفعال شده و IPv6 فعال خواهد شد.
برای معنادار بودن این گزینه، pdnsd باید با پشتیبانی از پروتکلی که انتخاب میکنید کامپایل شده باشد.
اگر pdnsd با پشتیبانی از هر دو IPv4 و IPv6 کامپایل شده باشد و بخواهید آدرسهای IPv6 را در پرونده پیکربندی بگنجانید، احتمالاً ابتدا باید run_ipv4=off را مشخص کنید تا اطمینان یابید آدرسهای IPv6 بهدرستی تجزیه میشوند.
.TP
.B debug=(on|off);
این گزینه همان اثر گزینه خط فرمان \-g را دارد: پیامهای اشکالزدایی زمانی که on مشخص شود فعال میگردند.
.TP
.B ctl_perms=\fInumber\fP;
این گزینه به شما اجازه میدهد دسترسیهای پرونده سوکت کنترل وضعیت pdnsd را تنظیم کنید. این دسترسیها مشابه مجوزهای پرونده هستند. مالک پرونده کاربر run_as خواهد بود، یا اگر کاربری مشخص نشده باشد، کاربری که pdnsd را اجرا کرده است. اگر میخواهید دسترسیها را در مبنای هشت (اکتال، همانند معمول) مشخص کنید، صفر ابتدایی را فراموش نکنید (0600 به جای 600!). برای استفاده از کنترل وضعیت، دسترسی نوشتن لازم است. پیشفرض 0600 است (فقط مالک میتواند بخواند یا بنویسد).
.br
لطفاً توجه داشته باشید که سوکت در دایرکتوری کَش نگهداری میشود و ممکن است نیاز باشد مجوزهای دایرکتوری کَش نیز تنظیم شوند. لطفاً اطمینان حاصل کنید که دایرکتوری کَش برای کاربران غیرقابل اعتماد قابل نوشتن نباشد.
.TP
.B proc_limit=\fInumber\fP;
با این گزینه میتوانید محدودیتی برای رشتههای همزمان فعال pdnsd تعیین کنید. اگر این تعداد فراتر رود، پرسوجوها در صف قرار میگیرند و ممکن است مدتی با تأخیر مواجه شوند.
همچنین گزینه procq_limit را ببینید.
.br
پیشفرض برای این گزینه 40 است.
.TP
.B procq_limit=\fInumber\fP;
هنگامی که حد رشتههای پرسوجو (proc_limit) فراتر رود، تلاشهای اتصال به pdnsd در صف قرار میگیرند.
با این گزینه میتوانید حداکثر طول صف را تعیین کنید.
اگر این طول نیز پر شود، پرسوجوهای ورودی دور انداخته میشوند (drop میشوند).
این بدان معناست که اتصالات tcp بسته میشوند و پرسوجوهای udp صرفاً دور ریخته میشوند که احتمالاً باعث میشود تحلیلگرِ پرسشکننده تا رسیدن به سرآمد زمانی منتظر پاسخ بماند.
.br
همچنین گزینه proc_limit را ببینید. در هر زمان حداکثر مجموع proc_limit+procq_limit رشته پرسوجو وجود خواهد داشت (بهعلاوه ۳ تا ۶ رشته که بسته به پیکربندی شما همیشه حضور دارند).
.br
پیشفرض برای این گزینه 60 است.
.TP
.B tcp_qtimeout=\fItimespec\fP;
این گزینه یک سرآمد زمانی برای پرسوجوهای tcp تعیین میکند. اگر پس از گذشت آن زمان هیچ پرسوجوی کاملی روی یک اتصال tcp دریافت نشود، اتصال بسته خواهد شد. مقدار پیشفرض با استفاده از گزینه \-\-with\-tcp\-qtimeout در زمان پیکربندی (configure) تنظیم میشود.
.TP
.B par_queries=\fInumber\fP;
این گزینه پیشتر حداکثر تعداد سرورهای راه دوری را که بهطور همزمان برای هر پرسوجوی دریافتی توسط pdnsd مورد پرسش قرار میگرفتند، تنظیم میکرد.
.br
از نسخه 1.1.11، معنای این گزینه اندکی تغییر کرده است.
اکنون این گزینه مقداری است که تعداد پرسوجوهای موازی با آن افزایش مییابد هنگامی که مجموعه سرورهای قبلی دچار سرآمد زمانی (timeout) شده باشند.
برای مثال، اگر لیستی از سرورهای در دسترس شامل \fIserver1, server2, server3,\fP و غیره داشته باشیم و par_queries=2 باشد، آنگاه pdnsd ابتدا پرسوجوها را به \fIserver1\fP و \fIserver2\fP ارسال کرده و به پاسخهای این سرورها گوش میدهد.
.br
اگر این سرورها در طول دوره سرآمد زمانی خود پاسخی ارسال نکنند، pdnsd پرسوجوهای اضافی را به \fIserver3\fP و \fIserver4\fP ارسال میکند و منتظر پاسخ از \fIserver1, server2, server3\fP و \fIserver4\fP میماند، و این روند تا زمان دریافت پاسخی مفید یا اتمام لیست ادامه مییابد.
.br
در بدترین حالت، پرسوجوهای در انتظار برای تمام سرورهای موجود در لیست سرورهای در دسترس وجود خواهد داشت.
ممکن است به این ترتیب منابع سیستمی بیشتری مصرف کنیم (اما فقط در صورتی که سرورهای نخست در لیست کند باشند یا پاسخ ندهند)، اما مزیت آن این است که شانس بیشتری برای دریافت پاسخ داریم. در هر صورت، اگر قرار است بیشتر صبر کنیم، چرا برای سرورهای بیشتری منتظر نمانیم.
.br
همچنین توضیح گزینه سرآمد زمانی سراسری (global timeout) در زیر را ببینید.
.br
مقادیر 1 یا 2 مقادیر مناسبی برای این گزینه هستند.
پیشفرض در زمان کامپایل با استفاده از گزینه \-\-with\-par\-queries در configure تعیین میشود.
.TP
.B timeout=\fItimespec\fP;
این پارامتر سرآمد زمانی سراسری برای پرسوجوهای dns است.
این گزینه حداقل مدت زمانی را مشخص میکند که pdnsd پس از ارسال اولین پرسوجو به یک سرور راه دور قبل از انصراف بدون دریافت پاسخ، منتظر خواهد ماند. گزینههای سرآمد در پرونده پیکربندی اکنون فقط حداقل فواصل زمانی سرآمد هستند. تنظیم گزینه سرآمد سراسری این امکان را فراهم میکند که فواصل زمانی سرآمد نسبتاً کوتاهی را در بخشهای server مشخص کنید (به زیر مراجعه کنید). این کار باعث میشود که pdnsd در صورتی که سرورهای اول کند پاسخ دهند، خیلی سریع شروع به پرسوجو از سرورهای اضافی کند (اما همچنان به شنیدن پاسخها از سرورهای اول ادامه دهد). این امر ممکن است به pdnsd اجازه دهد در شرایط خاص سریعتر پاسخ را دریافت کند.
.br
اگر از query_method=tcp_udp استفاده میکنید، توصیه میشود سرآمد زمانی سراسری را حداقل دو برابر بزرگتر از بزرگترین سرآمد زمانی سرور قرار دهید، در غیر این صورت ممکن است اگر یک اتصال TCP با سرآمد مواجه شود، pdnsd فرصتی برای امتحان پرسوجوی UDP نداشته باشد.
.br
مقدار پیشفرض 0 است.
.TP
.B randomize_recs=(on|off);
اگر این گزینه روشن باشد، pdnsd هنگام ایجاد پاسخ، رکوردهای کَششده از یک نوع را بهطور تصادفی بازآرایی میکند. این امر از طرحهای Round-robin DNS پشتیبانی کرده و خطاپذیری میزبانهایی با چندین آدرس IP را بهبود میبخشد، بنابراین معمولاً ایده خوبی است.
.br
بهطور پیشفرض on است.
.TP
.B query_port_start=(\fInumber\fP|none);
اگر عددی داده شود، این مقدار شروع محدوده پورت مورد استفاده برای پرسوجوهای pdnsd را تعریف میکند. مقدار دادهشده باید >= 1024 باشد. هدف از این گزینه کمک به پیکربندیهای خاص فایروال است که بر اساس پورت مبدأ عمل میکنند. لطفاً به خاطر داشته باشید که ممکن است برنامه دیگری پورتی را در آن محدوده مقید (bind) کند، بنابراین یک فایروال با حفظ وضعیت (stateful) که از پورت مقصد و/یا uid فرآیند استفاده میکند ممکن است مؤثرتر باشد. در صورتی که پورت شروع پرسوجو داده شود، pdnsd از این پورت بهعنوان اولین پورت محدوده پورت مشخصشده (query_port_end را ببینید) برای پرسوجوها استفاده میکند.
pdnsd سعی خواهد کرد بهطور تصادفی یک پورت آزاد را از این محدوده بهعنوان پورت محلی برای پرسوجو انتخاب کند.
.br
برای اطمینان از وجود پورتهای کافی برای استفاده pdnsd، محدوده بین query_port_start و query_port_end باید حداقل روی (par_queries * proc_limit) تنظیم شود.
محدوده بزرگتر به دلایل امنیتی و همچنین به این دلیل که برنامههای دیگر ممکن است پورتهایی را در آن محدوده تخصیص دهند، بهشدت توصیه میشود. در صورت امکان، این محدوده باید دور از فضایی که برنامههای دیگر معمولاً استفاده میکنند نگهداشته شود.
.br
پیشفرض برای این گزینه 1024 است. همراه با مقدار پیشفرض query_port_end، این امر حدس زدن پورت مبدأ مورد استفاده توسط تحلیلگر pdnsd را برای مهاجم به سختترین حالت تبدیل میکند.
اگر در اینجا none را مشخص کنید، pdnsd به هسته اجازه میدهد پورت مبدأ را انتخاب کند، اما این کار ممکن است pdnsd را در برابر حمله آسیبپذیرتر سازد.
.TP
.B query_port_end=\fInumber\fP;
اگر query_port_start برابر none نباشد استفاده میشود. آخرین پورت محدوده آغاز شده توسط query_port_start را که برای پرسوجوهای pdnsd استفاده میشود تعریف میکند. پیشفرض 65535 است که بیشینه مقدار قانونی برای این گزینه نیز میباشد.
برای جزئیات به توضیحات query_port_start مراجعه کنید.
.TP
.B delegation_only=\fIstring\fP;
\fIافزوده شده توسط Paul Rombouts\fP: این گزینه یک ناحیه "delegation-only" (صرفاً تفویضی) را مشخص میکند.
این بدان معناست که اگر pdnsd پرسوجویی برای نامی دریافت کند که در زیردامنهای از یک ناحیه "delegation-only" قرار دارد، اما سرور نام راه دور پاسخی با بخش اعتبارسنجی (authority) فاقد هرگونه رکورد NS برای زیردامنههای آن ناحیه بازگرداند، pdnsd با NXDOMAIN (دامنه ناشناخته) پاسخ خواهد داد.
این ویژگی را میتوان برای خنثی کردن اثرات نامطلوب "wildcard"های DNS استفاده کرد. چندین ناحیه "delegation-only" را میتوان با هم مشخص کرد.
اگر سرورهای ریشه (root servers) را در یک بخش server مشخص میکنید، مهم است که root_server=on را در چنین بخشی تنظیم کنید.
.br
مثال:
delegation_only="com","net";
این ویژگی بهطور پیشفرض غیرفعال است. توصیه میشود فقط در صورتی از این ویژگی استفاده کنید که واقعاً به آن نیاز دارید، زیرا این خطر وجود دارد که برخی نامهای مشروع مسدود شوند، بهویژه اگر کارگزارهای نام راه دور مورد پرسش توسط pdnsd پاسخهایی با بخشهای اعتبارسنجی خالی بازگردانند.
.TP
.B ipv4_6_prefix=\fIstring\fP;
این گزینه همان اثر گزینه خط فرمان \-i را دارد.
هنگامی که pdnsd در حالت IPv6 اجرا میشود، این گزینه پیشوندی را مشخص میکند که pdnsd برای تبدیل آدرسهای IPv4 در پرونده پیکربندی (یا آدرسهای مشخصشده با pdnsd\-ctl) به آدرسهای نگاشتشده به IPv6 استفاده میکند.
رشته باید یک آدرس معتبر IPv6 باشد. تنها ۹۶ بیت اول استفاده میشوند.
توجه داشته باشید که این گزینه فقط بر تجزیه آدرسهای IPv4 فهرستشده پس از این گزینه تأثیر میگذارد.
.br
پیشفرض "::ffff.0.0.0.0" است.
.TP
.B use_nss=(on|off);
اگر این گزینه روشن باشد، pdnsd هر زمان که شناسه کاربر و گروه خود را تغییر دهد، تابع initgroups() را برای تنظیم لیست دسترسی گروه فراخوانی میکند (گزینه run_as را ببینید).
با این حال، یک مشکل احتمالی وجود دارد اگر initgroups() از NSS (Name Service Switch) استفاده کند و NSS نیز به نوبه خود از DNS استفاده نماید. در چنین حالتی ممکن است با سرآمدها و توقفهای طولانی مواجه شوید.
با تنظیم use_nss=off، میتوانید فراخوانی initgroups() را غیرفعال کنید
(تنها در نسخههای 1.2.5 و بعد از آن امکانپذیر است).
.br
این گزینه توسط Jan-Marek Glogowski ارائه شده است.
.br
بهطور پیشفرض on است.
.TP
.B udpbufsize=\fInumber\fP;
\fIجدید در نسخه 1.2.9:\fP
این گزینه حد بالایی اندازه پیامهای UDP DNS را تعیین میکند. پیشفرض 1024 است.
.br
همچنین گزینه سرور edns_query را در زیر ببینید.
.SS "بخش server"
هر بخش server مجموعهای از کارگزارهای نام را مشخص میکند که pdnsd باید تلاش کند رکوردهای منبع یا اطلاعات کارگزار نام معتبر را از آنها دریافت کند. سرورها به ترتیب حضورشان (یا تا حدی بهصورت موازی) پرسوجو میشوند.
اگر یکی ناموفق باشد، سرور بعدی گرفته میشود و به همین ترتیب.
.br
احتمالاً مایل هستید سرور dns شبکه محلی (LAN) خود، سرورهای dns کَشکننده ارائهدهنده اینترنت خود یا حتی فهرستی از سرورهای ریشه را در یک یا چند بخش server مشخص کنید.
.br
گزینههای پشتیبانیشده در این بخش عبارتند از:
.TP
.B label=\fIstring\fP;
یک برچسب برای بخش server مشخص میکند. این برچسب میتواند برای ارجاع به این بخش هنگام استفاده از pdnsd\-ctl (ابزار کنترل pdnsd) استفاده شود.
.br
میتوانید به چندین بخش server برچسب یکسانی بدهید، اما اگر میخواهید آدرسهای یک بخش server را (گزینه \fBip\fP در زیر را ببینید) در زمان اجرا با دستور
"pdnsd\-ctl\ server\ \fIlabel\fP\ up\ \fIdns1\fP,\fIdns2\fP,..."
تغییر دهید، برچسب باید یکتا باشد.
.TP
.B ip=\fIstring\fP;
آدرس IP (خود آدرس، \fIنه\fP نام میزبان) سرور را مشخص میکند.
.br
میتوان چندین آدرس IP در هر بخش server مشخص کرد.
این کار را میتوان با وارد کردن چندین خط به فرم ip=\fIstring\fP;
یا یک خط تکی مانند این انجام داد:
ip=\fIstring\fP,\fIstring\fP,\fIstring\fP;
نیازی نیست آدرسهای IP حتماً در پرونده پیکربندی مشخص شوند.
یک بخش server بدون آدرسهای IP غیرفعال خواهد ماند تا زمانی که با استفاده از pdnsd\-ctl (ابزار کنترل pdnsd) یک یا چند آدرس به آن اختصاص یابد.
.br
اگر pdnsd با پشتیبانی از هر دو پروتکل IPv4 و IPv6 کامپایل شده باشد، هر آدرس IPv6 که در اینجا مشخص کنید با یک پیام هشدار نادیده گرفته میشود، مگر اینکه pdnsd در حالت IPv6 در حال اجرا باشد.
بنابراین، مگر اینکه pdnsd بهطور پیشفرض برای راهاندازی در حالت IPv6 کامپایل شده باشد، باید ابتدا از گزینه خط فرمان \-6 استفاده کنید یا run_ipv4=off را تنظیم نمایید (بخش global را ببینید) تا اطمینان یابید که آدرسهای IPv6 بهدرستی تجزیه میشوند.
.br
اگر pdnsd در حالت IPv6 در حال اجرا باشد و یک آدرس IPv4 در اینجا مشخص کنید، بهطور خودکار به یک آدرس IPv6 نگاشت خواهد شد.
.TP
.B file=\fIstring\fP;
\fIجدید در نسخه 1.2:\fP این گزینه به شما امکان میدهد نام پروندهای به سبک resolv.conf را وارد کنید.
از خطوطی که با کلیدواژه nameserver شروع میشوند، فیلد دوم بهعنوان آدرس IP تجزیه میشود، درست مانند اینکه با گزینه ip= مشخص شده باشد. بقیه خطوط نادیده گرفته خواهند شد.
اگر محتویات پرونده در حین اجرای pdnsd تغییر کند، میتوانید با استفاده از pdnsd\-ctl (ابزار کنترل pdnsd) تغییرات را به اطلاع pdnsd برسانید.
این کار معمولاً بهراحتی با قرار دادن دستور "pdnsd\-ctl\ config" در اسکریپتی انجام میشود که هر زمان پیکربندی DNS تغییر میکند بهطور خودکار اجرا میگردد.
.br
برای مثال، فرض کنید یک کلاینت ppp دارید که پیکربندی DNS ارائهدهنده اینترنت شما را در پرونده /etc/ppp/resolv.conf مینویسد و اسکریپت /etc/ppp/ip-up را هنگام برقراری اتصال جدید اجرا میکند. یکی از راههای اطمینان از اینکه pdnsd بهطور خودکار بازپیکربندی میشود، افزودن یک بخش server در پرونده پیکربندی با file=/etc/ppp/resolv.conf و افزودن دستور "pdnsd\-ctl\ config" به /etc/ppp/ip-up است.
.TP
.B port=\fInumber\fP;
پورتی را مشخص میکند که سرور نام راه دور روی آن گوش میدهد. پیشفرض 53 (پورت رسمی dns) است.
.TP
.B uptest=(ping|none|if|dev|diald|exec|query);
روش بررسی در دسترس بودن سرور را تعیین میکند. روشهای تعریفشده در حال حاضر عبارتند از:
.IP
\(bu \fBping\fP: یک درخواست ICMP_ECHO به سرور ارسال میکند. اگر در مدت سرآمد پاسخ ندهد، تا بررسی بعدی بهعنوان غیرقابل دسترس در نظر گرفته میشود.
.IP
\(bu \fBnone\fP: وضعیت در دسترس بودن تغییر نمیکند، فقط برچسب زمانی بهروزرسانی میشود.
.IP
\(bu \fBif\fP: بررسی میکند که آیا رابط شبکه (مشخصشده در گزینه interface=) وجود دارد و فعال و در حال کار است یا خیر. این ویژگی در حال حاضر برای تمام رابطهای شبکه "معمولی"، رابطهایی که هنگام قطع شدن ناپدید میشوند (مانند ppp?)، و علاوه بر آن برای رابطهای isdn لینوکس (از هسته 2.2) کار میکند. توجه داشته باشید که به یک پرونده دستگاه /dev/isdninfo (major#45, minor#255) نیاز دارید، وگرنه تست فعال بودن isdn همیشه با شکست مواجه خواهد شد.
.IP
\(bu \fBdev\fP و \fBdiald\fP: یک بررسی if انجام میدهد و در صورت موفقیت، علاوه بر آن بررسی میکند که آیا برنامهای در حال اجراست که یک دستگاه (مودم) مشخص را قفل کرده باشد یا خیر. پارامترهای مورد نیاز عبارتند از یک رابط (مشخصشده مانند تست if، مثلاً "ppp0") و یک دستگاه نسبت به /dev (مثلاً "modem" برای /dev/modem که با استفاده از گزینه device= مشخص شده است).
سپس pdnsd به دنبال پرونده pid برای رابط دادهشده در /var/lock (مثلاً /var/run/ppp0.pid) و یک پرونده قفل برای دستگاه دادهشده (مثلاً /var/lock/LCK..modem) میگردد، و سپس بررسی میکند که آیا فرآیند قفلکننده همان فرآیندی است که پرونده pid را ایجاد کرده و آیا این فرآیند هنوز زنده است یا خیر. اگر چنین باشد، تست معمولی if برای رابط دادهشده اجرا میشود.
.br
گزینه dev برای اتصال تلفنی بر حسب تقاضا (dial-on-demand) در pppd است، و diald نیز همین کار را برای کاربران diald انجام میدهد.
.IP
\(bu \fBexec\fP: یک دستور معین را در شل /bin/sh اجرا میکند
(بهصورت /bin/sh \-c )
و نتیجه (کد خروجی آخرین دستور) را به شیوه مدیریت کدهای خروجی توسط شل ارزیابی میکند، یعنی 0 نشاندهنده موفقیت و تمام مقادیر دیگر نشاندهنده شکست است. نام فرآیند شل uptest_sh خواهد بود. دستور با گزینه uptest_cmd داده میشود (به زیر مراجعه کنید).
برای مسائل امنیتی، مدخل مربوط به آن را نیز بررسی کنید.
.IP
\(bu \fBquery\fP: \fIجدید در نسخه 1.2:\fP
این ویژگی مانند تست ping عمل میکند، با این تفاوت که یک پرسوجوی DNS (خالی) به سرور راه دور ارسال مینماید.
اگر سرور پاسخی با ساختار صحیح در بازه زمانی سرآمد بازگرداند (بهجز SERVFAIL)، سرور در دسترس در نظر گرفته خواهد شد.
این تست زمانی مفید است که سرور راه دور اصلاً به درخواستهای ICMP_ECHO پاسخ ندهد، که متأسفانه این روزها بسیار رایج است.
همچنین ممکن است رخ دهد که سرور راه دور آنلاین باشد اما پرسوجوهای خالی DNS را نادیده بگیرد.
در این صورت باید گزینه query_test_name را تنظیم کنید (به زیر مراجعه کنید).
در بسیاری از موارد این تست شاخص مطمئنتری برای در دسترس بودن نسبت به موارد یادشده قبلی خواهد بود.
مقدار پیشفرض \fBnone\fP است.
\fBنکته\fP: اگر از اتصال تلفنی بر حسب تقاضا استفاده میکنید، از none، if،
dev، diald یا exec استفاده کنید،
زیرا ping یا query بستهها را در فواصل مشخص ارسال میکنند و رابط شبکه دائماً شمارهگیری خواهد کرد!
.TP
.B ping_timeout=\fInumber\fP;
سرآمد زمانی را برای تست ping بر حسب دهم ثانیه تعیین میکند
(این واحد به دلایل سازگاری با گذشته استفاده میشود؛ در واقع پیادهسازی فعلی تنها با دقت یک ثانیه عمل میکند).
.br
پیشفرض 600 (یک دقیقه) است.
.TP
.B ping_ip=\fIstring\fP;
آدرس IP برای تست ping. پیشفرض، آدرس IP همان سرور نام است.
.TP
.B query_test_name=\fIstring\fP;
\fIجدید در نسخه 1.2.9:\fP
نامی را که باید در تست در دسترس بودن uptest=query مورد پرسوجو قرار گیرد تعیین میکند.
اگر رشته ثابت بدون نقلقول none باشد،
یک پرسوجوی خالی استفاده میشود (پیشفرض همین است)، در غیر این صورت پرسوجویی از نوع A برای نام دامنه مشخصشده در اینجا ارسال خواهد شد. برای موفقیتآمیز بودن تست در دسترس بودن، الزامی نیست که نام دامنه حتماً وجود داشته باشد یا رکوردی از نوع A داشته باشد.
.br
اگر سرور راه دور پرسوجوهای خالی را نادیده میگیرد، احتمالاً میخواهید query_test_name="." (دامنه ریشه) را تنظیم کنید.
.TP
.B uptest_cmd=\fIstring\fP,\fIstring\fP;
یا
.PD 0
.TP
.PD
.B uptest_cmd=\fIstring\fP;
دستور مربوط به عملکرد uptest=exec را روی رشته اول تنظیم میکند.
اگر رشته دوم داده شود، کاربری را مشخص میکند که دستور با شناسه کاربر و شناسه گروه اصلی او اجرا میشود.
.br
این گزینه بهویژه زمانی مفید است که سرور را بهعنوان کاربر ریشه (root) اجرا میکنید، اما نمیخواهید تست فعال بودن با امتیازات ریشه اجرا شود.
در واقع، تا جایی که میتوانید هرگز نباید تست فعال بودن را بهعنوان ریشه اجرا کنید.
.br
اگر سرور بهصورت setuid یا setgid اجرا میشود، امتیازات بهدستآمده حتی قبل از تغییر هویت به کاربر تعیینشده تلاش میشود سلب شوند تا از حفرههای امنیتی setuid/gid جلوگیری گردد (در غیر این صورت، اگر فایل اجرایی را setuid کنید، هر کاربری ممکن است دستوراتی را بهعنوان ریشه اجرا نماید).
.br
\fBتوجه داشته باشید که این کار همیشه امکانپذیر نیست و pdnsd هرگز نباید بهصورت setuid یا setgid نصب شود.\fP
دستور با استفاده از /bin/sh اجرا میشود، بنابراین میتوانید از دستورات داخلی شل استفاده کنید.
.TP
.B interval=(\fItimespec\fP|onquery|ontimeout);
بازه زمانی تست فعال بودن سرور را تنظیم میکند. پیشفرض ۹۰۰ ثانیه است؛
با این حال، زمانی که یک پرسوجو با سرآمد مواجه میشود، تستی تحمیل شده و برچسب زمانی در آن هنگام بازنشانی میگردد.
.br
اگر به جای سرآمد، onquery را مشخص کنید، رابط شبکه پیش از هر پرسوجو آزمایش خواهد شد. این کار برای جلوگیری از شمارهگیری خودکار رابطها (diald/pppd یا ippp) در هنگام پرسوجوهای dns است. هدف آن استفاده در ارتباط با یک تست فعال بودن سنجش رابط است.
.br
توجه داشته باشید که با استفاده از uptest=exec، ممکن است در ماشینهای کند هنگام استفاده از این گزینه با مشکلات کارایی مواجه شوید.
از onquery همراه با uptest=ping یا uptest=query استفاده نکنید، زیرا اگر سرور پاسخ ندهد میتواند باعث تأخیر شود
(بهعلاوه، در هر صورت چندان منطقی نیست).
همچنین توجه داشته باشید که استفاده از onquery تضمینی برای عدم استفاده از رابط شبکه نیست. هنگامی که یک سرور dns دیگر (که در دسترس است) به pdnsd بگوید برای دریافت داده از یک سرور dns سوم پرسوجو کند، pdnsd این کار را انجام خواهد داد و راهی برای بررسی اینکه آیا این کار باعث شمارهگیری رابط میشود یا خیر ندارد.
با این حال این مورد باید وضعیتی نادر باشد.
.br
\fIجدید در نسخه 1.2.3:\fP
احتمال سوم مشخص کردن interval=ontimeout است.
در این حالت، سرور در هنگام راهاندازی/بازپیکربندی و همچنین در فواصل منظم آزمایش نمیشود، بلکه تنها پس از اینکه پرسوجوی DNS به یک سرور با سرآمد مواجه شد بررسی میگردد. انواع خاصی از مشکلات شبکه مانند رد اتصال (refused connection) نیز باعث میشوند سرور غیرقابل دسترس در نظر گرفته شود.
با این حال، هنگامی که یک سرور مرده (dead) اعلام شد، دیگر هرگز در نظر گرفته نمیشود مگر اینکه با استفاده از دستور pdnsd\-ctl config یا server احیا گردد.
ایده پشت این گزینه این است که با فرض در دسترس بودن تمام سرورها تا زمانی که دلیلی بر خلاف آن وجود داشته باشد، تستهای در دسترس بودن به حداقل برسد.
.TP
.B interface=\fIstring\fP;
رابط شبکه (یا دستگاه شبکه، مثلاً "eth0") برای گزینه uptest=if.
اگر uptest=if مشخص شده باشد، باید تعیین شود.
.TP
.B device=\fIstring\fP;
دستگاه (مودم) که برای تست dev استفاده میشود. اگر از این گزینه برای تست ppp شمارهگیری بر حسب تقاضا (همراه با uptest=dev) استفاده میکنید، باید دستگاهی را که برای pppd خود استفاده میکنید در اینجا وارد کنید، مثلاً modem برای /dev/modem.
.br
اگر uptest=dev مشخص شده باشد، باید تعیین شود.
.TP
.B timeout=\fItimespec\fP;
سرآمد زمانی را برای پرسوجوی dns تنظیم میکند. پیشفرض ۱۲۰ ثانیه است. احتمالاً میخواهید این مقدار را کمتر تنظیم کنید.
.br
سرآمدهای مشخصشده در پرونده پیکربندی فقط بهعنوان حداقل مدت زمان انتظار برای پاسخ در نظر گرفته میشوند. پرسوجوها به یک سرور راه دور لغو نمیشوند تا زمانی که پاسخی مفید دریافت شود، یا تمام پرسوجوهای دیگر با سرآمد مواجه شده یا شکست بخورند.
.br
اگر گزینه سرآمد سراسری (global timeout) را نیز تنظیم کردهاید، ممکن است بخواهید مقدار نسبتاً کوچکی را در اینجا تعیین کنید.
برای معنای آن، توضیحات گزینه timeout در بخش global را ببینید.
.TP
.B purge_cache=(on|off);
در هر رکورد dns دریافت شده، یک مهلت زمانی کَش داده شده است که مشخص میکند دادههای دریافت شده تا چه مدت میتوانند کَش شوند قبل از اینکه نیاز به بارگیری مجدد داشته باشند. اگر purge_cache روی off تنظیم شود، رکوردهای منقضیشده پاک نمیشوند
(مگر اینکه اندازه کَش از حد مجاز فراتر رود که در این صورت قدیمیترین رکوردها پاک میشوند).
در عوض، اگر نتوان آنها را با موفقیت بهروزرسانی کرد (مثلاً به این دلیل که تمام سرورها قطع هستند)، همچنان ارائه میشوند.
.br
پیشفرض off است.
.TP
.B caching=(on|off);
مشخص میکند که آیا کَشسازی برای این سرور اصلاً انجام شود یا خیر. پیشفرض on است.
.TP
.B lean_query=(on|off);
مشخص میکند که آیا از حالت پرسوجوی "کمحجم" (lean) استفاده شود یا خیر. در این حالت، تنها اطلاعاتی که واقعاً از pdnsd پرسیده شده است تفکیک و کَش میشوند. این کار این مزیت را دارد که معمولاً فضای کَش کمتری مصرف میشود و پرسوجو معمولاً سریعتر است. در ۹۰٪ موارد، در هر صورت فقط رکوردهای آدرس (A) مورد نیاز هستند. در صورت خاموش بودن، pdnsd همیشه تمام دادههایی را که میتواند درباره یک میزبان پیدا کند کَش میکند و بهطور مشخص تمام رکوردهای موجود را درخواست خواهد کرد
(خوب، حداقل این یک تقریب خوب از کاری است که واقعاً انجام میدهد).
این امر البته اندازه بستههای پاسخ را افزایش میدهد.
.br
برخی سرورهای نام معیوب ممکن است در صورتی که تمام رکوردها درخواست نشده باشد، رکوردهای CNAME را تحویل ندهند. مشخص نیست آیا چنین سرورهایی هنوز وجود دارند یا خیر، اما اگر در تفکیک نامهای میزبان خاصی مشکل دارید، خاموش کردن این گزینه را امتحان کنید.
.br
یک نکته پایانی: اگر از چندین pdnsd استفاده میکنید که به یکدیگر دسترسی دارند، روشن کردن این گزینه احتمالاً یک برد بزرگ است.
.br
این گزینه بهطور پیشفرض on است.
.TP
.B edns_query=(on|off);
\fIجدید در نسخه 1.2.9:\fP
مشخص میکند که آیا از EDNS (سازوکارهای توسعه برای DNS) برای پرسوجوهای خروجی استفاده شود یا خیر.
در حال حاضر این ویژگی تنها برای مجاز ساختن اندازههای پیام UDP بزرگتر از ۵۱۲ بایت مفید است.
توجه داشته باشید که فعال کردن این گزینه میتواند در ترکیب با برخی سیستمها یا نرمافزارهای قدیمی، از جمله متأسفانه نسخههای قبلی pdnsd، مشکلاتی ایجاد کند.
.br
پیشفرض off است، اما اگر شبکه شما میتواند بارهای کاری (payloads) UDP بهمراتب بزرگتر از ۵۱۲ بایت را مدیریت کند، مقدار توصیهشده on است.
.br
توجه داشته باشید که این گزینه فقط بر پرسوجوهای خروجی تأثیر میگذارد. اگر pdnsd پرسوجویی را با استفاده از EDNS دریافت کند، بدون در نظر گرفتن مقدار این گزینه، با استفاده از EDNS پاسخ خواهد داد.
همچنین گزینه udpbufsize را در بالا ببینید.
.TP
.B scheme=\fIstring\fP;
میتوانید یک طرح pcmcia-cs را مشخص کنید که علاوه بر تستهای در دسترس بودن استفاده شود. اگر طرحی را در اینجا مشخص کنید، سروری که این بخش برای آن است تنها در صورتی پرسوجو میشود که طرح دادهشده فعال باشد. نویسههای عام شل (* و ?) در رشته تحت معانی خاص خود مجاز هستند. برای کارکرد این گزینه باید از گزینه scheme_file در بخش global استفاده کنید.
.TP
.B preset=(on|off);
این گزینه به شما امکان میدهد وضعیت اولیه سرور را قبل از انجام هرگونه تست در دسترس بودن مشخص کنید.
مقدار on مشخص میکند که سرور در دسترس فرض میشود. پیشفرض on است.
این گزینه بهویژه زمانی مفید است که uptest=none; را تنظیم کردهاید و میخواهید وضعیت یک سرور را تنها از طریق pdnsd\-ctl تغییر دهید.
.TP
.B proxy_only=(on|off);
هنگامی که این گزینه روی on تنظیم شود، پاسخهای ارائهشده توسط سرورها همیشه پذیرفته میشوند و از هیچ سرور دیگری (همانطور که برای مثال در رکوردهای NS دامنه پرسوجو مشخص شده است) پرسوجو نمیشود. اگر این گزینه را روشن نکنید، pdnsd در برخی موارد (بهویژه هنگام پردازش پرسوجوهای ANY) چنین پرسوجوهایی را انجام خواهد داد.
.br
این گزینه زمانی مفید است که بنا به دلایلی (مثلاً زمانی که یک فایروال چنین پرسوجوهایی را مسدود میکند) نمیخواهید pdnsd به سرورهای خارجی متصل شود.
.br
توصیه میشود هنگام استفاده از این گزینه، lean_query را روشن کنید.
.br
پیشفرض off است.
.TP
.B root_server=(on|off|discover);
اگر سرورهای مشخصشده در یک بخش سرورهای ریشه هستند، این گزینه را روی on تنظیم کنید.
یک سرور ریشه معمولاً در پاسخ خود فقط کارگزارهای نام برای دامنه سطحبالا (TLD) را ارائه میدهد.
تنظیم root_server=on باعث میشود pdnsd تلاش کند از اطلاعات کَششده درباره دامنههای سطحبالا برای کاهش تعداد پرسوجوها به سرورهای ریشه استفاده کند و تفکیک نامهای جدید را کارآمدتر سازد.
میتوانید با اجرای دستور
"dig\ .\ ns"
فهرستی از سرورهای ریشه در دسترس را دریافت کنید.
.br
این گزینه همچنین در صورت استفاده از گزینه delegation_only ضروری است.
.br
\fIجدید در نسخه 1.2.8:\fP این گزینه ممکن است روی "discover" نیز تنظیم شود.
این کار باعث میشود pdnsd از سرورهای ارائهشده با گزینه ip= پرسوجو کند تا فهرست کامل سرورهای ریشه را به دست آورد. آدرسهای سرور ریشه جایگزین آدرسهای مشخصشده با گزینه ip= خواهند شد.
این کار تنها یکبار در هنگام راهاندازی یا پس از دستور "pdnsd\-ctl\ config" انجام میشود.
در این حالت کارگزارهای نام مشخصشده با گزینه ip= نیازی نیست حتماً سرور ریشه باشند، آنها فقط باید نامها و آدرسهای سرورهای ریشه را بدانند.
پس از کشف سرور ریشه، pdnsd دقیقاً بهگونهای رفتار خواهد کرد که گویی root_server=on مشخص شده بود.
.br
پیشفرض off است.
.TP
.B randomize_servers=(on|off);
\fIجدید در نسخه 1.2.6:\fP این گزینه را روی on تنظیم کنید تا به هر سرور نام در این بخش شانس برابری برای پرسوجو شدن داده شود. اگر این گزینه خاموش باشد، سرورهای نام همیشه با شروع از اولین سرور مشخصشده مورد پرسش قرار میگیرند. حتی با روشن بودن این گزینه، ترتیب پرسوجو واقعاً تصادفی نیست. تنها سرور اول بهطور تصادفی انتخاب میشود؛ سرورهای بعدی به ترتیب پشت سر هم پرسوجو میشوند و با رسیدن به انتهای فهرست به ابتدای آن بازمیگردند. توجه داشته باشید که این گزینه فقط بر ترتیب درون یک بخش تأثیر میگذارد. سرورهای موجود در بخش اول (فعال) همیشه قبل از سرورهای بخش دوم پرسوجو میشوند، و غیره.
.br
پیشفرض off است، اما اگر در حال تفکیک از سرورهای ریشه هستید، تنظیم این گزینه روی on بهشدت توصیه میشود. اگر root_server=on باشد، این گزینه بر ترتیب پرسوجوی کارگزارهای نام برای دامنههای سطحبالا نیز تأثیر میگذارد.
.TP
.B reject=\fIstring\fP;
\fIجدید در نسخه 1.2.6:\fP از این گزینه میتوان برای رد پاسخهایی که حاوی آدرسهای IP خاصی هستند توسط pdnsd استفاده کرد. میتوانید یک آدرس IP تکی را مشخص کنید که دقیقاً تطبیق داده میشود، یا محدودهای از آدرسها را با استفاده از یک جفت آدرس/ماسک (address/mask) تعیین نمایید.
ماسک میتواند بهعنوان یک عدد صحیح ساده مشخص شود که تعداد بیتهای ۱ اولیه در ماسک را نشان میدهد، یا در قالب معمول نشانی IP نوشته شود. آدرسهای IP ممکن است IPv4 یا IPv6 باشند
(به شرطی که پشتیبانی کافی در کتابخانههای C وجود داشته باشد و پشتیبانی از رکوردهای AAAA غیرفعال نشده باشد).
هنگامی که آدرسهای موجود در فهرست رد با آدرسهای موجود در پاسخ مقایسه میشوند، فقط بیتهای متناظر با بیتهای تنظیمشده در نتماسک معنادار هستند و بقیه نادیده گرفته میشوند.
.br
میتوان چندین آدرس یا جفت آدرس/ماسک را مشخص کرد؛ این کار را میتوان با وارد کردن چندین خط به فرم reject=\fIstring\fP;
یا یک خط تکی مانند این انجام داد:
reject=\fIstring\fP,\fIstring\fP,\fIstring\fP;
نحوه واکنش pdnsd هنگامی که یک آدرس در پاسخ با یکی از آدرسهای موجود در فهرست رد مطابقت دارد، به گزینه reject_policy بستگی دارد؛ به زیر مراجعه کنید.
.TP
.B reject_policy=(fail|negate);
\fIجدید در نسخه 1.2.6:\fP
این گزینه تعیین میکند که pdnsd چه کاری انجام دهد هنگامی که یک آدرس در پاسخ از یک سرور نام با فهرست رد مطابقت دارد (به بالا مراجعه کنید). اگر این گزینه روی fail تنظیم شود، pdnsd سرور دیگری را امتحان میکند، یا اگر سرور دیگری برای امتحان کردن وجود نداشته باشد، پاسخ SERVFAIL را بازمیگرداند. اگر این گزینه روی negate تنظیم شود، pdnsd بلافاصله پاسخ NXDOMAIN (دامنه ناشناخته) را بدون پرسوجو از سرورهای اضافی بازمیگرداند. تنظیم fail زمانی مفید است که شما همیشه به سرورهای این بخش اعتماد ندارید، اما به سرورهای بخش بعدی اعتماد دارید. تنظیم negate را میتوان برای سانسور کامل برخی آدرسهای IP خاص استفاده کرد. در این حالت باید همان فهرست رد را در هر بخش server قرار دهید و همچنین گزینه reject_recursively (به زیر مراجعه کنید) را روی true تنظیم نمایید.
.br
پیشفرض fail است.
.TP
.B reject_recursively=(on|off);
\fIجدید در نسخه 1.2.6:\fP بهطور معمول pdnsd تنها زمانی آدرسهای موجود در فهرست رد را بررسی میکند (به بالا مراجعه کنید) که پاسخ مستقیماً از یک سرور نام فهرستشده در پرونده پیکربندی آمده باشد. با روشن کردن این گزینه (on)، pdnsd این بررسی را برای کارگزارهای نامی که از رکوردهای NS در بخش اعتبارسنجی یک پاسخ قبلی (که ناقص و غیرمعتبر بوده) به دست آمدهاند نیز انجام خواهد داد.
.br
پیشفرض off است.
.TP
.B policy=(included|excluded|simple_only|fqdn_only);
نرمافزار pdnsd از فهرستهای گنجاندن/حذف (inclusion/exclusion) برای بخشهای server پشتیبانی میکند: با گزینههای include= و exclude= (به زیر مراجعه کنید) میتوانید نامهای دامنهای را مشخص کنید که این سرور برای آنها استفاده خواهد شد یا نخواهد شد. اولین تطابق ملاک است (یعنی اولین قاعده include یا exclude در یک بخش server که با یک نام دامنه مطابقت دارد اعمال میشود و جستجو برای سایر قواعد متوقف میگردد). اگر هیچ قاعدهای با یک نام دامنه معین مطابقت نداشت، گزینه policy= تعیین میکند که آیا این سرور برای جستجوی آن نام دامنه استفاده شود یا خیر؛ هنگامی که included داده شود، از سرور پرسش خواهد شد و هنگامی که excluded داده شود، پرسش نخواهد شد.
اگر simple_only داده شود، سرور در صورتی استفاده خواهد شد که نام مورد نظر برای جستجو یک نام دامنه ساده (تکبخشی / single-label) باشد؛ از سوی دیگر اگر fqdn_only داده شود، سرور تنها برای نامهایی که شامل دو یا چند بخش هستند (یعنی نام حداقل یک نقطه در بین خود دارد) استفاده خواهد شد.
.br
اگر هیچ سروری برای یک دامنه مورد پرسش در دسترس نباشد، pdnsd یک پیام خطا به کلاینت بازمیگرداند که معمولاً تلاشهای کلاینت برای تفکیک یک دامنه خاص از این سرور را متوقف میکند (مثلاً تحلیلگر libc در صورتی که هیچ سرور دیگری در resolv.conf در دسترس نباشد، خطایی را به برنامهای که تلاش کرده دامنه را تفکیک کند بازمیگرداند).
این ممکن است گاهی مفید باشد.
.br
\fIنکته\fP: مقادیر ثابت simple_only و fqdn_only توسط Paul Rombouts اضافه شدهاند.
آنها برای کنترل اینکه کدام کارگزارهای نام (در صورت وجود) توسط pdnsd برای تفکیک نامهای میزبان ساده (تکبرچسبی) استفاده شوند مفید هستند.
عبارت fqdn_only پیشتر مخفف "fully qualified domain name only" بود، اما این در واقع یک نامگذاری نادرست است. نامها در پرسوجوهای دریافتشده توسط pdnsd همیشه کاملاً واجد شرایط (fully qualified) در نظر گرفته میشوند. اگر دقیقاً متوجه نمیشوید که گزینههای simple_only و fqdn_only برای چه کاری مفید هستند، احتمالاً بهتر است از آنها استفاده نکنید.
.br
پیشفرض برای این گزینه included است.
.TP
.B include=\fIstring\fP;
این گزینه مدخلی را به فهرست حذف/گنجاندن اضافه میکند. اگر دامنهای با نام دادهشده بهعنوان رشته مطابقت داشته باشد، در صورتی که این اولین قاعده تطبیقیافته باشد از سرور پرسوجو میشود (همچنین مدخل مربوط به policy را ببینید).
.br
اگر نام دادهشده با یک نقطه شروع شود، کل زیردامنه نام دادهشده شامل خود آن نام مطابقت داده میشود؛ بهعنوان مثال ".foo.bar." با نامهای دامنه a.foo.bar.، a.b.c.foo.bar. و foo.bar. مطابقت خواهد داشت.
.br
اگر با نقطه شروع نشود، تنها دقیقاً نام دادهشده (البته بدون در نظر گرفتن بزرگی و کوچکی حروف) مطابقت داده خواهد شد (راهنمایی: اگر میخواهید تمام زیردامنهها را شامل کنید اما خود دامنه دادهشده را نه، یک قاعده exclude تطابق دقیق را قبل از قاعده include قرار دهید، مثلاً:
exclude="foo.bar."; include=".foo.bar.";).
.br
نسخههای قبلی pdnsd الزامی کرده بودند که نامهای ارائهشده با این گزینه و گزینه بعدی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd در صورت عدم وجود نقطه در انتها، بهطور خودکار آن را اضافه میکند.
.br
اکنون pdnsd یک ساختار فشردهتر را برای افزودن چندین مدخل "include" در یک خط میپذیرد، مثلاً:
include=".foo",".bar",".my.dom";
.TP
.B exclude=\fIstring\fP;
این گزینه مدخلی را به فهرست حذف/گنجاندن اضافه میکند. اگر دامنهای با نام دادهشده بهعنوان رشته مطابقت داشته باشد، در صورتی که این اولین قاعده تطبیقیافته باشد از سرور پرسوجو نمیشود (همچنین مدخل مربوط به policy را ببینید).
.br
اگر نام دادهشده با یک نقطه شروع شود، کل زیردامنه نام دادهشده شامل خود آن نام مطابقت داده میشود؛ بهعنوان مثال ".foo.bar." با نامهای دامنه a.foo.bar.، a.b.c.foo.bar. و foo.bar. مطابقت خواهد داشت.
.br
اگر با نقطه شروع نشود، تنها دقیقاً نام دادهشده (البته بدون در نظر گرفتن بزرگی و کوچکی حروف) مطابقت داده خواهد شد (راهنمایی: اگر میخواهید تمام زیردامنهها را حذف کنید اما خود دامنه دادهشده را نه، یک قاعده include تطابق دقیق را قبل از قاعده exclude قرار دهید، مثلاً:
include="foo.bar."; exclude=".foo.bar.";).
.br
اکنون pdnsd ساختار فشردهتری را نیز برای افزودن چندین مدخل "exclude" در یک خط میپذیرد، مثلاً:
exclude=".foo",".bar",".my.dom";
.SS "بخش rr"
هر بخش rr یک رکورد منبع dns را مشخص میکند که بهصورت محلی ذخیره میشود. این بخش به شما امکان میدهد رکوردهای dns خودتان را مشخص کنید که توسط pdnsd به شکلی محدود ارائه میشوند.
تنها رکوردهای A، PTR، CNAME، MX، NS و SOA پیادهسازی شدهاند.
.br
هدف این گزینه این است که به شما امکان دهد RRهایی را برای 1.0.0.127.in-addr.arpa. و localhost. (و شاید حتی یک یا دو میزبان) بدون نیاز به راهاندازی یک named اضافی تعریف کنید اگر کارگزارهای نام کَشکننده شما آن رکوردها را ارائه نمیدهند.
این ویژگی برای کار بهعنوان یک سرور نام تمامعیار در نظر گرفته \fBنشده\fP و قادر به انجام آن نیز نیست.
.TP
.B name=\fIstring\fP;
نام رکوردهای منبع را مشخص میکند، یعنی نام دامنه منبعی که رکورد توصیف میکند. این گزینه باید قبل از هرگونه رکورد a، ptr، cname، mx، ns یا soa مشخص شود.
نامها بهعنوان نامهای دامنه مطلق تفسیر میشوند
(یعنی pdnsd فرض میکند آنها به دامنه ریشه ختم میشوند).
برای این آرگومان و تمام آرگومانهای بعدی که نام دامنه میگیرند، باید نامهای دامنه را با نشانهگذاری نقطهدار مشخص کنید (مثال: venera.isi.edu.).
.br
نسخههای قبلی pdnsd نیازمند آن بودند که نامهای دامنه دادهشده در پرونده پیکربندی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd بهطور خودکار فرض میکند که در صورت عدم وجود، یک نقطه در انتها قرار دارد.
.br
\fIجدید در نسخه 1.2:\fP همچنین امکانپذیر است نامی را مشخص کنید که با برچسب * شروع میشود. چنین نامی یک وایلدکارت (wildcard) نامیده میشود. نویسه * در یک وایلدکارت میتواند با یک یا چند بخش در یک نام پرسیده شده مطابقت داشته باشد، اما تنها با بخشهای کامل.
هر نویسه * دیگر در یک وایلدکارت به جز نویسه ابتدایی، تنها با یک نویسه واقعی * تطابق خواهد یافت.
.br
برای مثال، *.mydomain با a.mydomain یا www.a.mydomain مطابقت دارد، اما با mydomain مطابقت ندارد. عبارت *.a*.mydomain با www.a*.mydomain تطابق خواهد داشت، اما با www.ab.mydomain تطابق ندارد.
عبارت *a.mydomain تنها با خودش مطابقت خواهد داشت.
.br
قبل از اینکه بتوانید یک بخش rr با name=*.mydomain مشخص کنید، باید رکوردهایی را برای mydomain تعریف نمایید، معمولاً رکوردهای NS و/یا SOA.
مثال:
.DS L
rr {
name = mydomain;
ns = localhost;
soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400;
}
rr {
name = *.mydomain;
a = 192.168.1.10;
}
.DE
در این مثال، www.mydomain و ftp.mydomain به آدرس عددی 192.168.1.10 تفکیک خواهند شد (مگر اینکه بخشهای rr را بهصراحت برای تعیین آدرسهای متفاوت برای www.mydomain یا ftp.mydomain اضافه کنید).
اگر میخواهید mydomain نیز به یک آدرس عددی تفکیک شود، یک رکورد A به بخش rr اول اضافه کنید.
.TP
.B ttl=\fItimespec\fP;
زمان حیات (ttl) را برای تمام رکوردهای منبع در این بخش پس از این مدخل مشخص میکند.
این مقدار را میتوان مجدداً بازتعریف کرد. مقدار پیشفرض ۸۶۴۰۰ ثانیه (معادل یک روز) است.
.TP
.B authrec=(on|off);
اگر این گزینه روشن باشد، pdnsd رکوردهای محلی معتبر (authoritative) برای این بخش rr ایجاد خواهد کرد.
این بدان معناست که pdnsd رکورد دامنه را پرچمگذاری میکند تا رکوردهایی از این دامنه که در کَش وجود ندارند بهعنوان ناموجود تلقی شوند؛ یعنی هیچ سرور دیگری برای آن نوع رکورد پرسوجو نمیشود و پاسخی حاوی هیچیک از آن رکوردها بازگردانده میشود. این رفتار در اغلب اوقات همان چیزی است که افراد میخواهند: اگر یک رکورد A برای یک میزبان اضافه کنید و رکورد AAAA نداشته باشد (بنابراین آدرس IPv6 ندارد)، معمولاً نمیخواهید سایر کارگزارهای نام برای آن پرسوجو شوند.
.br
این گزینه بهطور پیشفرض on است.
.br
لطفاً توجه داشته باشید که این گزینه تنها در صورتی تأثیر دارد که قبل از گزینه name قرار گیرد!
.TP
.B reverse=(on|off);
\fIجدید در نسخه 1.2:\fP اگر میخواهید یک نام تعریفشده بهصورت محلی به یک آدرس عددی تفکیک شود و بالعکس، میتوانید با تنظیم reverse=on قبل از تعریف رکورد A (به زیر مراجعه کنید) به این هدف دست یابید. روش جایگزین، تعریف یک رکورد جداگانه PTR است، اما احتمالاً این گزینه را بسیار راحتتر خواهید یافت.
.br
پیشفرض off است.
.TP
.B a=\fIstring\fP;
یک رکورد A (آدرس میزبان) تعریف میکند. آرگومان یک آدرس IPv4 با نشانهگذاری نقطهدار است.
pdnsd این آدرس را برای نام میزبان ارائهشده در گزینه name ارائه خواهد داد.
.br
به شرطی که پشتیبانی کافی در کتابخانههای C وجود داشته باشد و پشتیبانی از رکوردهای AAAA غیرفعال نشده باشد، رشته آرگومان میتواند یک آدرس IPv6 نیز باشد که در این صورت یک رکورد AAAA تعریف خواهد شد.
.br
این گزینه میتواند چندین بار درون یک بخش rr استفاده شود و باعث تعریف چندین آدرس برای نام گردد. با این حال، اگر آدرسهای مختلف را در بخشهای rr متفاوتی برای همان نام قرار دهید، تعریف موجود در آخرین بخش rr تعاریف موجود در بخشهای قبلی را لغو خواهد کرد.
.TP
.B ptr=\fIstring\fP;
یک رکورد PTR (اشارهگر نام دامنه) تعریف میکند. آرگومان یک نام میزبان با نشانهگذاری نقطهدار است (name را ببینید). رکورد ptr برای تفکیک آدرسها به نامها است. بهعنوان مثال، اگر میخواهید آدرس 127.0.0.1 به localhost و localhost به 127.0.0.1 تفکیک شود، به چیزی شبیه به بخشهای زیر نیاز دارید:
.br
.DS L
rr {
name = localhost;
a = 127.0.0.1;
owner = localhost;
soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400;
}
rr {
name = 1.0.0.127.in-addr.arpa;
ptr = localhost;
owner = localhost;
soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400;
}
.DE
بخش دوم برای تفکیک معکوس است و از گزینه ptr استفاده میکند.
توجه داشته باشید که میتوانید همان اثر را صرفاً با مشخص کردن اولین بخش rr همراه با reverse=on به دست آورید.
.br
موضوع خاصی درباره نام موجود در بخش دوم وجود دارد:
هنگامی که یک تحلیلگر میخواهد نام میزبانی را از یک آدرس اینترنتی دریافت کند، آدرسی را تشکیل میدهد که از آدرس IP با ترتیب بایت معکوس ساخته شده است
(1.0.0.127 به جای 127.0.0.1) که در آن هر بایت از آدرس نوشتهشده بهعنوان عدد، یک زیردامنه را تحت دامنه in-addr.arpa تشکیل میدهد.
.br
بنابراین، اگر میخواهید آدرسی را برای تفکیک معکوس تشکیل دهید، آدرس ip خود را با نشانهگذاری نقطهدار در نظر بگیرید (مثلاً 1.2.3.4)، ترتیب بایتها را معکوس کنید (4.3.2.1) و in-addr.arpa. را به آن اضافه کنید (4.3.2.1.in-addr.arpa.).
سپس، یک بخش rr تعریف کنید که این آدرس را بهعنوان name و نام دامنه متناظر با آن ip را در گزینه ptr ارائه میدهد.
.TP
.B cname=\fIstring\fP;
یک رکورد CNAME (نام متعارف) تعریف میکند.
آرگومان باید یک نام میزبان کاملاً واجد شرایط (FQDN) با نشانهگذاری نقطهدار باشد (name را ببینید).
یک رکورد CNAME معادل DNS برای یک نام مستعار (alias) یا پیوند نمادین (symlink) است.
.br
یک کاربرد مفید برای CNAMEها دادن نامهای مستعار کوتاه و با یادآوری آسان به میزبانهایی با نامهای پیچیده است.
بهعنوان مثال، ممکن است بخواهید نام "news" به سرور اخبار ارائهدهنده خدمات اینترنتی شما به نام "nntp2.myisp.com" ارجاع داده شود.
به جای اضافه کردن یک رکورد A برای "news" با همان آدرس "nntp2.myisp.com"، میتوانید یک CNAME قرار دهید که به "nntp2.myisp.com" اشاره کند، به طوری که اگر آدرس IP سرور اخبار تغییر کند، نیازی به بهروزرسانی رکورد مربوط به "news" نباشد.
.br
برای پیادهسازی این مورد در pdnsd، میتوانید بخش زیر را به پرونده پیکربندی خود اضافه کنید:
.br
.DS L
rr {
name = news;
cname = nntp2.myisp.com;
owner = localhost;
}
.DE
.TP
.B mx=\fIstring\fP,\fInumber\fP;
یک رکورد MX (تبادل نامه) تعریف میکند. رشته، نام میزبان سرور نامه با نشانهگذاری نقطهدار است (name را ببینید).
عدد، سطح اولویت (preference level) را مشخص میکند.
.br
هنگامی که به شخصی نامه ارسال میکنید، نامه شما معمولاً از کلاینت ایمیل شما به یک سرور SMTP میرود.
سپس سرور SMTP رکورد MX دامنه موجود در نشانی ایمیل را بررسی میکند.
برای مثال با joe@example.com، این سرور به دنبال رکورد MX برای example.com میگردد و میفهمد که نام سرور نامه برای آن دامنه، مثلاً mail.example.com است.
سپس سرور SMTP رکورد A را برای mail.example.com دریافت کرده و به سرور نامه متصل میشود.
.br
اگر چندین رکورد MX وجود داشته باشد، سرور SMTP یکی را بر اساس سطح اولویت انتخاب میکند
(با کمترین شماره اولویت شروع کرده و به سمت بالا حرکت میکند).
.br
رکوردهای MX را با pdnsd تعریف نکنید مگر اینکه بدانید در حال انجام چه کاری هستید.
.TP
.B owner=\fIstring\fP;
یا
.PD 0
.TP
.PD
.B ns=\fIstring\fP;
یک رکورد NS (کارگزار نام) تعریف میکند. نام میزبانی را مشخص میکند که باید برای رکوردهایی که در بخش rr تعریف کردهاید مرجع معتبر (authoritative) باشد. این معمولاً میزبانی است که pdnsd روی آن اجرا میشود.
.br
\fIنکته:\fP در نسخههای قبلی pdnsd این گزینه باید قبل از هرگونه مدخل a، ptr، cname، mx یا soa مشخص میشد.
در نسخه 1.2، محدودیتهای این گزینه همانند گزینههای ذکرشده است و باید پس از گزینه name= فهرست شود.
اگر بخواهید از پرونده پیکربندی قدیمی استفاده کنید که owner= را قبل از name= مشخص کرده است، این تغییر ممکن است دردسرساز باشد.
صرفنظر از سازگاری بیشتر، مزیت این است که اکنون میتوانید هر تعداد رکورد NS که دوست دارید مشخص کنید (از جمله صفر).
.TP
.B soa=\fIstring\fP,\fIstring\fP,\fInumber\fP,\fItimespec\fP,\fItimespec\fP,\fItimespec\fP,\fItimespec\fP;
این گزینه یک رکورد soa (شروع مرجعیت / start of authority) را تعریف میکند. رشته اول نام دامنه سرور است و باید برابر با نامی باشد که بهعنوان owner مشخص کردهاید.
.br
رشته دوم آدرس ایمیل مسئول نگهداری سرور نام را مشخص میکند. این رشته نیز بهعنوان یک نام دامنه مشخص میشود، بنابراین باید علامت @ در نام را با یک نقطه (.) جایگزین کنید تا نامی را که باید در اینجا وارد نمایید به دست آورید.
پارامتر بعدی (عدد اول) شماره سریال رکورد است. در صورت تغییر رکورد باید این عدد را افزایش دهید.
.br
پارامتر چهارم سرآمد تازهسازی (refresh timeout) است. این پارامتر مشخص میکند که یک سرور کَشکننده پس از چه مدتی باید برای تازهسازی رکورد کَششده تلاش کند.
.br
پارامتر پنجم زمانی را مشخص میکند که پس از آن، یک سرور کَشکننده باید پس از شکست در تازهسازی، مجدداً برای تازهسازی رکورد تلاش نماید.
.br
پارامتر ششم سرآمدی را مشخص میکند که پس از آن، یک رکورد کَششده در صورت عدم تازهسازی منقضی میشود.
.br
پارامتر هفتم ttl است که در هر rr مشخص میشود و باید همان مقداری باشد که با گزینه ttl داده شده است (اگر ttl را مشخص نکردهاید، از پیشفرض 86400 استفاده کنید).
.TP
.B txt=\fIstring\fP,...,\fIstring\fP;
\fIجدید در نسخه 1.2.9:\fP
یک رکورد TXT تعریف میکند. در اینجا میتوانید یک یا چند رشته را مشخص نمایید.
.SS "بخش neg"
هر بخش neg یک رکورد منبع dns یا یک دامنه dns را مشخص میکند که باید بهصورت محلی بهطور منفی کَش شود. پرسوجوها برای رکوردهای کَششده منفی همواره تا زمانی که رکورد معتبر است بلافاصله با یک خطا یا یک پاسخ خالی بدون پرسوجو از سایر میزبانها پاسخ داده میشوند. رکوردهای تعریفشده با بخشهای neg معتبر باقی میمانند تا زمانی که صراحتاً با استفاده از pdnsd\-ctl توسط کاربر بیاعتبار یا حذف شوند.
.br
این گزینه زمانی مفید است که برنامه خاصی بهطور دورهای میزبانها یا انواع RR ناموجود را درخواست میکند و شما نمیخواهید هر بار که رکورد کَششده منقضی شد، پرسوجویی ارسال شود. مثال: Netscape Communicator در صورت عدم پیکربندی، هنگام راهاندازی سرورهای news و mail را درخواست میکند. اگر فهرست جستجوی dns برای شبکه خود ندارید، میتوانید با مشخص کردن موارد زیر در پرونده پیکربندی خود، پرسوجوهای خروجی برای اینها را مهار کنید:
.br
.DS L
neg {
name = news;
types = domain;
}
neg {
name = mail;
types = domain;
}
.DE
اگر فهرست جستجو دارید، علاوه بر مدخلهای دادهشده در بالا، باید این کار را برای هر مدخل در فهرست جستجوی خود نیز تکرار کنید!
.br
در نسخههای 1.1.11 و بعد از آن، اگر کل دامنهها را به این روش نفی (negate) کنید، تمام زیردامنهها نیز نفی خواهند شد. بنابراین اگر در پرونده پیکربندی عبارت زیر را مشخص کنید:
.br
neg {name=example.com; types=domain;}
این کار همچنین www.example.com، xxx.adserver.example.com و غیره را نیز نفی خواهد کرد.
.TP
.B name=\fIstring\fP;
نام دامنهای را که مدخلهای کَش منفی برای آن ایجاد میشوند مشخص میکند.
این گزینه باید قبل از گزینه types مشخص شود.
نامها بهعنوان نامهای دامنه مطلق تفسیر میشوند (یعنی pdnsd فرض میکند آنها به دامنه ریشه ختم میشوند).
باید نامهای دامنه را با نشانهگذاری نقطهدار مشخص کنید (مثال: venera.isi.edu.).
.br
نسخههای قبلی pdnsd الزامی کرده بودند که نامهای دامنه دادهشده در پرونده پیکربندی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd بهطور خودکار فرض میکند که در صورت عدم وجود، یک نقطه در انتها قرار دارد.
.TP
.B ttl=\fItimespec\fP;
زمان حیات (ttl) را برای تمام رکوردهای منبع در این بخش پس از این مدخل مشخص میکند.
این مقدار را میتوان مجدداً بازتعریف کرد. پیشفرض ۸۶۴۰۰ ثانیه (معادل یک روز) است.
.TP
.B types=(domain|\fIrr_type\fP[,\fIrr_type\fP[,\fIrr_type\fP[,...]]]);
مشخص میکند چه چیزی باید بهصورت منفی کَش شود: مقدار domain کل دامنه را بهصورت منفی کَش میکند؛ متناوباً، میتوانید فهرستی از انواع RR جداشده با کاما را مشخص کنید که قرار است بهطور منفی کَش شوند. میتوانید چندین گزینه types را مشخص کنید، اما domain و انواع RR مانعةالجمع هستند.
.br
انواع RR با استفاده از نامهای رسمی آنها از RFCها با حروف بزرگ مشخص میشوند،
مانند A، CNAME، NS، PTR، MX،
AAAA و غیره.
.br
دستور pdnsd\-ctl\ list\-rrtypes فهرستی کامل از آن انواع را به شما خواهد داد. ابزار pdnsd\-ctl همراه با pdnsd ساخته میشود و در طول make install در همان دایرکتوری باینری pdnsd نصب خواهد شد.
.SS "بخش source"
هر بخش source به شما امکان میدهد به pdnsd اجازه دهید رکوردها را از پروندهای با قالبی شبیه به /etc/hosts بخواند. pdnsd رکوردهایی تولید میکند تا برای هر مدخل در پرونده، آدرس مدخل را از نام میزبان آن و بالعکس تفکیک کند. این روش معمولاً آسانتر از تعریف یک rr برای هر یک از آدرسهای شماست، زیرا localhost و سایر FQDNهای شما معمولاً در /etc/hosts داده شدهاند.
.br
قالب پذیرفتهشده به شرح زیر است: علامت # یک کامنت را آغاز میکند، بقیه خط از اولین رخداد این نویسه به بعد نادیده گرفته میشود. خطوط خالی مجاز هستند.
.br
اولین مدخل در یک خط (که پیش از آن تعداد اختیاری برگه یا فاصله قرار دارد) آدرس IP با نشانهگذاری نقطهدار است؛ مدخل دوم در یک خط (که با تعداد اختیاری برگه یا فاصله از مدخل اول جدا شده است) FQDN (نام دامنه کاملاً واجد شرایط) برای آن IP است. بقیه خط بهطور پیشفرض نادیده گرفته میشود (در پرونده اصلی /etc/hosts، ممکن است حاوی اطلاعاتی باشد که مورد نیاز pdnsd نیست).
.TP
.B owner=\fIstring\fP;
نام میزبانی را که pdnsd روی آن اجرا میشود و در پاسخهای dns (بهویژه رکوردهای کارگزار نام) مشخص میگردد، تعیین میکند.
باید قبل از هر مدخل file مشخص شود.
.br
نامها بهعنوان نامهای دامنه مطلق تفسیر میشوند (یعنی pdnsd فرض میکند آنها به دامنه ریشه ختم میشوند).
باید نامهای دامنه را با نشانهگذاری نقطهدار مشخص کنید (مثال: venera.isi.edu.).
.br
نسخههای قبلی pdnsd الزامی کرده بودند که نامهای دامنه دادهشده در پرونده پیکربندی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd بهطور خودکار فرض میکند که در صورت عدم وجود، یک نقطه در انتها قرار دارد.
.TP
.B ttl=\fItimespec\fP;
زمان حیات (ttl) را برای تمام رکوردهای منبع در این بخش پس از این مدخل مشخص میکند. این مقدار را میتوان مجدداً بازتعریف کرد. پیشفرض ۸۶۴۰۰ ثانیه (معادل یک روز) است.
.TP
.B file=\fIstring\fP;
رشته، نام یک پرونده را مشخص میکند. برای هر مدخل file در یک بخش source، pdnsd تلاش میکند پرونده دادهشده را همانطور که در بالا شرح داده شد بارگیری کند. شکست تنها زمانی اعلام میشود که پرونده باز نشود؛ مدخلهای با ساختار نامعتبر نادیده گرفته خواهند شد.
.TP
.B serve_aliases=(on|off);
اگر این گزینه روشن باشد، pdnsd نامهای مستعار دادهشده در پروندهای به سبک hosts را ارائه خواهد داد.
اینها مدخل سوم در یک خط از پرونده سبک hosts هستند که معمولاً یک "نام کوتاه" برای میزبان ارائه میدهند.
این ویژگی ممکن است برای پشتیبانی از کلاینتهای معیوب بدون گزینه مناسب domain-search استفاده شود.
اگر در یک خط از پرونده هیچ نام مستعاری داده نشده باشد، pdnsd برای آن خط همانند حالت بدون این گزینه عمل میکند.
.br
این ویژگی توسط Bert Frederiks پیشنهاد شده است.
.br
بهطور پیشفرض off است.
.TP
.B authrec=(on|off);
اگر این گزینه روشن باشد، pdnsd با دادههای پرونده hosts رکوردهای محلی معتبر (authoritative) ایجاد خواهد کرد.
لطفاً برای توضیحات دقیقتر درباره معنای این موضوع، به شرح گزینه با همین نام در بخش rr مراجعه کنید. لطفاً توجه داشته باشید که این گزینه تنها برای پروندههایی تأثیر دارد که با گزینههای file پس از این گزینه فراخوانی شده باشند.
.br
این گزینه بهطور پیشفرض on است.
.SS "بخش include"
یک پرونده پیکربندی ممکن است شامل پروندههای پیکربندی دیگر باشد.
با این حال، تنها پرونده پیکربندی سطح بالا میتواند شامل بخشهای global و server باشد،
بنابراین پروندههای include عملاً به بخشهایی محدود میشوند که تعاریف محلی را به کَش اضافه میکنند.
.br
بخشهای include در حال حاضر تنها یک نوع گزینه دارند که ممکن است چندین بار درون یک بخش واحد مشخص شود.
.TP
.B file=\fIstring\fP;
رشته، نام یک پرونده را مشخص میکند. برای هر گزینه file در یک بخش include، pdnsd پرونده دادهشده را همانطور که در بالا شرح داده شد تجزیه خواهد کرد. پرونده ممکن است خودش حاوی بخشهای include باشد، اما pdnsd بهعنوان یک اقدام احتیاطی بررسی میکند که از حداکثر عمق معینی تجاوز نشود تا در برابر احتمال بازگشت بینهایت محافظت به عمل آید.
.SH "نسخه (VERSION)"
.PP
این صفحه راهنما برای نسخه 1.2.9b-par از pdnsd معتبر است.
.SH "همچنین ببینید (SEE ALSO)"
.PP
.BR pdnsd (8),
.BR pdnsd\-ctl (8)
.PP
مستندات بیشتر در زیردایرکتوری \fBdoc/\fP از سورسکد، یا در \fB/usr/share/doc/pdnsd\fP در صورتی که از یک بسته باینری استفاده میکنید، در دسترس است.
.SH "نویسندگان (AUTHORS)"
\fBpdnsd\fP در ابتدا توسط Thomas Moestl
.UR
.UE
نوشته شد و توسط Paul A. Rombouts
.UR
.UE
بهطور گسترده بازنگری شد (برای نسخههای 1.1.8b1\-par و بعد از آن).
.PP
چندین نفر دیگر در \fBpdnsd\fP مشارکت داشتهاند؛ به پروندههای موجود در سورس یا دایرکتوری
\fB/usr/share/doc/pdnsd\fP
مراجعه کنید.
.PP
این صفحه راهنما بهطور خودکار از مستندات html مربوط به \fBpdnsd\fP با استفاده از یک اسکریپت سفارشی Perl نوشتهشده توسط Paul A. Rombouts ایجاد شده است.
.PP
آخرین بازنگری: ۱۹ آوریل ۲۰۱۲ توسط Paul A. Rombouts