| PDNSD.CONF(5) | File Formats Manual | PDNSD.CONF(5) |
نام (NAME)
pdnsd.conf - پرونده پیکربندی pdnsd
توضیحات (DESCRIPTION)
این صفحه راهنما ساختار پرونده پیکربندی pdnsd(8) و گزینههای پیکربندی موجود را شرح میدهد. مکان پیشفرض پرونده /etc/pdnsd.conf است. این مسیر میتواند با گزینه خط فرمان -c تغییر یابد. یک نمونه pdnsd.conf همراه با توزیع pdnsd در دایرکتوری مستندات یا در /etc/pdnsd.conf.sample قرار دارد.
قالب پرونده (FILE FORMAT)
پرونده پیکربندی به بخشهایی تقسیم میشود. هر بخش با نام بخش و آکولاد باز ({) آغاز شده و با آکولاد بسته (}) خاتمه مییابد. در هر بخش، گزینههای پیکربندی میتوانند به شکل زیر مشخص شوند:
option_name=option_value;
مقدار
گزینه ممکن
است یک
رشته، یک
عدد، مشخصه
زمان یا یک
مقدار ثابت
باشد. در
نسخههای
قبلی pdnsd،
رشتهها
باید در
علامت
نقلقول (")
قرار
میگرفتند،
اما از نسخه
1.1.10 این کار
دیگر
الزامی
نیست، مگر
اینکه
رشته شامل
نویسههای
خاص مانند
فاصله
خالی،
نشانهای
که معمولاً
کامنت را
شروع
میکند، یا
یکی از
نویسههای
",;{}\" باشد. از
نسخه 1.2.9 به
بعد، یک
بکاسلش (\)
داخل یک
رشته
بهعنوان
نویسه گریز
(escape) تفسیر
میشود،
بنابراین
میتوان با
قرار دادن
یک بکاسلش
قبل از
نویسههای
خاص، آنها
را در
رشتهها (چه
داخل
نقلقول و
چه بدون آن)
درج کرد.
برخی از
دنبالههای
گریز
همانند
زبان
برنامهنویسی
C تفسیر
میشوند؛
بهعنوان
مثال \t به
نویسه برگه
(tab) و \n به نویسه
خط جدید
تبدیل
میشود.
مشخصه زمان
شامل
دنبالهای
از ارقام
است که پس از
آن یک پسوند
تکحرفی
قرار
میگیرد.
پسوندهای
زیر
شناسایی
میشوند: s
(ثانیه)، m
(دقیقه)، h
(ساعت)، d (روز)
و w (هفته). اگر
پسوند حذف
شود، ثانیه
در نظر
گرفته
میشود. اگر
چندین
مشخصه
زمانی به هم
الحاق
شوند،
مقادیر
آنها با
یکدیگر جمع
میشوند؛
مثلاً 2h30m
بهصورت 2*60*60 + 30*60 =
9000 ثانیه
تفسیر
میشود.
برخی
گزینهها
بیش از یک
مقدار
میپذیرند؛
در این
حالت،
مقادیر با
کاما از
یکدیگر جدا
میشوند.
اگر مجاز به
ارائه یکی
از
مجموعهای
از مقادیر
ممکن برای
یک گزینه
باشید، این
موضوع در
مستندات
بهصورت
زیر نشان
داده شده
است: (option1|option2|option3|...)
ثابتهای true|false
و yes|no
بهعنوان
مترادفهایی
برای
ثابتهای on|off
پذیرفته
میشوند.
کامنتها
ممکن است
میان /* و */
قرار
گیرند؛
کامنتهای
تودرتو نیز
مجاز هستند.
اگر علامت #
یا دو اسلش (//)
در پرونده
پیکربندی
ظاهر شوند،
هر چیزی از
این
نشانهها
تا انتهای
خط جاری
بهعنوان
کامنت در
نظر گرفته
شده و
نادیده
گرفته
میشود.
تقریباً
برای همه
گزینهها
در پرونده
پیکربندی
نمونه (sample config file)
مثالهایی
وجود دارد.
بخش global
بخش global
پارامترهایی
را مشخص
میکند که
بر رفتار
کلی سرور
تأثیر
میگذارند.
اگر چندین
بخش global تعیین
کنید،
تنظیمات
بخشهای
بعدی
پرونده،
مقادیر
قبلی را
بازنویسی
خواهند کرد.
گزینههای
ممکن
عبارتند
از:
- perm_cache=(number|off);
- حافظه نهان (کَش) دیسک را خاموش میکند یا بیشینه اندازه کَش را بر حسب کیلوبایت تعیین مینماید. اگر کَش دیسک خاموش باشد، همچنان ۸ بایت روی دیسک نوشته خواهد شد. کَش حافظه همیشه ۱۰ کیلوبایت بزرگتر از کَش پرونده است. این مقدار بهطور پیشفرض 2048 (معادل ۲ مگابایت) است.
- cache_dir=string;
- دایرکتوری نگهداری کَش را تنظیم میکند. پیشفرض "/var/cache/pdnsd" است (مگر اینکه pdnsd با پیشفرض دیگری کامپایل شده باشد).
- server_port=number;
- پورت سرور
را تنظیم
میکند. این
گزینه
بهویژه
زمانی مفید
است که
بخواهید
سرور را
اجرا کنید و
دسترسی
کاربر ریشه
(root) ندارید.
توجه داشته
باشید که در
حالت غیر
ریشه،
نمیتوانید
uptest=ping را نیز در
بخش سرور
مشخص کنید.
پورت پیشفرض 53 (پورت استاندارد RFC) است. توجه داشته باشید که تنها زمانی باید از پورتهای غیراستاندارد استفاده کنید که صرفاً کلاینتهای روی ماشین خودتان نیاز به برقراری ارتباط با سرور دارند؛ دیگران احتمالاً در تلاش برای تماس با سرور بر اساس رکورد NS شکست خواهند خورد، زیرا رکورد A که آدرس کارگزارهای نام را تأمین میکند فاقد مشخصه شماره پورت است. - server_ip=string;
- یا
- interface=string;
- آدرس IP که pdnsd
روی آن به
درخواستها
گوش میدهد
را تنظیم
میکند. این
گزینه
هنگامی
مفید است که
میزبان
دارای
چندین رابط
شبکه باشد و
بخواهید pdnsd
روی همه
رابطها
گوش ندهد.
بهعنوان
مثال،
میتوان pdnsd
را به 127.0.0.2
متصل کرد تا
بتواند یک
فورواردر
برای BIND باشد.
تنظیم
پیشفرض
این گزینه
server_ip=any است، به
این معنی که
pdnsd روی تمام
رابطهای
محلی شما
گوش خواهد
داد. در حال
حاضر در
اینجا
تنها
میتوانید
یک آدرس را
مشخص کنید؛
اگر
میخواهید
pdnsd روی چندین
رابط اما نه
همه آنها
گوش دهد،
باید server_ip=any را
مشخص کرده و
از قوانین
فایروال
برای محدود
کردن
دسترسی
استفاده
کنید.
پیشتر آدرس IP نیاز به نقلقول داشت، اما از نسخه 1.1.10 این کار دیگر لازم نیست.
اگر pdnsd با پشتیبانی از هر دو IPv4 و IPv6 کامپایل شده باشد و بخواهید در اینجا یک آدرس IPv6 مشخص کنید، مگر اینکه pdnsd بهطور پیشفرض برای اجرا در حالت IPv6 کامپایل شده باشد، نیاز است از گزینه خط فرمان -6 استفاده کنید یا ابتدا run_ipv4=off را تنظیم نمایید (به زیر مراجعه کنید) تا اطمینان حاصل شود که آدرس IPv6 بهدرستی تجزیه میشود.
اگر pdnsd در حالت IPv6 در حال اجرا باشد و یک آدرس IPv4 در اینجا مشخص کنید، بهطور خودکار به یک آدرس IPv6 نگاشت خواهد شد.
جدید در نسخه 1.2: میتوانید به جای آدرس IP، نام یک رابط شبکه مانند "lo" یا "eth0" را نیز در اینجا وارد کنید (این ویژگی روی لینوکس آزمایش شده است و ممکن است روی پلتفرمهای دیگر کار کند یا نکند). pdnsd به نام رابط متصل نمیشود، بلکه هنگام راهاندازی، آدرس رابط را جستجو کرده و روی آن آدرس گوش میدهد. اگر آدرس رابط در حین اجرای pdnsd تغییر کند، pdnsd متوجه آن نخواهد شد. در این صورت باید pdnsd را مجدداً راهاندازی کنید. - outgoing_ip=string;
- یا
- outside_interface=string;
- جدید در
نسخه 1.2.9:
آدرس 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
تنها به
پرسوجوهای
دریافتی از
شبکه محلی
پاسخ دهد و
پرسوجوهای
خروجی را
فقط از طریق
رابط متصل
به اینترنت
ارسال
نماید.
تنظیم پیشفرض برای این گزینه any است، به این معنی که هسته آزاد است تصمیم بگیرد از کدام رابط استفاده کند. همانند گزینه server_ip، میتوانید در اینجا نیز به جای آدرس IP، نام یک رابط شبکه را وارد کنید. - linkdown_kluge=(on|off);
- این گزینه راهحلی موقت (kluge) را فعال میکند که ممکن است برخی افراد به آن نیاز داشته باشند: هنگامی که تمام سرورها قطع (down) علامتگذاری شدهاند، با فعال بودن این گزینه حتی هنگام دریافت پرسوجو از کَش استفاده نمیشود و در هر صورت خطای DNS برگردانده میشود. تنها استثنا این است که رکوردهای محلی (همانطور که در بخشهای rr و source مشخص شدهاند) همچنان بهصورت عادی ارائه میشوند. بهطور کلی، معمولاً مایل هستید حتی زمانی که شبکه قطع است رکوردهای کَششده را دریافت کنید، بنابراین این گزینه بهطور پیشفرض off است.
- max_ttl=timespec;
- این گزینه بیشینه زمانی را که یک رکورد در کَش نگه داشته میشود تعیین میکند. تمام رکوردهای منبع DNS دارای یک فیلد زمان حیات (time to live) هستند که مشخص میکند رکورد قبل از نیاز به پرسوجوی مجدد تا چه مدت میتواند کَش شود. اگر این مقدار بیشتر از مقدار تعیینشده با max_ttl باشد، مقدار زمان حیات روی max_ttl تنظیم میشود. این کار برای جلوگیری از کَش شدن رکوردها برای مدت طولانی و نامناسب انجام میشود، زیرا تقریباً هرگز کار مناسبی نیست. مقدار پیشفرض 604800s (یک هفته) است.
- min_ttl=timespec;
- این گزینه کمینه زمانی را که یک رکورد در کَش نگه داشته میشود تعیین میکند. تمام رکوردهای منبع DNS دارای یک فیلد زمان حیات هستند که میگوید رکورد چه مدت قبل از پرسوجوی مجدد میتواند کَش شود. اگر این مقدار کمتر از مقدار دادهشده با min_ttl باشد، مقدار زمان حیات روی min_ttl تنظیم میشود. پیشفرض 120 ثانیه است.
- neg_ttl=timespec;
- این گزینه زمانی را تعیین میکند که رکوردهای کَششده منفی در صورت عدم امکان تعیین زمان حیات، در کَش معتبر خواهند ماند. این حالت همواره زمانی رخ میدهد که کل دامنهها بهصورت منفی کَش میشوند، و علاوه بر آن زمانی که انواع رکورد برای دامنهای که هیچ رکورد SOA برای آن نزد pdnsd شناخته شده نیست، بهصورت منفی کَش گردند. اگر یک SOA وجود داشته باشد، ttl مربوط به SOA در نظر گرفته میشود.
- neg_rrs_pol=(on|off|auth|default);
- سیاست
مجموعه RR را
برای کَش
منفی تعیین
میکند؛
این گزینه
به pdnsd
میگوید
تحت چه
شرایطی
باید یک نوع
رکورد را
برای یک
دامنه خاص
بهصورت
منفی کَش
کند. مقدار off
کَش منفی
انواع
رکورد را
خاموش
میکند، on
همیشه
زمانی که یک
سرور نام
نوع رکوردی
را که از آن
خواستهایم
برنگرداند
یک مدخل کَش
منفی اضافه
میکند، و auth
تنها در
صورتی چنین
مدخلهایی
را اضافه
میکند که
پاسخ از سوی
یک سرور نام
معتبر (authoritative)
برای آن
دامنه آمده
باشد.
جدید در نسخه 1.2.8: تنظیم پیشفرض (default) در صورتی یک رکورد کَش منفی اضافه میکند که یا پاسخ معتبر بوده باشد، یا پاسخ نشان دهد که سرور نام ویژگی "recursion available" را داشته در حالی که پرسوجو صراحتاً چنین بازگشتی (recursion) را درخواست کرده باشد.
مقدار پیشفرض "default" است (پیشتر auth بود). - neg_domain_pol=(on|off|auth);
- این گزینه
مشابه neg_rrs_pol
برای کَش
منفی کل یک
دامنه است.
فعال کردن
آن (on) باید
ایمن باشد،
زیرا سرور
کَشکنندهای
مشاهده
نشده است که
بهاشتباه
ادعا کند
دامنهای
وجود ندارد.
پیشفرض auth است. - run_as=string;
- این گزینه
به شما
امکان
میدهد پس
از انجام
عملیاتی که
نیاز به
امتیازات
ویژه
دارند،
شناسه
کاربر و
گروه pdnsd را
تغییر دهید.
این کار به
کاهش خطرات
امنیتی کمک
میکند و
بنابراین
توصیه
میشود.
رشته
ارائهشده
نام کاربری
را مشخص
میکند که
شناسه
کاربر و
شناسه گروه
اصلی آن
اعمال
خواهد شد.
جزئیات بیشتر: پس از خواندن پرونده پیکربندی، تبدیل شدن به دیمن (در صورت تعیین) و شروع رشته (thread) وضعیت سرور، رشته اصلی شناسه گروه (gid) و شناسه کاربر (uid) خود را تغییر میدهد، همانطور که تمام رشتههای تازه ایجاد شده پس از آن نیز چنین میکنند. با گرفتن uid و gid دیگر، آن رشتهها با امتیازات کاربر مشخصشده اجرا میشوند. در لینوکس و FreeBSD، رشته وضعیت سرور تنها زمانی با امتیازات اصلی اجرا میشود که گزینه strict_setuid روی off تنظیم شده باشد (به زیر مراجعه کنید، بهطور پیشفرض on است)، زیرا ممکن است این امتیازات برای تستهای فعال بودن با exec مورد نیاز باشند. رشته مدیر (manager thread) نیز در این حالت امتیازات اصلی خود را حفظ میکند. باید دقت داشته باشید که کاربر تعیینشده دارای مجوزهای نوشتن روی پرونده کَش و لوله وضعیت (status pipe، در صورت نیاز به آن) باشد. باید به پیامهای خطایی مانند "permission denied" و "operation not permitted" توجه کنید تا مشکلات دسترسی را شناسایی نمایید.
- strict_setuid=(on|off);
- هنگامی که
همراه با
گزینه run_as
استفاده
میشود،
این گزینه
به شما
امکان
میدهد
مشخص کنید
که تمام
رشتههای
برنامه با
امتیازات
کاربر run_as
اجرا شوند.
این امر
امنیت
بالاتری
نسبت به
گزینه عادی
run_as فراهم
میکند،
اما همیشه
امکانپذیر
نیست. برای
توضیحات
بیشتر به
گزینه run_as
مراجعه
کنید.
این گزینه بهطور پیشفرض on است.
توجه داشته باشید که این گزینه در سیستمهای غیر لینوکسی هیچ تأثیری ندارد. - paranoid=(on|off);
- بهطور
معمول، pdnsd از
تمام
سرورها در
حالت
بازگشتی (recursive)
پرسوجو
میکند
(یعنی به
سرورها
دستور
میدهد در
صورت امکان
خودشان از
سایر
سرورها
پرسوجو
کنند و
پاسخهایی
برای
دامنههایی
که ممکن است
در حیطه
اختیارات
آنها
نباشد
بازگردانند)،
و رکوردهای
اضافی حاوی
اطلاعات
برای
سرورهایی
که در حیطه
اختیارات
سرور
پرسیدهشده
نیستند را
میپذیرد.
این امر
امکان
مسمومسازی
حافظه نهان
(cache poisoning) را باز
میکند: یک
مهاجم
خرابکار
ممکن است
سرور DNS
راهاندازی
کند که
هنگام
پرسوجو،
رکوردهای
اضافی جعلی
بازگرداند.
به این
ترتیب، او
میتواند
با مجبور
کردن سرور DNS
شما به
بازگرداندن
آدرسهای IP
نامعتبر،
سرورهای
مورد
اعتماد را
با سرورهای
خود
جایگزین
کند. این
گزینه با رد
رکوردهای
اضافی که
دامنههای
موجود در
فضای
اختیارات
سرور
پرسیدهشده
را توصیف
نمیکنند و
عدم انجام
پرسوجوهای
بازگشتی
بیشتر، شما
را در برابر
مسمومسازی
کَش محافظت
میکند. یک
استثنا
برای این
قاعده،
سرورهایی
هستند که در
پرونده
پیکربندی
خود مشخص
میکنید،
که مورد
اعتماد
هستند.
هزینه این کار افت احتمالی کارایی است؛ بهویژه، ممکن است پرسوجوهای بیشتری برای همان عملیات لازم باشد.
همچنین باید توجه داشته باشید که ممکن است مشکلات امنیتی مشابه دیگری وجود داشته باشند که اساساً مشکلات خود DNS هستند، یعنی هر سرور "سنتی" آنها را دارد (افزونههای امنیتی DNS این مشکلات را حل میکنند، اما بهطور گسترده پشتیبانی نمیشوند). یکی از این آسیبپذیریها این است که مهاجم ممکن است شما را با پاسخهای جعلی بمباران کند به این امید که یکی از آنها با پرسوجویی که انجام دادهاید مطابقت داشته باشد. اگر چنین پرسوجویی انجام داده باشید، از هر ۶۵۵۳۶ بسته جعلی یکی موفق خواهد بود (یعنی میانگین ۳۲۷۶۸ بسته برای آن حمله لازم است). pdnsd میتواند از TCP برای پرسوجوها استفاده کند که سربار کمی بالاتر دارد، اما در سیستمعاملهای معقول بسیار کمتر در برابر چنین حملاتی آسیبپذیر است. همچنین، pdnsd شناسههای پرسوجوی تصادفی انتخاب میکند تا مهاجم نتواند مسیر میانبر بزند. با این حال، اگر مهاجم قادر به شنود ترافیک شبکه شما باشد، این حمله نسبتاً آسان است.
این آسیبپذیری تقصیر pdnsd نیست و با استفاده از هر کارگزار نام سنتی امکانپذیر است (اگر pdnsd را وادار به استفاده از TCP کنید، شاید کمی در برابر این نوع حملات ایمنتر باشد).
گزینه paranoid بهطور پیشفرض off است.
- ignore_cd=(on|off);
- جدید در
نسخه 1.2.8: این
گزینه به
شما امکان
میدهد
مشخص کنید
که بیت CD در
پرسوجوی DNS
نادیده
گرفته شود.
در غیر این
صورت، pdnsd به
کلاینتهایی
که این بیت
را در
پرسوجو
تنظیم
میکنند با
FORMERR پاسخ
خواهد داد.
فعال کردن
این گزینه
ایمن است،
زیرا بیت CD
به 'Checking Disabled'
اشاره دارد
که به این
معنی است
کلاینت
دادههای
احراز
هویتنشده
را خواهد
پذیرفت.
این گزینه بهطور پیشفرض on است. اگر رفتار قدیمی (قبل از نسخه 1.2.8) را میخواهید، آن را خاموش کنید. - scheme_file=string;
- علاوه بر تستهای فعال بودن (uptests) معمول، میتوانید مشخص کنید که برخی سرورها تنها زمانی پرسوجو شوند که یک طرح (scheme) خاص pcmcia-cs فعال باشد (تنها در لینوکس). برای این منظور، pdnsd باید بداند پروندهای که اطلاعات طرح pcmcia را نگهداری میکند در کجا قرار دارد. معمولاً این مسیر یا /var/lib/pcmcia/scheme است یا /var/state/pcmcia/scheme.
- status_ctl=(on|off);
- این گزینه
همان اثر
گزینه خط
فرمان -s را
دارد: کنترل
وضعیت
زمانی که on
مشخص شود
فعال
میگردد.
افزوده شده توسط Paul Rombouts: توجه داشته باشید که pdnsd-ctl امکان پیکربندی در زمان اجرای pdnsd را فراهم میکند، حتی آدرسهای IP کارگزارهای نام را میتوان تغییر داد. اگر از pdnsd-ctl استفاده نمیکنید و حداکثر امنیت را میخواهید، نباید این گزینه را فعال کنید. این گزینه بهطور پیشفرض غیرفعال است. - daemon=(on|off);
- این گزینه
همان اثر
گزینه خط
فرمان -d را
دارد: حالت
دیمن زمانی
که on مشخص
شود فعال
میگردد.
پیشفرض off است. - tcp_server=(on|off);
- مقدار tcp_server=on
همان اثر
گزینه خط
فرمان -t یا --tcp
را دارد:
سرویسدهی
از طریق TCP را
فعال
میکند.
مشابهاً،
tcp_server=off مانند
گزینه خط
فرمان --notcp است.
پیشفرض on است. - pid_file=string;
- این گزینه همان اثر گزینه خط فرمان -p را دارد: میتوانید پروندهای را مشخص کنید که pdnsd هنگام شروع در حالت دیمن، شناسه فرآیند (pid) خود را در آن بنویسد.
- verbosity=number;
- این گزینه همان اثر گزینه خط فرمان -v را دارد: میتوانید با استفاده از آن میزان پرگویی (verbosity) پیامهای pdnsd را تنظیم کنید. آرگومان عددی بین 0 (پیامهای اندک) تا 3 (بیشترین پیامها) است.
- query_method=(tcp_only|udp_only|tcp_udp|udp_tcp);
- این گزینه
همان اثر
گزینه خط
فرمان -m را
دارد.
مستندات
گزینه خط
فرمان را در
این مورد
مطالعه
کنید. مقدار
tcp_only متناظر با
to، مقدار udp_only
متناظر با
uo، مقدار tcp_udp
متناظر با tu
و udp_tcp متناظر
با آرگومان
ut در گزینه
خط فرمان
است.
اگر از query_method=tcp_udp استفاده میکنید، توصیه میشود که گزینه سرآمد زمانی کلی (global timeout) را حداقل دو برابر طولانیترین زمان سرآمد سرور تنظیم کنید. - run_ipv4=(on|off);
- این گزینه همان اثر گزینه خط فرمان -4 یا -6 را دارد: اگر on مشخص شود، پشتیبانی از IPv4 فعال شده و پشتیبانی از IPv6 (در صورت وجود) غیرفعال میشود. اگر off مشخص شود، IPv4 غیرفعال شده و IPv6 فعال خواهد شد. برای معنادار بودن این گزینه، pdnsd باید با پشتیبانی از پروتکلی که انتخاب میکنید کامپایل شده باشد. اگر pdnsd با پشتیبانی از هر دو IPv4 و IPv6 کامپایل شده باشد و بخواهید آدرسهای IPv6 را در پرونده پیکربندی بگنجانید، احتمالاً ابتدا باید run_ipv4=off را مشخص کنید تا اطمینان یابید آدرسهای IPv6 بهدرستی تجزیه میشوند.
- debug=(on|off);
- این گزینه همان اثر گزینه خط فرمان -g را دارد: پیامهای اشکالزدایی زمانی که on مشخص شود فعال میگردند.
- ctl_perms=number;
- این گزینه
به شما
اجازه
میدهد
دسترسیهای
پرونده
سوکت کنترل
وضعیت pdnsd را
تنظیم کنید.
این
دسترسیها
مشابه
مجوزهای
پرونده
هستند. مالک
پرونده
کاربر run_as
خواهد بود،
یا اگر
کاربری
مشخص نشده
باشد،
کاربری که pdnsd
را اجرا
کرده است.
اگر
میخواهید
دسترسیها
را در مبنای
هشت (اکتال،
همانند
معمول) مشخص
کنید، صفر
ابتدایی را
فراموش
نکنید (0600 به
جای 600!). برای
استفاده از
کنترل
وضعیت،
دسترسی
نوشتن لازم
است.
پیشفرض 0600
است (فقط
مالک
میتواند
بخواند یا
بنویسد).
لطفاً توجه داشته باشید که سوکت در دایرکتوری کَش نگهداری میشود و ممکن است نیاز باشد مجوزهای دایرکتوری کَش نیز تنظیم شوند. لطفاً اطمینان حاصل کنید که دایرکتوری کَش برای کاربران غیرقابل اعتماد قابل نوشتن نباشد. - proc_limit=number;
- با این
گزینه
میتوانید
محدودیتی
برای
رشتههای
همزمان
فعال pdnsd
تعیین کنید.
اگر این
تعداد
فراتر رود،
پرسوجوها
در صف قرار
میگیرند و
ممکن است
مدتی با
تأخیر
مواجه شوند.
همچنین
گزینه procq_limit را
ببینید.
پیشفرض برای این گزینه 40 است. - procq_limit=number;
- هنگامی که
حد
رشتههای
پرسوجو (proc_limit)
فراتر رود،
تلاشهای
اتصال به pdnsd
در صف قرار
میگیرند.
با این
گزینه
میتوانید
حداکثر طول
صف را تعیین
کنید. اگر
این طول نیز
پر شود،
پرسوجوهای
ورودی دور
انداخته
میشوند (drop
میشوند).
این بدان
معناست که
اتصالات tcp
بسته
میشوند و
پرسوجوهای
udp صرفاً دور
ریخته
میشوند که
احتمالاً
باعث
میشود
تحلیلگرِ
پرسشکننده
تا رسیدن به
سرآمد
زمانی
منتظر پاسخ
بماند.
همچنین گزینه proc_limit را ببینید. در هر زمان حداکثر مجموع proc_limit+procq_limit رشته پرسوجو وجود خواهد داشت (بهعلاوه ۳ تا ۶ رشته که بسته به پیکربندی شما همیشه حضور دارند).
پیشفرض برای این گزینه 60 است. - tcp_qtimeout=timespec;
- این گزینه یک سرآمد زمانی برای پرسوجوهای tcp تعیین میکند. اگر پس از گذشت آن زمان هیچ پرسوجوی کاملی روی یک اتصال tcp دریافت نشود، اتصال بسته خواهد شد. مقدار پیشفرض با استفاده از گزینه --with-tcp-qtimeout در زمان پیکربندی (configure) تنظیم میشود.
- par_queries=number;
- این گزینه
پیشتر
حداکثر
تعداد
سرورهای
راه دوری را
که بهطور
همزمان
برای هر
پرسوجوی
دریافتی
توسط pdnsd مورد
پرسش قرار
میگرفتند،
تنظیم
میکرد.
از نسخه 1.1.11، معنای این گزینه اندکی تغییر کرده است. اکنون این گزینه مقداری است که تعداد پرسوجوهای موازی با آن افزایش مییابد هنگامی که مجموعه سرورهای قبلی دچار سرآمد زمانی (timeout) شده باشند. برای مثال، اگر لیستی از سرورهای در دسترس شامل server1, server2, server3, و غیره داشته باشیم و par_queries=2 باشد، آنگاه pdnsd ابتدا پرسوجوها را به server1 و server2 ارسال کرده و به پاسخهای این سرورها گوش میدهد.
اگر این سرورها در طول دوره سرآمد زمانی خود پاسخی ارسال نکنند، pdnsd پرسوجوهای اضافی را به server3 و server4 ارسال میکند و منتظر پاسخ از server1, server2, server3 و server4 میماند، و این روند تا زمان دریافت پاسخی مفید یا اتمام لیست ادامه مییابد.
در بدترین حالت، پرسوجوهای در انتظار برای تمام سرورهای موجود در لیست سرورهای در دسترس وجود خواهد داشت. ممکن است به این ترتیب منابع سیستمی بیشتری مصرف کنیم (اما فقط در صورتی که سرورهای نخست در لیست کند باشند یا پاسخ ندهند)، اما مزیت آن این است که شانس بیشتری برای دریافت پاسخ داریم. در هر صورت، اگر قرار است بیشتر صبر کنیم، چرا برای سرورهای بیشتری منتظر نمانیم.
همچنین توضیح گزینه سرآمد زمانی سراسری (global timeout) در زیر را ببینید.
مقادیر 1 یا 2 مقادیر مناسبی برای این گزینه هستند. پیشفرض در زمان کامپایل با استفاده از گزینه --with-par-queries در configure تعیین میشود. - timeout=timespec;
- این
پارامتر
سرآمد
زمانی
سراسری
برای
پرسوجوهای
dns است. این
گزینه
حداقل مدت
زمانی را
مشخص
میکند که pdnsd
پس از ارسال
اولین
پرسوجو به
یک سرور راه
دور قبل از
انصراف
بدون
دریافت
پاسخ،
منتظر
خواهد ماند.
گزینههای
سرآمد در
پرونده
پیکربندی
اکنون فقط
حداقل
فواصل
زمانی
سرآمد
هستند.
تنظیم
گزینه
سرآمد
سراسری این
امکان را
فراهم
میکند که
فواصل
زمانی
سرآمد
نسبتاً
کوتاهی را
در بخشهای
server مشخص کنید
(به زیر
مراجعه
کنید). این
کار باعث
میشود که pdnsd
در صورتی که
سرورهای
اول کند
پاسخ دهند،
خیلی سریع
شروع به
پرسوجو از
سرورهای
اضافی کند
(اما همچنان
به شنیدن
پاسخها از
سرورهای
اول ادامه
دهد). این
امر ممکن
است به pdnsd
اجازه دهد
در شرایط
خاص
سریعتر
پاسخ را
دریافت کند.
اگر از query_method=tcp_udp استفاده میکنید، توصیه میشود سرآمد زمانی سراسری را حداقل دو برابر بزرگتر از بزرگترین سرآمد زمانی سرور قرار دهید، در غیر این صورت ممکن است اگر یک اتصال TCP با سرآمد مواجه شود، pdnsd فرصتی برای امتحان پرسوجوی UDP نداشته باشد.
مقدار پیشفرض 0 است. - randomize_recs=(on|off);
- اگر این
گزینه روشن
باشد، pdnsd
هنگام
ایجاد
پاسخ،
رکوردهای
کَششده از
یک نوع را
بهطور
تصادفی
بازآرایی
میکند. این
امر از
طرحهای Round-robin DNS
پشتیبانی
کرده و
خطاپذیری
میزبانهایی
با چندین
آدرس IP را
بهبود
میبخشد،
بنابراین
معمولاً
ایده خوبی
است.
بهطور پیشفرض on است. - query_port_start=(number|none);
- اگر عددی
داده شود،
این مقدار
شروع
محدوده
پورت مورد
استفاده
برای
پرسوجوهای
pdnsd را تعریف
میکند.
مقدار
دادهشده
باید >= 1024
باشد. هدف
از این
گزینه کمک
به
پیکربندیهای
خاص
فایروال
است که بر
اساس پورت
مبدأ عمل
میکنند.
لطفاً به
خاطر داشته
باشید که
ممکن است
برنامه
دیگری
پورتی را در
آن محدوده
مقید (bind) کند،
بنابراین
یک فایروال
با حفظ
وضعیت (stateful) که
از پورت
مقصد و/یا uid
فرآیند
استفاده
میکند
ممکن است
مؤثرتر
باشد. در
صورتی که
پورت شروع
پرسوجو
داده شود، pdnsd
از این پورت
بهعنوان
اولین پورت
محدوده
پورت
مشخصشده
(query_port_end را
ببینید)
برای
پرسوجوها
استفاده
میکند. pdnsd
سعی خواهد
کرد بهطور
تصادفی یک
پورت آزاد
را از این
محدوده
بهعنوان
پورت محلی
برای
پرسوجو
انتخاب کند.
برای اطمینان از وجود پورتهای کافی برای استفاده pdnsd، محدوده بین query_port_start و query_port_end باید حداقل روی (par_queries * proc_limit) تنظیم شود. محدوده بزرگتر به دلایل امنیتی و همچنین به این دلیل که برنامههای دیگر ممکن است پورتهایی را در آن محدوده تخصیص دهند، بهشدت توصیه میشود. در صورت امکان، این محدوده باید دور از فضایی که برنامههای دیگر معمولاً استفاده میکنند نگهداشته شود.
پیشفرض برای این گزینه 1024 است. همراه با مقدار پیشفرض query_port_end، این امر حدس زدن پورت مبدأ مورد استفاده توسط تحلیلگر pdnsd را برای مهاجم به سختترین حالت تبدیل میکند. اگر در اینجا none را مشخص کنید، pdnsd به هسته اجازه میدهد پورت مبدأ را انتخاب کند، اما این کار ممکن است pdnsd را در برابر حمله آسیبپذیرتر سازد. - query_port_end=number;
- اگر query_port_start برابر none نباشد استفاده میشود. آخرین پورت محدوده آغاز شده توسط query_port_start را که برای پرسوجوهای pdnsd استفاده میشود تعریف میکند. پیشفرض 65535 است که بیشینه مقدار قانونی برای این گزینه نیز میباشد. برای جزئیات به توضیحات query_port_start مراجعه کنید.
- delegation_only=string;
- افزوده
شده توسط Paul
Rombouts: این
گزینه یک
ناحیه "delegation-only"
(صرفاً
تفویضی) را
مشخص
میکند. این
بدان
معناست که
اگر pdnsd
پرسوجویی
برای نامی
دریافت کند
که در
زیردامنهای
از یک ناحیه
"delegation-only" قرار
دارد، اما
سرور نام
راه دور
پاسخی با
بخش
اعتبارسنجی
(authority) فاقد
هرگونه
رکورد NS
برای
زیردامنههای
آن ناحیه
بازگرداند،
pdnsd با NXDOMAIN (دامنه
ناشناخته)
پاسخ خواهد
داد. این
ویژگی را
میتوان
برای خنثی
کردن اثرات
نامطلوب
"wildcard"های DNS
استفاده
کرد. چندین
ناحیه "delegation-only"
را میتوان
با هم مشخص
کرد. اگر
سرورهای
ریشه (root servers) را
در یک بخش server
مشخص
میکنید،
مهم است که
root_server=on را در
چنین بخشی
تنظیم کنید.
مثال:delegation_only="com","net";
این ویژگی بهطور پیشفرض غیرفعال است. توصیه میشود فقط در صورتی از این ویژگی استفاده کنید که واقعاً به آن نیاز دارید، زیرا این خطر وجود دارد که برخی نامهای مشروع مسدود شوند، بهویژه اگر کارگزارهای نام راه دور مورد پرسش توسط pdnsd پاسخهایی با بخشهای اعتبارسنجی خالی بازگردانند.
- ipv4_6_prefix=string;
- این گزینه
همان اثر
گزینه خط
فرمان -i را
دارد.
هنگامی که pdnsd
در حالت IPv6
اجرا
میشود،
این گزینه
پیشوندی را
مشخص
میکند که pdnsd
برای تبدیل
آدرسهای IPv4
در پرونده
پیکربندی
(یا
آدرسهای
مشخصشده
با pdnsd-ctl) به
آدرسهای
نگاشتشده
به IPv6
استفاده
میکند.
رشته باید
یک آدرس
معتبر IPv6
باشد. تنها
۹۶ بیت اول
استفاده
میشوند.
توجه داشته
باشید که
این گزینه
فقط بر
تجزیه
آدرسهای IPv4
فهرستشده
پس از این
گزینه
تأثیر
میگذارد.
پیشفرض "::ffff.0.0.0.0" است. - use_nss=(on|off);
- اگر این
گزینه روشن
باشد، pdnsd هر
زمان که
شناسه
کاربر و
گروه خود را
تغییر دهد،
تابع initgroups() را
برای تنظیم
لیست
دسترسی
گروه
فراخوانی
میکند
(گزینه run_as را
ببینید). با
این حال، یک
مشکل
احتمالی
وجود دارد
اگر initgroups() از NSS (Name Service
Switch) استفاده
کند و NSS نیز
به نوبه خود
از DNS
استفاده
نماید. در
چنین حالتی
ممکن است با
سرآمدها و
توقفهای
طولانی
مواجه شوید.
با تنظیم
use_nss=off،
میتوانید
فراخوانی
initgroups() را
غیرفعال
کنید (تنها
در
نسخههای 1.2.5
و بعد از آن
امکانپذیر
است).
این گزینه توسط Jan-Marek Glogowski ارائه شده است.
بهطور پیشفرض on است. - udpbufsize=number;
- جدید در
نسخه 1.2.9: این
گزینه حد
بالایی
اندازه
پیامهای UDP DNS
را تعیین
میکند.
پیشفرض 1024
است.
همچنین گزینه سرور edns_query را در زیر ببینید.
بخش server
هر بخش server
مجموعهای
از
کارگزارهای
نام را مشخص
میکند که pdnsd
باید تلاش
کند
رکوردهای
منبع یا
اطلاعات
کارگزار
نام معتبر
را از آنها
دریافت کند.
سرورها به
ترتیب
حضورشان (یا
تا حدی
بهصورت
موازی)
پرسوجو
میشوند.
اگر یکی
ناموفق
باشد، سرور
بعدی گرفته
میشود و به
همین ترتیب.
احتمالاً
مایل هستید
سرور dns شبکه
محلی (LAN) خود،
سرورهای dns
کَشکننده
ارائهدهنده
اینترنت
خود یا حتی
فهرستی از
سرورهای
ریشه را در
یک یا چند
بخش server مشخص
کنید.
گزینههای
پشتیبانیشده
در این بخش
عبارتند
از:
- label=string;
- یک برچسب
برای بخش server
مشخص
میکند. این
برچسب
میتواند
برای ارجاع
به این بخش
هنگام
استفاده از
pdnsd-ctl (ابزار
کنترل pdnsd)
استفاده
شود.
میتوانید به چندین بخش server برچسب یکسانی بدهید، اما اگر میخواهید آدرسهای یک بخش server را (گزینه ip در زیر را ببینید) در زمان اجرا با دستور "pdnsd-ctl server label up dns1,dns2,..." تغییر دهید، برچسب باید یکتا باشد. - ip=string;
- آدرس IP (خود
آدرس، نه
نام میزبان)
سرور را
مشخص
میکند.
میتوان چندین آدرس IP در هر بخش server مشخص کرد. این کار را میتوان با وارد کردن چندین خط به فرم ip=string; یا یک خط تکی مانند این انجام داد:ip=string,string,string;
نیازی نیست آدرسهای IP حتماً در پرونده پیکربندی مشخص شوند. یک بخش server بدون آدرسهای IP غیرفعال خواهد ماند تا زمانی که با استفاده از pdnsd-ctl (ابزار کنترل pdnsd) یک یا چند آدرس به آن اختصاص یابد.
اگر pdnsd با پشتیبانی از هر دو پروتکل IPv4 و IPv6 کامپایل شده باشد، هر آدرس IPv6 که در اینجا مشخص کنید با یک پیام هشدار نادیده گرفته میشود، مگر اینکه pdnsd در حالت IPv6 در حال اجرا باشد. بنابراین، مگر اینکه pdnsd بهطور پیشفرض برای راهاندازی در حالت IPv6 کامپایل شده باشد، باید ابتدا از گزینه خط فرمان -6 استفاده کنید یا run_ipv4=off را تنظیم نمایید (بخش global را ببینید) تا اطمینان یابید که آدرسهای IPv6 بهدرستی تجزیه میشوند.
اگر pdnsd در حالت IPv6 در حال اجرا باشد و یک آدرس IPv4 در اینجا مشخص کنید، بهطور خودکار به یک آدرس IPv6 نگاشت خواهد شد. - file=string;
- جدید در
نسخه 1.2: این
گزینه به
شما امکان
میدهد نام
پروندهای
به سبک resolv.conf را
وارد کنید.
از خطوطی که
با
کلیدواژه
nameserver شروع
میشوند،
فیلد دوم
بهعنوان
آدرس IP
تجزیه
میشود،
درست مانند
اینکه با
گزینه ip=
مشخص شده
باشد. بقیه
خطوط
نادیده
گرفته
خواهند شد.
اگر
محتویات
پرونده در
حین اجرای pdnsd
تغییر کند،
میتوانید
با استفاده
از pdnsd-ctl (ابزار
کنترل pdnsd)
تغییرات را
به اطلاع pdnsd
برسانید.
این کار
معمولاً
بهراحتی
با قرار
دادن دستور
"pdnsd-ctl config" در
اسکریپتی
انجام
میشود که
هر زمان
پیکربندی DNS
تغییر
میکند
بهطور
خودکار
اجرا
میگردد.
برای مثال، فرض کنید یک کلاینت ppp دارید که پیکربندی DNS ارائهدهنده اینترنت شما را در پرونده /etc/ppp/resolv.conf مینویسد و اسکریپت /etc/ppp/ip-up را هنگام برقراری اتصال جدید اجرا میکند. یکی از راههای اطمینان از اینکه pdnsd بهطور خودکار بازپیکربندی میشود، افزودن یک بخش server در پرونده پیکربندی با file=/etc/ppp/resolv.conf و افزودن دستور "pdnsd-ctl config" به /etc/ppp/ip-up است. - port=number;
- پورتی را مشخص میکند که سرور نام راه دور روی آن گوش میدهد. پیشفرض 53 (پورت رسمی dns) است.
- uptest=(ping|none|if|dev|diald|exec|query);
- روش بررسی در دسترس بودن سرور را تعیین میکند. روشهای تعریفشده در حال حاضر عبارتند از:
- • ping: یک درخواست ICMP_ECHO به سرور ارسال میکند. اگر در مدت سرآمد پاسخ ندهد، تا بررسی بعدی بهعنوان غیرقابل دسترس در نظر گرفته میشود.
- • none: وضعیت در دسترس بودن تغییر نمیکند، فقط برچسب زمانی بهروزرسانی میشود.
- • if: بررسی میکند که آیا رابط شبکه (مشخصشده در گزینه interface=) وجود دارد و فعال و در حال کار است یا خیر. این ویژگی در حال حاضر برای تمام رابطهای شبکه "معمولی"، رابطهایی که هنگام قطع شدن ناپدید میشوند (مانند ppp?)، و علاوه بر آن برای رابطهای isdn لینوکس (از هسته 2.2) کار میکند. توجه داشته باشید که به یک پرونده دستگاه /dev/isdninfo (major#45, minor#255) نیاز دارید، وگرنه تست فعال بودن isdn همیشه با شکست مواجه خواهد شد.
- • dev و diald: یک
بررسی if
انجام
میدهد و در
صورت
موفقیت،
علاوه بر آن
بررسی
میکند که
آیا
برنامهای
در حال
اجراست که
یک دستگاه
(مودم) مشخص
را قفل کرده
باشد یا
خیر.
پارامترهای
مورد نیاز
عبارتند از
یک رابط
(مشخصشده
مانند تست
if، مثلاً "ppp0")
و یک دستگاه
نسبت به /dev
(مثلاً "modem"
برای /dev/modem که
با استفاده
از گزینه device=
مشخص شده
است). سپس pdnsd به
دنبال
پرونده pid
برای رابط
دادهشده
در /var/lock (مثلاً
/var/run/ppp0.pid) و یک
پرونده قفل
برای
دستگاه
دادهشده
(مثلاً /var/lock/LCK..modem)
میگردد، و
سپس بررسی
میکند که
آیا فرآیند
قفلکننده
همان
فرآیندی
است که
پرونده pid را
ایجاد کرده
و آیا این
فرآیند
هنوز زنده
است یا خیر.
اگر چنین
باشد، تست
معمولی if
برای رابط
دادهشده
اجرا
میشود.
گزینه dev برای اتصال تلفنی بر حسب تقاضا (dial-on-demand) در pppd است، و diald نیز همین کار را برای کاربران diald انجام میدهد. - • exec: یک دستور معین را در شل /bin/sh اجرا میکند (بهصورت /bin/sh -c <command>) و نتیجه (کد خروجی آخرین دستور) را به شیوه مدیریت کدهای خروجی توسط شل ارزیابی میکند، یعنی 0 نشاندهنده موفقیت و تمام مقادیر دیگر نشاندهنده شکست است. نام فرآیند شل uptest_sh خواهد بود. دستور با گزینه uptest_cmd داده میشود (به زیر مراجعه کنید). برای مسائل امنیتی، مدخل مربوط به آن را نیز بررسی کنید.
- • query: جدید
در نسخه 1.2:
این ویژگی
مانند تست ping
عمل
میکند، با
این تفاوت
که یک
پرسوجوی DNS
(خالی) به
سرور راه
دور ارسال
مینماید.
اگر سرور
پاسخی با
ساختار
صحیح در
بازه زمانی
سرآمد
بازگرداند
(بهجز SERVFAIL)،
سرور در
دسترس در
نظر گرفته
خواهد شد.
این تست
زمانی مفید
است که سرور
راه دور
اصلاً به
درخواستهای
ICMP_ECHO پاسخ
ندهد، که
متأسفانه
این روزها
بسیار رایج
است. همچنین
ممکن است رخ
دهد که سرور
راه دور
آنلاین
باشد اما
پرسوجوهای
خالی DNS را
نادیده
بگیرد. در
این صورت
باید گزینه
query_test_name را تنظیم
کنید (به
زیر مراجعه
کنید). در
بسیاری از
موارد این
تست شاخص
مطمئنتری
برای در
دسترس بودن
نسبت به
موارد
یادشده
قبلی خواهد
بود.
مقدار پیشفرض none است.
نکته: اگر از اتصال تلفنی بر حسب تقاضا استفاده میکنید، از none، if، dev، diald یا exec استفاده کنید، زیرا ping یا query بستهها را در فواصل مشخص ارسال میکنند و رابط شبکه دائماً شمارهگیری خواهد کرد!
- ping_timeout=number;
- سرآمد
زمانی را
برای تست ping
بر حسب دهم
ثانیه
تعیین
میکند (این
واحد به
دلایل
سازگاری با
گذشته
استفاده
میشود؛ در
واقع
پیادهسازی
فعلی تنها
با دقت یک
ثانیه عمل
میکند).
پیشفرض 600 (یک دقیقه) است. - ping_ip=string;
- آدرس IP برای تست ping. پیشفرض، آدرس IP همان سرور نام است.
- query_test_name=string;
- جدید در
نسخه 1.2.9:
نامی را که
باید در تست
در دسترس
بودن uptest=query
مورد
پرسوجو
قرار گیرد
تعیین
میکند. اگر
رشته ثابت
بدون
نقلقول none
باشد، یک
پرسوجوی
خالی
استفاده
میشود
(پیشفرض
همین است)،
در غیر این
صورت
پرسوجویی
از نوع A
برای نام
دامنه
مشخصشده
در اینجا
ارسال
خواهد شد.
برای
موفقیتآمیز
بودن تست در
دسترس
بودن،
الزامی
نیست که نام
دامنه
حتماً وجود
داشته باشد
یا رکوردی
از نوع A
داشته باشد.
اگر سرور راه دور پرسوجوهای خالی را نادیده میگیرد، احتمالاً میخواهید query_test_name="." (دامنه ریشه) را تنظیم کنید. - uptest_cmd=string,string;
- یا
- uptest_cmd=string;
- دستور
مربوط به
عملکرد uptest=exec
را روی رشته
اول تنظیم
میکند. اگر
رشته دوم
داده شود،
کاربری را
مشخص
میکند که
دستور با
شناسه
کاربر و
شناسه گروه
اصلی او
اجرا
میشود.
این گزینه بهویژه زمانی مفید است که سرور را بهعنوان کاربر ریشه (root) اجرا میکنید، اما نمیخواهید تست فعال بودن با امتیازات ریشه اجرا شود. در واقع، تا جایی که میتوانید هرگز نباید تست فعال بودن را بهعنوان ریشه اجرا کنید.
اگر سرور بهصورت setuid یا setgid اجرا میشود، امتیازات بهدستآمده حتی قبل از تغییر هویت به کاربر تعیینشده تلاش میشود سلب شوند تا از حفرههای امنیتی setuid/gid جلوگیری گردد (در غیر این صورت، اگر فایل اجرایی را setuid کنید، هر کاربری ممکن است دستوراتی را بهعنوان ریشه اجرا نماید).
توجه داشته باشید که این کار همیشه امکانپذیر نیست و pdnsd هرگز نباید بهصورت setuid یا setgid نصب شود. دستور با استفاده از /bin/sh اجرا میشود، بنابراین میتوانید از دستورات داخلی شل استفاده کنید. - interval=(timespec|onquery|ontimeout);
- بازه زمانی
تست فعال
بودن سرور
را تنظیم
میکند.
پیشفرض
۹۰۰ ثانیه
است؛ با این
حال، زمانی
که یک
پرسوجو با
سرآمد
مواجه
میشود،
تستی تحمیل
شده و برچسب
زمانی در آن
هنگام
بازنشانی
میگردد.
اگر به جای سرآمد، onquery را مشخص کنید، رابط شبکه پیش از هر پرسوجو آزمایش خواهد شد. این کار برای جلوگیری از شمارهگیری خودکار رابطها (diald/pppd یا ippp) در هنگام پرسوجوهای dns است. هدف آن استفاده در ارتباط با یک تست فعال بودن سنجش رابط است.
توجه داشته باشید که با استفاده از uptest=exec، ممکن است در ماشینهای کند هنگام استفاده از این گزینه با مشکلات کارایی مواجه شوید. از onquery همراه با uptest=ping یا uptest=query استفاده نکنید، زیرا اگر سرور پاسخ ندهد میتواند باعث تأخیر شود (بهعلاوه، در هر صورت چندان منطقی نیست). همچنین توجه داشته باشید که استفاده از onquery تضمینی برای عدم استفاده از رابط شبکه نیست. هنگامی که یک سرور dns دیگر (که در دسترس است) به pdnsd بگوید برای دریافت داده از یک سرور dns سوم پرسوجو کند، pdnsd این کار را انجام خواهد داد و راهی برای بررسی اینکه آیا این کار باعث شمارهگیری رابط میشود یا خیر ندارد. با این حال این مورد باید وضعیتی نادر باشد.
جدید در نسخه 1.2.3: احتمال سوم مشخص کردن interval=ontimeout است. در این حالت، سرور در هنگام راهاندازی/بازپیکربندی و همچنین در فواصل منظم آزمایش نمیشود، بلکه تنها پس از اینکه پرسوجوی DNS به یک سرور با سرآمد مواجه شد بررسی میگردد. انواع خاصی از مشکلات شبکه مانند رد اتصال (refused connection) نیز باعث میشوند سرور غیرقابل دسترس در نظر گرفته شود. با این حال، هنگامی که یک سرور مرده (dead) اعلام شد، دیگر هرگز در نظر گرفته نمیشود مگر اینکه با استفاده از دستور pdnsd-ctl config یا server احیا گردد. ایده پشت این گزینه این است که با فرض در دسترس بودن تمام سرورها تا زمانی که دلیلی بر خلاف آن وجود داشته باشد، تستهای در دسترس بودن به حداقل برسد. - interface=string;
- رابط شبکه (یا دستگاه شبکه، مثلاً "eth0") برای گزینه uptest=if. اگر uptest=if مشخص شده باشد، باید تعیین شود.
- device=string;
- دستگاه
(مودم) که
برای تست dev
استفاده
میشود. اگر
از این
گزینه برای
تست ppp
شمارهگیری
بر حسب
تقاضا
(همراه با uptest=dev)
استفاده
میکنید،
باید
دستگاهی را
که برای pppd
خود
استفاده
میکنید در
اینجا
وارد کنید،
مثلاً modem
برای /dev/modem.
اگر uptest=dev مشخص شده باشد، باید تعیین شود. - timeout=timespec;
- سرآمد
زمانی را
برای
پرسوجوی dns
تنظیم
میکند.
پیشفرض
۱۲۰ ثانیه
است.
احتمالاً
میخواهید
این مقدار
را کمتر
تنظیم کنید.
سرآمدهای مشخصشده در پرونده پیکربندی فقط بهعنوان حداقل مدت زمان انتظار برای پاسخ در نظر گرفته میشوند. پرسوجوها به یک سرور راه دور لغو نمیشوند تا زمانی که پاسخی مفید دریافت شود، یا تمام پرسوجوهای دیگر با سرآمد مواجه شده یا شکست بخورند.
اگر گزینه سرآمد سراسری (global timeout) را نیز تنظیم کردهاید، ممکن است بخواهید مقدار نسبتاً کوچکی را در اینجا تعیین کنید. برای معنای آن، توضیحات گزینه timeout در بخش global را ببینید. - purge_cache=(on|off);
- در هر رکورد
dns دریافت
شده، یک
مهلت زمانی
کَش داده
شده است که
مشخص
میکند
دادههای
دریافت شده
تا چه مدت
میتوانند
کَش شوند
قبل از
اینکه
نیاز به
بارگیری
مجدد داشته
باشند. اگر
purge_cache روی off
تنظیم شود،
رکوردهای
منقضیشده
پاک
نمیشوند
(مگر اینکه
اندازه کَش
از حد مجاز
فراتر رود
که در این
صورت
قدیمیترین
رکوردها
پاک
میشوند).
در عوض، اگر
نتوان
آنها را با
موفقیت
بهروزرسانی
کرد (مثلاً
به این دلیل
که تمام
سرورها قطع
هستند)،
همچنان
ارائه
میشوند.
پیشفرض off است. - caching=(on|off);
- مشخص میکند که آیا کَشسازی برای این سرور اصلاً انجام شود یا خیر. پیشفرض on است.
- lean_query=(on|off);
- مشخص
میکند که
آیا از حالت
پرسوجوی
"کمحجم" (lean)
استفاده
شود یا خیر.
در این
حالت، تنها
اطلاعاتی
که واقعاً
از pdnsd پرسیده
شده است
تفکیک و کَش
میشوند.
این کار این
مزیت را
دارد که
معمولاً
فضای کَش
کمتری مصرف
میشود و
پرسوجو
معمولاً
سریعتر
است. در ۹۰٪
موارد، در
هر صورت فقط
رکوردهای
آدرس (A) مورد
نیاز هستند.
در صورت
خاموش
بودن، pdnsd
همیشه تمام
دادههایی
را که
میتواند
درباره یک
میزبان
پیدا کند
کَش میکند
و بهطور
مشخص تمام
رکوردهای
موجود را
درخواست
خواهد کرد
(خوب، حداقل
این یک
تقریب خوب
از کاری است
که واقعاً
انجام
میدهد).
این امر
البته
اندازه
بستههای
پاسخ را
افزایش
میدهد.
برخی سرورهای نام معیوب ممکن است در صورتی که تمام رکوردها درخواست نشده باشد، رکوردهای CNAME را تحویل ندهند. مشخص نیست آیا چنین سرورهایی هنوز وجود دارند یا خیر، اما اگر در تفکیک نامهای میزبان خاصی مشکل دارید، خاموش کردن این گزینه را امتحان کنید.
یک نکته پایانی: اگر از چندین pdnsd استفاده میکنید که به یکدیگر دسترسی دارند، روشن کردن این گزینه احتمالاً یک برد بزرگ است.
این گزینه بهطور پیشفرض on است. - edns_query=(on|off);
- جدید در
نسخه 1.2.9:
مشخص
میکند که
آیا از EDNS
(سازوکارهای
توسعه برای
DNS) برای
پرسوجوهای
خروجی
استفاده
شود یا خیر.
در حال حاضر
این ویژگی
تنها برای
مجاز ساختن
اندازههای
پیام UDP
بزرگتر از
۵۱۲ بایت
مفید است.
توجه داشته
باشید که
فعال کردن
این گزینه
میتواند
در ترکیب با
برخی
سیستمها
یا
نرمافزارهای
قدیمی، از
جمله
متأسفانه
نسخههای
قبلی pdnsd،
مشکلاتی
ایجاد کند.
پیشفرض off است، اما اگر شبکه شما میتواند بارهای کاری (payloads) UDP بهمراتب بزرگتر از ۵۱۲ بایت را مدیریت کند، مقدار توصیهشده on است.
توجه داشته باشید که این گزینه فقط بر پرسوجوهای خروجی تأثیر میگذارد. اگر pdnsd پرسوجویی را با استفاده از EDNS دریافت کند، بدون در نظر گرفتن مقدار این گزینه، با استفاده از EDNS پاسخ خواهد داد.همچنین گزینه udpbufsize را در بالا ببینید.
- scheme=string;
- میتوانید یک طرح pcmcia-cs را مشخص کنید که علاوه بر تستهای در دسترس بودن استفاده شود. اگر طرحی را در اینجا مشخص کنید، سروری که این بخش برای آن است تنها در صورتی پرسوجو میشود که طرح دادهشده فعال باشد. نویسههای عام شل (* و ?) در رشته تحت معانی خاص خود مجاز هستند. برای کارکرد این گزینه باید از گزینه scheme_file در بخش global استفاده کنید.
- preset=(on|off);
- این گزینه به شما امکان میدهد وضعیت اولیه سرور را قبل از انجام هرگونه تست در دسترس بودن مشخص کنید. مقدار on مشخص میکند که سرور در دسترس فرض میشود. پیشفرض on است. این گزینه بهویژه زمانی مفید است که uptest=none; را تنظیم کردهاید و میخواهید وضعیت یک سرور را تنها از طریق pdnsd-ctl تغییر دهید.
- proxy_only=(on|off);
- هنگامی که
این گزینه
روی on تنظیم
شود،
پاسخهای
ارائهشده
توسط
سرورها
همیشه
پذیرفته
میشوند و
از هیچ سرور
دیگری
(همانطور
که برای
مثال در
رکوردهای NS
دامنه
پرسوجو
مشخص شده
است)
پرسوجو
نمیشود.
اگر این
گزینه را
روشن
نکنید، pdnsd در
برخی موارد
(بهویژه
هنگام
پردازش
پرسوجوهای
ANY) چنین
پرسوجوهایی
را انجام
خواهد داد.
این گزینه زمانی مفید است که بنا به دلایلی (مثلاً زمانی که یک فایروال چنین پرسوجوهایی را مسدود میکند) نمیخواهید pdnsd به سرورهای خارجی متصل شود.
توصیه میشود هنگام استفاده از این گزینه، lean_query را روشن کنید.
پیشفرض off است. - root_server=(on|off|discover);
- اگر
سرورهای
مشخصشده
در یک بخش
سرورهای
ریشه
هستند، این
گزینه را
روی on تنظیم
کنید. یک
سرور ریشه
معمولاً در
پاسخ خود
فقط
کارگزارهای
نام برای
دامنه
سطحبالا (TLD)
را ارائه
میدهد.
تنظیم root_server=on
باعث
میشود pdnsd
تلاش کند از
اطلاعات
کَششده
درباره
دامنههای
سطحبالا
برای کاهش
تعداد
پرسوجوها
به سرورهای
ریشه
استفاده
کند و تفکیک
نامهای
جدید را
کارآمدتر
سازد.
میتوانید
با اجرای
دستور
"dig . ns"
فهرستی از
سرورهای
ریشه در
دسترس را
دریافت
کنید.
این گزینه همچنین در صورت استفاده از گزینه delegation_only ضروری است.
جدید در نسخه 1.2.8: این گزینه ممکن است روی "discover" نیز تنظیم شود. این کار باعث میشود pdnsd از سرورهای ارائهشده با گزینه ip= پرسوجو کند تا فهرست کامل سرورهای ریشه را به دست آورد. آدرسهای سرور ریشه جایگزین آدرسهای مشخصشده با گزینه ip= خواهند شد. این کار تنها یکبار در هنگام راهاندازی یا پس از دستور "pdnsd-ctl config" انجام میشود. در این حالت کارگزارهای نام مشخصشده با گزینه ip= نیازی نیست حتماً سرور ریشه باشند، آنها فقط باید نامها و آدرسهای سرورهای ریشه را بدانند. پس از کشف سرور ریشه، pdnsd دقیقاً بهگونهای رفتار خواهد کرد که گویی root_server=on مشخص شده بود.
پیشفرض off است. - randomize_servers=(on|off);
- جدید در
نسخه 1.2.6: این
گزینه را
روی on تنظیم
کنید تا به
هر سرور نام
در این بخش
شانس
برابری
برای
پرسوجو
شدن داده
شود. اگر
این گزینه
خاموش
باشد،
سرورهای
نام همیشه
با شروع از
اولین سرور
مشخصشده
مورد پرسش
قرار
میگیرند.
حتی با روشن
بودن این
گزینه،
ترتیب
پرسوجو
واقعاً
تصادفی
نیست. تنها
سرور اول
بهطور
تصادفی
انتخاب
میشود؛
سرورهای
بعدی به
ترتیب پشت
سر هم
پرسوجو
میشوند و
با رسیدن به
انتهای
فهرست به
ابتدای آن
بازمیگردند.
توجه داشته
باشید که
این گزینه
فقط بر
ترتیب درون
یک بخش
تأثیر
میگذارد.
سرورهای
موجود در
بخش اول
(فعال)
همیشه قبل
از سرورهای
بخش دوم
پرسوجو
میشوند، و
غیره.
پیشفرض off است، اما اگر در حال تفکیک از سرورهای ریشه هستید، تنظیم این گزینه روی on بهشدت توصیه میشود. اگر root_server=on باشد، این گزینه بر ترتیب پرسوجوی کارگزارهای نام برای دامنههای سطحبالا نیز تأثیر میگذارد. - reject=string;
- جدید در
نسخه 1.2.6: از
این گزینه
میتوان
برای رد
پاسخهایی
که حاوی
آدرسهای IP
خاصی هستند
توسط pdnsd
استفاده
کرد.
میتوانید
یک آدرس IP
تکی را مشخص
کنید که
دقیقاً
تطبیق داده
میشود، یا
محدودهای
از آدرسها
را با
استفاده از
یک جفت
آدرس/ماسک
(address/mask) تعیین
نمایید.
ماسک
میتواند
بهعنوان
یک عدد صحیح
ساده مشخص
شود که
تعداد
بیتهای ۱
اولیه در
ماسک را
نشان
میدهد، یا
در قالب
معمول
نشانی IP
نوشته شود.
آدرسهای IP
ممکن است IPv4
یا IPv6 باشند
(به شرطی که
پشتیبانی
کافی در
کتابخانههای
C وجود
داشته باشد
و پشتیبانی
از
رکوردهای AAAA
غیرفعال
نشده باشد).
هنگامی که
آدرسهای
موجود در
فهرست رد با
آدرسهای
موجود در
پاسخ
مقایسه
میشوند،
فقط
بیتهای
متناظر با
بیتهای
تنظیمشده
در نتماسک
معنادار
هستند و
بقیه
نادیده
گرفته
میشوند.
میتوان چندین آدرس یا جفت آدرس/ماسک را مشخص کرد؛ این کار را میتوان با وارد کردن چندین خط به فرم reject=string; یا یک خط تکی مانند این انجام داد:reject=string,string,string;
نحوه واکنش pdnsd هنگامی که یک آدرس در پاسخ با یکی از آدرسهای موجود در فهرست رد مطابقت دارد، به گزینه reject_policy بستگی دارد؛ به زیر مراجعه کنید.
- reject_policy=(fail|negate);
- جدید در
نسخه 1.2.6: این
گزینه
تعیین
میکند که pdnsd
چه کاری
انجام دهد
هنگامی که
یک آدرس در
پاسخ از یک
سرور نام با
فهرست رد
مطابقت
دارد (به
بالا
مراجعه
کنید). اگر
این گزینه
روی fail تنظیم
شود، pdnsd سرور
دیگری را
امتحان
میکند، یا
اگر سرور
دیگری برای
امتحان
کردن وجود
نداشته
باشد، پاسخ
SERVFAIL را
بازمیگرداند.
اگر این
گزینه روی negate
تنظیم شود،
pdnsd بلافاصله
پاسخ NXDOMAIN
(دامنه
ناشناخته)
را بدون
پرسوجو از
سرورهای
اضافی
بازمیگرداند.
تنظیم fail
زمانی مفید
است که شما
همیشه به
سرورهای
این بخش
اعتماد
ندارید،
اما به
سرورهای
بخش بعدی
اعتماد
دارید.
تنظیم negate را
میتوان
برای
سانسور
کامل برخی
آدرسهای IP
خاص
استفاده
کرد. در این
حالت باید
همان فهرست
رد را در هر
بخش server قرار
دهید و
همچنین
گزینه reject_recursively
(به زیر
مراجعه
کنید) را
روی true تنظیم
نمایید.
پیشفرض fail است. - reject_recursively=(on|off);
- جدید در
نسخه 1.2.6:
بهطور
معمول pdnsd
تنها زمانی
آدرسهای
موجود در
فهرست رد را
بررسی
میکند (به
بالا
مراجعه
کنید) که
پاسخ
مستقیماً
از یک سرور
نام
فهرستشده
در پرونده
پیکربندی
آمده باشد.
با روشن
کردن این
گزینه (on)، pdnsd
این بررسی
را برای
کارگزارهای
نامی که از
رکوردهای NS
در بخش
اعتبارسنجی
یک پاسخ
قبلی (که
ناقص و
غیرمعتبر
بوده) به
دست
آمدهاند
نیز انجام
خواهد داد.
پیشفرض off است. - 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 داده
شود، سرور
تنها برای
نامهایی
که شامل دو
یا چند بخش
هستند (یعنی
نام حداقل
یک نقطه در
بین خود
دارد)
استفاده
خواهد شد.
اگر هیچ سروری برای یک دامنه مورد پرسش در دسترس نباشد، pdnsd یک پیام خطا به کلاینت بازمیگرداند که معمولاً تلاشهای کلاینت برای تفکیک یک دامنه خاص از این سرور را متوقف میکند (مثلاً تحلیلگر libc در صورتی که هیچ سرور دیگری در resolv.conf در دسترس نباشد، خطایی را به برنامهای که تلاش کرده دامنه را تفکیک کند بازمیگرداند). این ممکن است گاهی مفید باشد.
نکته: مقادیر ثابت simple_only و fqdn_only توسط Paul Rombouts اضافه شدهاند. آنها برای کنترل اینکه کدام کارگزارهای نام (در صورت وجود) توسط pdnsd برای تفکیک نامهای میزبان ساده (تکبرچسبی) استفاده شوند مفید هستند. عبارت fqdn_only پیشتر مخفف "fully qualified domain name only" بود، اما این در واقع یک نامگذاری نادرست است. نامها در پرسوجوهای دریافتشده توسط pdnsd همیشه کاملاً واجد شرایط (fully qualified) در نظر گرفته میشوند. اگر دقیقاً متوجه نمیشوید که گزینههای simple_only و fqdn_only برای چه کاری مفید هستند، احتمالاً بهتر است از آنها استفاده نکنید.
پیشفرض برای این گزینه included است. - include=string;
- این گزینه
مدخلی را به
فهرست
حذف/گنجاندن
اضافه
میکند. اگر
دامنهای
با نام
دادهشده
بهعنوان
رشته
مطابقت
داشته
باشد، در
صورتی که
این اولین
قاعده
تطبیقیافته
باشد از
سرور
پرسوجو
میشود
(همچنین
مدخل مربوط
به policy را
ببینید).
اگر نام دادهشده با یک نقطه شروع شود، کل زیردامنه نام دادهشده شامل خود آن نام مطابقت داده میشود؛ بهعنوان مثال ".foo.bar." با نامهای دامنه a.foo.bar.، a.b.c.foo.bar. و foo.bar. مطابقت خواهد داشت.
اگر با نقطه شروع نشود، تنها دقیقاً نام دادهشده (البته بدون در نظر گرفتن بزرگی و کوچکی حروف) مطابقت داده خواهد شد (راهنمایی: اگر میخواهید تمام زیردامنهها را شامل کنید اما خود دامنه دادهشده را نه، یک قاعده exclude تطابق دقیق را قبل از قاعده include قرار دهید، مثلاً: exclude="foo.bar."; include=".foo.bar.";).
نسخههای قبلی pdnsd الزامی کرده بودند که نامهای ارائهشده با این گزینه و گزینه بعدی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd در صورت عدم وجود نقطه در انتها، بهطور خودکار آن را اضافه میکند.
اکنون pdnsd یک ساختار فشردهتر را برای افزودن چندین مدخل "include" در یک خط میپذیرد، مثلاً:include=".foo",".bar",".my.dom";
- exclude=string;
- این گزینه
مدخلی را به
فهرست
حذف/گنجاندن
اضافه
میکند. اگر
دامنهای
با نام
دادهشده
بهعنوان
رشته
مطابقت
داشته
باشد، در
صورتی که
این اولین
قاعده
تطبیقیافته
باشد از
سرور
پرسوجو
نمیشود
(همچنین
مدخل مربوط
به policy را
ببینید).
اگر نام دادهشده با یک نقطه شروع شود، کل زیردامنه نام دادهشده شامل خود آن نام مطابقت داده میشود؛ بهعنوان مثال ".foo.bar." با نامهای دامنه a.foo.bar.، a.b.c.foo.bar. و foo.bar. مطابقت خواهد داشت.
اگر با نقطه شروع نشود، تنها دقیقاً نام دادهشده (البته بدون در نظر گرفتن بزرگی و کوچکی حروف) مطابقت داده خواهد شد (راهنمایی: اگر میخواهید تمام زیردامنهها را حذف کنید اما خود دامنه دادهشده را نه، یک قاعده include تطابق دقیق را قبل از قاعده exclude قرار دهید، مثلاً: include="foo.bar."; exclude=".foo.bar.";).
اکنون pdnsd ساختار فشردهتری را نیز برای افزودن چندین مدخل "exclude" در یک خط میپذیرد، مثلاً:exclude=".foo",".bar",".my.dom";
بخش rr
هر بخش rr یک
رکورد منبع
dns را مشخص
میکند که
بهصورت
محلی ذخیره
میشود. این
بخش به شما
امکان
میدهد
رکوردهای dns
خودتان را
مشخص کنید
که توسط pdnsd به
شکلی محدود
ارائه
میشوند.
تنها
رکوردهای A،
PTR، CNAME، MX، NS و SOA
پیادهسازی
شدهاند.
هدف این
گزینه این
است که به
شما امکان
دهد RRهایی را
برای 1.0.0.127.in-addr.arpa. و localhost.
(و شاید حتی
یک یا دو
میزبان)
بدون نیاز
به
راهاندازی
یک named اضافی
تعریف کنید
اگر
کارگزارهای
نام
کَشکننده
شما آن
رکوردها را
ارائه
نمیدهند.
این ویژگی
برای کار
بهعنوان
یک سرور نام
تمامعیار
در نظر
گرفته
نشده و
قادر به
انجام آن
نیز نیست.
- name=string;
- نام
رکوردهای
منبع را
مشخص
میکند،
یعنی نام
دامنه
منبعی که
رکورد
توصیف
میکند. این
گزینه باید
قبل از
هرگونه
رکورد a، ptr،
cname، mx، ns یا soa
مشخص شود.
نامها
بهعنوان
نامهای
دامنه مطلق
تفسیر
میشوند
(یعنی pdnsd فرض
میکند
آنها به
دامنه ریشه
ختم
میشوند).
برای این
آرگومان و
تمام
آرگومانهای
بعدی که نام
دامنه
میگیرند،
باید
نامهای
دامنه را با
نشانهگذاری
نقطهدار
مشخص کنید
(مثال: venera.isi.edu.).
نسخههای قبلی pdnsd نیازمند آن بودند که نامهای دامنه دادهشده در پرونده پیکربندی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd بهطور خودکار فرض میکند که در صورت عدم وجود، یک نقطه در انتها قرار دارد.
جدید در نسخه 1.2: همچنین امکانپذیر است نامی را مشخص کنید که با برچسب * شروع میشود. چنین نامی یک وایلدکارت (wildcard) نامیده میشود. نویسه * در یک وایلدکارت میتواند با یک یا چند بخش در یک نام پرسیده شده مطابقت داشته باشد، اما تنها با بخشهای کامل. هر نویسه * دیگر در یک وایلدکارت به جز نویسه ابتدایی، تنها با یک نویسه واقعی * تطابق خواهد یافت.
برای مثال، *.mydomain با a.mydomain یا www.a.mydomain مطابقت دارد، اما با mydomain مطابقت ندارد. عبارت *.a*.mydomain با www.a*.mydomain تطابق خواهد داشت، اما با www.ab.mydomain تطابق ندارد. عبارت *a.mydomain تنها با خودش مطابقت خواهد داشت.
قبل از اینکه بتوانید یک بخش rr با name=*.mydomain مشخص کنید، باید رکوردهایی را برای mydomain تعریف نمایید، معمولاً رکوردهای NS و/یا SOA. مثال:
rr {
name = mydomain;
ns = localhost;
soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400;
}
rr {
name = *.mydomain;
a = 192.168.1.10;
}در این مثال، www.mydomain و ftp.mydomain به آدرس عددی 192.168.1.10 تفکیک خواهند شد (مگر اینکه بخشهای rr را بهصراحت برای تعیین آدرسهای متفاوت برای www.mydomain یا ftp.mydomain اضافه کنید). اگر میخواهید mydomain نیز به یک آدرس عددی تفکیک شود، یک رکورد A به بخش rr اول اضافه کنید.
- ttl=timespec;
- زمان حیات (ttl) را برای تمام رکوردهای منبع در این بخش پس از این مدخل مشخص میکند. این مقدار را میتوان مجدداً بازتعریف کرد. مقدار پیشفرض ۸۶۴۰۰ ثانیه (معادل یک روز) است.
- authrec=(on|off);
- اگر این
گزینه روشن
باشد، pdnsd
رکوردهای
محلی معتبر
(authoritative) برای این
بخش rr ایجاد
خواهد کرد.
این بدان
معناست که pdnsd
رکورد
دامنه را
پرچمگذاری
میکند تا
رکوردهایی
از این
دامنه که در
کَش وجود
ندارند
بهعنوان
ناموجود
تلقی شوند؛
یعنی هیچ
سرور دیگری
برای آن نوع
رکورد
پرسوجو
نمیشود و
پاسخی حاوی
هیچیک از
آن رکوردها
بازگردانده
میشود. این
رفتار در
اغلب اوقات
همان چیزی
است که
افراد
میخواهند:
اگر یک
رکورد A
برای یک
میزبان
اضافه کنید
و رکورد AAAA
نداشته
باشد
(بنابراین
آدرس IPv6
ندارد)،
معمولاً
نمیخواهید
سایر
کارگزارهای
نام برای آن
پرسوجو
شوند.
این گزینه بهطور پیشفرض on است.
لطفاً توجه داشته باشید که این گزینه تنها در صورتی تأثیر دارد که قبل از گزینه name قرار گیرد! - reverse=(on|off);
- جدید در
نسخه 1.2: اگر
میخواهید
یک نام
تعریفشده
بهصورت
محلی به یک
آدرس عددی
تفکیک شود و
بالعکس،
میتوانید
با تنظیم reverse=on
قبل از
تعریف
رکورد A (به
زیر مراجعه
کنید) به
این هدف دست
یابید. روش
جایگزین،
تعریف یک
رکورد
جداگانه PTR
است، اما
احتمالاً
این گزینه
را بسیار
راحتتر
خواهید
یافت.
پیشفرض off است. - a=string;
- یک رکورد A
(آدرس
میزبان)
تعریف
میکند.
آرگومان یک
آدرس IPv4 با
نشانهگذاری
نقطهدار
است. pdnsd این
آدرس را
برای نام
میزبان
ارائهشده
در گزینه name
ارائه
خواهد داد.
به شرطی که پشتیبانی کافی در کتابخانههای C وجود داشته باشد و پشتیبانی از رکوردهای AAAA غیرفعال نشده باشد، رشته آرگومان میتواند یک آدرس IPv6 نیز باشد که در این صورت یک رکورد AAAA تعریف خواهد شد.
این گزینه میتواند چندین بار درون یک بخش rr استفاده شود و باعث تعریف چندین آدرس برای نام گردد. با این حال، اگر آدرسهای مختلف را در بخشهای rr متفاوتی برای همان نام قرار دهید، تعریف موجود در آخرین بخش rr تعاریف موجود در بخشهای قبلی را لغو خواهد کرد. - ptr=string;
- یک رکورد PTR
(اشارهگر
نام دامنه)
تعریف
میکند.
آرگومان یک
نام میزبان
با
نشانهگذاری
نقطهدار
است (name را
ببینید).
رکورد ptr
برای تفکیک
آدرسها به
نامها است.
بهعنوان
مثال، اگر
میخواهید
آدرس 127.0.0.1 به localhost
و localhost به 127.0.0.1
تفکیک شود،
به چیزی
شبیه به
بخشهای
زیر نیاز
دارید:
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;
}بخش دوم برای تفکیک معکوس است و از گزینه ptr استفاده میکند. توجه داشته باشید که میتوانید همان اثر را صرفاً با مشخص کردن اولین بخش rr همراه با reverse=on به دست آورید.
موضوع خاصی درباره نام موجود در بخش دوم وجود دارد: هنگامی که یک تحلیلگر میخواهد نام میزبانی را از یک آدرس اینترنتی دریافت کند، آدرسی را تشکیل میدهد که از آدرس IP با ترتیب بایت معکوس ساخته شده است (1.0.0.127 به جای 127.0.0.1) که در آن هر بایت از آدرس نوشتهشده بهعنوان عدد، یک زیردامنه را تحت دامنه in-addr.arpa تشکیل میدهد.
بنابراین، اگر میخواهید آدرسی را برای تفکیک معکوس تشکیل دهید، آدرس ip خود را با نشانهگذاری نقطهدار در نظر بگیرید (مثلاً 1.2.3.4)، ترتیب بایتها را معکوس کنید (4.3.2.1) و in-addr.arpa. را به آن اضافه کنید (4.3.2.1.in-addr.arpa.). سپس، یک بخش rr تعریف کنید که این آدرس را بهعنوان name و نام دامنه متناظر با آن ip را در گزینه ptr ارائه میدهد. - cname=string;
- یک رکورد CNAME
(نام
متعارف)
تعریف
میکند.
آرگومان
باید یک نام
میزبان
کاملاً
واجد شرایط
(FQDN) با
نشانهگذاری
نقطهدار
باشد (name را
ببینید). یک
رکورد CNAME
معادل DNS
برای یک نام
مستعار (alias) یا
پیوند
نمادین (symlink)
است.
یک کاربرد مفید برای CNAMEها دادن نامهای مستعار کوتاه و با یادآوری آسان به میزبانهایی با نامهای پیچیده است. بهعنوان مثال، ممکن است بخواهید نام "news" به سرور اخبار ارائهدهنده خدمات اینترنتی شما به نام "nntp2.myisp.com" ارجاع داده شود. به جای اضافه کردن یک رکورد A برای "news" با همان آدرس "nntp2.myisp.com"، میتوانید یک CNAME قرار دهید که به "nntp2.myisp.com" اشاره کند، به طوری که اگر آدرس IP سرور اخبار تغییر کند، نیازی به بهروزرسانی رکورد مربوط به "news" نباشد.
برای پیادهسازی این مورد در pdnsd، میتوانید بخش زیر را به پرونده پیکربندی خود اضافه کنید:
rr {
name = news;
cname = nntp2.myisp.com;
owner = localhost;
} - mx=string,number;
- یک رکورد MX
(تبادل
نامه) تعریف
میکند.
رشته، نام
میزبان
سرور نامه
با
نشانهگذاری
نقطهدار
است (name را
ببینید).
عدد، سطح
اولویت (preference level)
را مشخص
میکند.
هنگامی که به شخصی نامه ارسال میکنید، نامه شما معمولاً از کلاینت ایمیل شما به یک سرور SMTP میرود. سپس سرور SMTP رکورد MX دامنه موجود در نشانی ایمیل را بررسی میکند. برای مثال با joe@example.com، این سرور به دنبال رکورد MX برای example.com میگردد و میفهمد که نام سرور نامه برای آن دامنه، مثلاً mail.example.com است. سپس سرور SMTP رکورد A را برای mail.example.com دریافت کرده و به سرور نامه متصل میشود.
اگر چندین رکورد MX وجود داشته باشد، سرور SMTP یکی را بر اساس سطح اولویت انتخاب میکند (با کمترین شماره اولویت شروع کرده و به سمت بالا حرکت میکند).
رکوردهای MX را با pdnsd تعریف نکنید مگر اینکه بدانید در حال انجام چه کاری هستید. - owner=string;
- یا
- ns=string;
- یک رکورد NS
(کارگزار
نام) تعریف
میکند. نام
میزبانی را
مشخص
میکند که
باید برای
رکوردهایی
که در بخش rr
تعریف
کردهاید
مرجع معتبر
(authoritative) باشد. این
معمولاً
میزبانی
است که pdnsd روی
آن اجرا
میشود.
نکته: در نسخههای قبلی pdnsd این گزینه باید قبل از هرگونه مدخل a، ptr، cname، mx یا soa مشخص میشد. در نسخه 1.2، محدودیتهای این گزینه همانند گزینههای ذکرشده است و باید پس از گزینه name= فهرست شود. اگر بخواهید از پرونده پیکربندی قدیمی استفاده کنید که owner= را قبل از name= مشخص کرده است، این تغییر ممکن است دردسرساز باشد. صرفنظر از سازگاری بیشتر، مزیت این است که اکنون میتوانید هر تعداد رکورد NS که دوست دارید مشخص کنید (از جمله صفر). - soa=string,string,number,timespec,timespec,timespec,timespec;
- این گزینه
یک رکورد soa
(شروع
مرجعیت / start of authority)
را تعریف
میکند.
رشته اول
نام دامنه
سرور است و
باید برابر
با نامی
باشد که
بهعنوان owner
مشخص
کردهاید.
رشته دوم آدرس ایمیل مسئول نگهداری سرور نام را مشخص میکند. این رشته نیز بهعنوان یک نام دامنه مشخص میشود، بنابراین باید علامت @ در نام را با یک نقطه (.) جایگزین کنید تا نامی را که باید در اینجا وارد نمایید به دست آورید. پارامتر بعدی (عدد اول) شماره سریال رکورد است. در صورت تغییر رکورد باید این عدد را افزایش دهید.
پارامتر چهارم سرآمد تازهسازی (refresh timeout) است. این پارامتر مشخص میکند که یک سرور کَشکننده پس از چه مدتی باید برای تازهسازی رکورد کَششده تلاش کند.
پارامتر پنجم زمانی را مشخص میکند که پس از آن، یک سرور کَشکننده باید پس از شکست در تازهسازی، مجدداً برای تازهسازی رکورد تلاش نماید.
پارامتر ششم سرآمدی را مشخص میکند که پس از آن، یک رکورد کَششده در صورت عدم تازهسازی منقضی میشود.
پارامتر هفتم ttl است که در هر rr مشخص میشود و باید همان مقداری باشد که با گزینه ttl داده شده است (اگر ttl را مشخص نکردهاید، از پیشفرض 86400 استفاده کنید). - txt=string,...,string;
- جدید در نسخه 1.2.9: یک رکورد TXT تعریف میکند. در اینجا میتوانید یک یا چند رشته را مشخص نمایید.
بخش neg
هر بخش neg یک
رکورد منبع
dns یا یک
دامنه dns را
مشخص
میکند که
باید
بهصورت
محلی
بهطور
منفی کَش
شود.
پرسوجوها
برای
رکوردهای
کَششده
منفی
همواره تا
زمانی که
رکورد
معتبر است
بلافاصله
با یک خطا یا
یک پاسخ
خالی بدون
پرسوجو از
سایر
میزبانها
پاسخ داده
میشوند.
رکوردهای
تعریفشده
با بخشهای
neg معتبر
باقی
میمانند
تا زمانی که
صراحتاً با
استفاده از
pdnsd-ctl توسط
کاربر
بیاعتبار
یا حذف شوند.
این گزینه
زمانی مفید
است که
برنامه
خاصی
بهطور
دورهای
میزبانها
یا انواع RR
ناموجود را
درخواست
میکند و
شما
نمیخواهید
هر بار که
رکورد
کَششده
منقضی شد،
پرسوجویی
ارسال شود.
مثال: Netscape Communicator در
صورت عدم
پیکربندی،
هنگام
راهاندازی
سرورهای news و mail
را درخواست
میکند. اگر
فهرست
جستجوی dns
برای شبکه
خود
ندارید،
میتوانید
با مشخص
کردن موارد
زیر در
پرونده
پیکربندی
خود،
پرسوجوهای
خروجی برای
اینها را
مهار کنید:
neg {
name = news;
types = domain;
}
neg {
name = mail;
types = domain;
}
اگر فهرست
جستجو
دارید،
علاوه بر
مدخلهای
دادهشده
در بالا،
باید این
کار را برای
هر مدخل در
فهرست
جستجوی خود
نیز تکرار
کنید!
در
نسخههای 1.1.11
و بعد از آن،
اگر کل
دامنهها
را به این
روش نفی (negate)
کنید، تمام
زیردامنهها
نیز نفی
خواهند شد.
بنابراین
اگر در
پرونده
پیکربندی
عبارت زیر
را مشخص
کنید:
neg {name=example.com; types=domain;} این
کار همچنین
www.example.com، xxx.adserver.example.com و
غیره را نیز
نفی خواهد
کرد.
- name=string;
- نام
دامنهای
را که
مدخلهای
کَش منفی
برای آن
ایجاد
میشوند
مشخص
میکند. این
گزینه باید
قبل از
گزینه types
مشخص شود.
نامها
بهعنوان
نامهای
دامنه مطلق
تفسیر
میشوند
(یعنی pdnsd فرض
میکند
آنها به
دامنه ریشه
ختم
میشوند).
باید
نامهای
دامنه را با
نشانهگذاری
نقطهدار
مشخص کنید
(مثال: venera.isi.edu.).
نسخههای قبلی pdnsd الزامی کرده بودند که نامهای دامنه دادهشده در پرونده پیکربندی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd بهطور خودکار فرض میکند که در صورت عدم وجود، یک نقطه در انتها قرار دارد. - ttl=timespec;
- زمان حیات (ttl) را برای تمام رکوردهای منبع در این بخش پس از این مدخل مشخص میکند. این مقدار را میتوان مجدداً بازتعریف کرد. پیشفرض ۸۶۴۰۰ ثانیه (معادل یک روز) است.
- types=(domain|rr_type[,rr_type[,rr_type[,...]]]);
- مشخص
میکند چه
چیزی باید
بهصورت
منفی کَش
شود: مقدار domain
کل دامنه را
بهصورت
منفی کَش
میکند؛
متناوباً،
میتوانید
فهرستی از
انواع RR
جداشده با
کاما را
مشخص کنید
که قرار است
بهطور
منفی کَش
شوند.
میتوانید
چندین
گزینه types را
مشخص کنید،
اما domain و
انواع RR
مانعةالجمع
هستند.
انواع RR با استفاده از نامهای رسمی آنها از RFCها با حروف بزرگ مشخص میشوند، مانند A، CNAME، NS، PTR، MX، AAAA و غیره.
دستور pdnsd-ctl list-rrtypes فهرستی کامل از آن انواع را به شما خواهد داد. ابزار pdnsd-ctl همراه با pdnsd ساخته میشود و در طول make install در همان دایرکتوری باینری pdnsd نصب خواهد شد.
بخش source
هر بخش source به
شما امکان
میدهد به pdnsd
اجازه دهید
رکوردها را
از
پروندهای
با قالبی
شبیه به /etc/hosts
بخواند. pdnsd
رکوردهایی
تولید
میکند تا
برای هر
مدخل در
پرونده،
آدرس مدخل
را از نام
میزبان آن و
بالعکس
تفکیک کند.
این روش
معمولاً
آسانتر از
تعریف یک rr
برای هر یک
از
آدرسهای
شماست،
زیرا localhost و
سایر FQDNهای
شما
معمولاً در
/etc/hosts داده
شدهاند.
قالب
پذیرفتهشده
به شرح زیر
است: علامت #
یک کامنت را
آغاز
میکند،
بقیه خط از
اولین
رخداد این
نویسه به
بعد نادیده
گرفته
میشود.
خطوط خالی
مجاز هستند.
اولین مدخل
در یک خط (که
پیش از آن
تعداد
اختیاری
برگه یا
فاصله قرار
دارد) آدرس IP
با
نشانهگذاری
نقطهدار
است؛ مدخل
دوم در یک خط
(که با تعداد
اختیاری
برگه یا
فاصله از
مدخل اول
جدا شده است)
FQDN (نام دامنه
کاملاً
واجد شرایط)
برای آن IP
است. بقیه خط
بهطور
پیشفرض
نادیده
گرفته
میشود (در
پرونده
اصلی /etc/hosts،
ممکن است
حاوی
اطلاعاتی
باشد که
مورد نیاز pdnsd
نیست).
- owner=string;
- نام
میزبانی را
که pdnsd روی آن
اجرا
میشود و در
پاسخهای dns
(بهویژه
رکوردهای
کارگزار
نام) مشخص
میگردد،
تعیین
میکند.
باید قبل از
هر مدخل file
مشخص شود.
نامها بهعنوان نامهای دامنه مطلق تفسیر میشوند (یعنی pdnsd فرض میکند آنها به دامنه ریشه ختم میشوند). باید نامهای دامنه را با نشانهگذاری نقطهدار مشخص کنید (مثال: venera.isi.edu.).
نسخههای قبلی pdnsd الزامی کرده بودند که نامهای دامنه دادهشده در پرونده پیکربندی به یک نقطه ختم شوند، اما از نسخه 1.1.8b1-par8، pdnsd بهطور خودکار فرض میکند که در صورت عدم وجود، یک نقطه در انتها قرار دارد. - ttl=timespec;
- زمان حیات (ttl) را برای تمام رکوردهای منبع در این بخش پس از این مدخل مشخص میکند. این مقدار را میتوان مجدداً بازتعریف کرد. پیشفرض ۸۶۴۰۰ ثانیه (معادل یک روز) است.
- file=string;
- رشته، نام یک پرونده را مشخص میکند. برای هر مدخل file در یک بخش source، pdnsd تلاش میکند پرونده دادهشده را همانطور که در بالا شرح داده شد بارگیری کند. شکست تنها زمانی اعلام میشود که پرونده باز نشود؛ مدخلهای با ساختار نامعتبر نادیده گرفته خواهند شد.
- serve_aliases=(on|off);
- اگر این
گزینه روشن
باشد، pdnsd
نامهای
مستعار
دادهشده
در
پروندهای
به سبک hosts را
ارائه
خواهد داد.
اینها
مدخل سوم در
یک خط از
پرونده سبک
hosts هستند که
معمولاً یک
"نام
کوتاه"
برای
میزبان
ارائه
میدهند.
این ویژگی
ممکن است
برای
پشتیبانی
از
کلاینتهای
معیوب بدون
گزینه
مناسب domain-search
استفاده
شود. اگر در
یک خط از
پرونده هیچ
نام
مستعاری
داده نشده
باشد، pdnsd
برای آن خط
همانند
حالت بدون
این گزینه
عمل میکند.
این ویژگی توسط Bert Frederiks پیشنهاد شده است.
بهطور پیشفرض off است. - authrec=(on|off);
- اگر این
گزینه روشن
باشد، pdnsd با
دادههای
پرونده hosts
رکوردهای
محلی معتبر
(authoritative) ایجاد
خواهد کرد.
لطفاً برای
توضیحات
دقیقتر
درباره
معنای این
موضوع، به
شرح گزینه
با همین نام
در بخش rr
مراجعه
کنید. لطفاً
توجه داشته
باشید که
این گزینه
تنها برای
پروندههایی
تأثیر دارد
که با
گزینههای
file پس از این
گزینه
فراخوانی
شده باشند.
این گزینه بهطور پیشفرض on است.
بخش include
یک پرونده
پیکربندی
ممکن است
شامل
پروندههای
پیکربندی
دیگر باشد.
با این حال،
تنها
پرونده
پیکربندی
سطح بالا
میتواند
شامل
بخشهای global و
server باشد،
بنابراین
پروندههای
include عملاً به
بخشهایی
محدود
میشوند که
تعاریف
محلی را به
کَش اضافه
میکنند.
بخشهای include
در حال حاضر
تنها یک نوع
گزینه
دارند که
ممکن است
چندین بار
درون یک بخش
واحد مشخص
شود.
- file=string;
- رشته، نام یک پرونده را مشخص میکند. برای هر گزینه file در یک بخش include، pdnsd پرونده دادهشده را همانطور که در بالا شرح داده شد تجزیه خواهد کرد. پرونده ممکن است خودش حاوی بخشهای include باشد، اما pdnsd بهعنوان یک اقدام احتیاطی بررسی میکند که از حداکثر عمق معینی تجاوز نشود تا در برابر احتمال بازگشت بینهایت محافظت به عمل آید.
نسخه (VERSION)
این صفحه راهنما برای نسخه 1.2.9b-par از pdnsd معتبر است.
همچنین ببینید (SEE ALSO)
مستندات بیشتر در زیردایرکتوری doc/ از سورسکد، یا در /usr/share/doc/pdnsd در صورتی که از یک بسته باینری استفاده میکنید، در دسترس است.
نویسندگان (AUTHORS)
pdnsd در ابتدا توسط Thomas Moestl <tmoestl@gmx.net> نوشته شد و توسط Paul A. Rombouts <p.a.rombouts@home.nl> بهطور گسترده بازنگری شد (برای نسخههای 1.1.8b1-par و بعد از آن).
چندین نفر دیگر در pdnsd مشارکت داشتهاند؛ به پروندههای موجود در سورس یا دایرکتوری /usr/share/doc/pdnsd مراجعه کنید.
این صفحه راهنما بهطور خودکار از مستندات html مربوط به pdnsd با استفاده از یک اسکریپت سفارشی Perl نوشتهشده توسط Paul A. Rombouts ایجاد شده است.
آخرین بازنگری: ۱۹ آوریل ۲۰۱۲ توسط Paul A. Rombouts
| Apr 2012 | pdnsd 1.2.9b-par |