resolv.conf(5) File Formats Manual resolv.conf(5)

resolv.conf - فایل پیکربندی تفکیککننده نام دامنه (Resolver)

/etc/resolv.conf

تفکیک‌کننده نام (resolver) مجموعه‌ای از توابع در کتابخانه C است که دسترسی به سامانه نام دامنه اینترنت (DNS) را فراهم می‌کند. فایل پیکربندی تفکیک‌کننده شامل اطلاعاتی است که در نخستین باری که این توابع توسط یک فرایند فراخوانی می‌شوند، توسط آن‌ها خوانده می‌شود. این فایل به گونه‌ای طراحی شده است که برای انسان خوانا باشد و شامل فهرستی از کلیدواژه‌ها به همراه مقادیری است که انواع مختلفی از اطلاعات تفکیک‌کننده را ارائه می‌دهند. این فایل پیکربندی به عنوان یک منبع مورد اعتماد برای اطلاعات DNS در نظر گرفته می‌شود؛ برای جزئیات بیشتر به گزینه trust-ad در زیر مراجعه کنید.

اگر این فایل وجود نداشته باشد، تنها از کارگزار نام موجود روی ماشین محلی پرس‌وجو خواهد شد، و فهرست جستجو تنها شامل نام دامنه محلی خواهد بود که بر اساس نام میزبان (hostname) تعیین می‌شود.

گزینه‌های مختلف پیکربندی عبارتند از:

نشانی اینترنتی کارگزار نامی که تفکیک‌کننده باید از آن پرس‌وجو کند؛ خواه یک نشانی IPv4 (با نشانه‌گذاری نقطه) یا یک نشانی IPv6 با نشانه‌گذاری دونقطه (و احتمالاً نقطه) مطابق با RFC 2373. حداکثر تا MAXNS (در حال حاضر ۳ کارگزار، به <resolv.h> مراجعه کنید) کارگزار نام را می‌توان فهرست کرد، هر کدام با یک کلیدواژه در یک خط جداگانه. اگر چندین کارگزار وجود داشته باشد، کتابخانه تفکیک‌کننده به ترتیبی که فهرست شده‌اند از آن‌ها پرس‌وجو می‌کند. اگر هیچ مدخل nameserver وجود نداشته باشد، حالت پیش‌فرض استفاده از کارگزار نام روی ماشین محلی است. (الگوریتم مورد استفاده بدین صورت است که ابتدا یک کارگزار نام را امتحان می‌کند و اگر مهلت پرس‌وجو به پایان رسید، کارگزار بعدی را امتحان می‌کند تا زمانی که کارگزارها تمام شوند، سپس امتحان کردن تمامی کارگزارهای نام را تا رسیدن به حداکثر تعداد تلاش‌های مجدد تکرار می‌کند.)
به صورت پیش‌فرض، فهرست جستجو شامل یک مدخل است: نام دامنه محلی. این نام از نام میزبان محلی که توسط gethostname(2) برگردانده می‌شود، تعیین می‌گردد؛ نام دامنه محلی برابر با همه چیز پس از نخستین '.' در نظر گرفته می‌شود. در نهایت، اگر نام میزبان شامل هیچ '.' نباشد، دامنه ریشه (root domain) به عنوان نام دامنه محلی فرض می‌شود.
این رفتار را می‌توان با درج مسیر جستجوی دامنه مورد نظر پس از کلیدواژه search و جدا کردن نام‌ها با فاصله یا کلید تب (tab) تغییر داد. پرس‌وجوهای تفکیک‌کننده‌ای که تعداد نقطه‌های آن‌ها کمتر از ndots باشد (پیش‌فرض ۱ است)، با استفاده از هر جزء از مسیر جستجو به نوبت امتحان خواهند شد تا زمانی که یک تطابق پیدا شود. برای محیط‌هایی با چندین زیردامنه، لطفاً بخش options ndots:n در زیر را مطالعه کنید تا از حملات مرد میانی (man-in-the-middle) و ترافیک غیرضروری به سمت کارگزارهای ریشه DNS جلوگیری شود. توجه داشته باشید که اگر کارگزارهای دامنه‌های فهرست‌شده محلی نباشند، این فرایند ممکن است کند باشد و ترافیک شبکه زیادی تولید کند، و در صورتی که کارگزاری برای یکی از دامنه‌ها در دسترس نباشد، پرس‌وجوها با اتمام مهلت زمانی (timeout) مواجه خواهند شد.
اگر چندین دستور search وجود داشته باشد، تنها فهرست جستجوی مربوط به آخرین مورد استفاده خواهد شد.
در glibc 2.25 و نسخه‌های پیشین، فهرست جستجو به شش دامنه با مجموع ۲۵۶ کاراکتر محدود بود. از نسخه glibc 2.26، فهرست جستجو نامحدود است.
دستور domain یک نام منسوخ‌شده برای دستور search است که تنها از یک مدخل در فهرست جستجو پشتیبانی می‌کند.
این گزینه امکان مرتب‌سازی نشانی‌های بازگردانده‌شده توسط gethostbyname(3) را فراهم می‌کند. یک فهرست مرتب‌سازی (sortlist) با جفت‌های نشانی IP و ماسک شبکه (netmask) مشخص می‌شود. ماسک شبکه اختیاری است و به طور پیش‌فرض روی ماسک شبکه طبیعی شبکه تنظیم می‌شود. نشانی IP و جفت‌های شبکه اختیاری با خط مایل (اسلش) از هم جدا می‌شوند. حداکثر ۱۰ جفت را می‌توان مشخص کرد. در اینجا یک مثال آمده است:

sortlist 130.155.160.0/255.255.240.0 130.155.0.0
گزینه‌ها اجازه می‌دهند برخی از متغیرهای داخلی تفکیک‌کننده اصلاح شوند. نحو آن به صورت زیر است:
options option ...

که در آن option یکی از موارد زیر است:

فلگ RES_DEBUG را در _res.options تنظیم می‌کند (تنها در صورتی مؤثر است که glibc با پشتیبانی از اشکال‌زدایی کامپایل شده باشد؛ به resolver(3) مراجعه کنید).
آستانه‌ای برای تعداد نقطه‌هایی تعیین می‌کند که باید در نام داده‌شده به res_query(3) (به resolver(3) مراجعه کنید) ظاهر شود قبل از اینکه یک پرس‌وجوی مطلق اولیه انجام گیرد. مقدار پیش‌فرض برای n برابر ۱ است، بدین معنا که اگر هر نقطه‌ای در نام وجود داشته باشد، آن نام ابتدا به عنوان یک نام مطلق امتحان می‌شود قبل از اینکه هر یک از عناصر فهرست جستجو به آن ضمیمه گردد. مقدار این گزینه به طور نامحسوس به ۱۵ محدود می‌شود.
مدت‌زمانی را تعیین می‌کند که تفکیک‌کننده پیش از تلاش مجدد برای ارسال پرس‌وجو از طریق یک کارگزار نام دیگر، منتظر پاسخ از یک کارگزار نام دوردست می‌ماند. این ممکن است زمان کل صرف‌شده توسط هر فراخوانی API تفکیک‌کننده نباشد و هیچ تضمینی وجود ندارد که یک فراخوانی منفرد API تفکیک‌کننده به یک مهلت زمانی منفرد مربوط باشد. این مقدار بر حسب ثانیه اندازه‌گیری می‌شود و مقدار پیش‌فرض آن RES_TIMEOUT است (در حال حاضر ۵ ثانیه، به <resolv.h> مراجعه کنید). مقدار این گزینه به طور نامحسوس به ۳۰ محدود می‌شود.
تعداد دفعاتی را تعیین می‌کند که تفکیک‌کننده پیش از تسلیم شدن و بازگرداندن یک خطا به برنامه فراخواننده، پرس‌وجو را به کارگزارهای نام خود ارسال می‌کند. مقدار پیش‌فرض RES_DFLRETRY است (در حال حاضر ۲ بار، به <resolv.h> مراجعه کنید). مقدار این گزینه به طور نامحسوس به ۵ محدود می‌شود.
فلگ RES_ROTATE را در _res.options تنظیم می‌کند، که باعث انتخاب چرخشی (round-robin) کارگزارهای نام از میان موارد فهرست‌شده می‌شود. این کار اثر توزیع بار پرس‌وجو میان تمام کارگزارهای فهرست‌شده را دارد، به جای اینکه همه کلاینت‌ها هر بار ابتدا اولین کارگزار فهرست‌شده را امتحان کنند.
فلگ RES_NOAAAA را در _res.options تنظیم می‌کند، که باعث متوقف کردن پرس‌وجوهای AAAA انجام‌شده توسط تفکیک‌کننده پایه (stub resolver) می‌شود، از جمله جستجوهای AAAA که توسط واسط‌های مبتنی بر NSS مانند getaddrinfo(3) آغاز می‌شوند. تنها جستجوهای DNS تحت تأثیر قرار می‌گیرند: داده‌های IPv6 در hosts(5) همچنان استفاده می‌شوند، getaddrinfo(3) با AI_PASSIVE همچنان نشانی‌های IPv6 تولید می‌کند، و کارگزارهای نام IPv6 پیکربندی‌شده همچنان استفاده می‌شوند. برای ایجاد نتایج صحیح خطای نام (NXDOMAIN)، پرس‌وجوهای AAAA به پرس‌وجوهای A ترجمه می‌شوند. این گزینه در وهله نخست برای اهداف عیب‌یابی در نظر گرفته شده است، تا احتمال اثر منفی پرس‌وجوهای DNS مربوط به AAAA رد شود. این گزینه با استفاده از EDNS0 و اعتبارسنجی DNSSEC توسط برنامه‌ها ناسازگار است.
فلگ RES_NOCHECKNAME را در _res.options تنظیم می‌کند، که بررسی مدرن BIND را روی نام‌های میزبان و نام‌های پستی دریافتی برای نویسه‌های نامعتبر مانند زیرخط (_)، نویسه‌های غیر اسکی (non-ASCII) یا نویسه‌های کنترلی غیرفعال می‌کند.
فلگ RES_USE_INET6 را در _res.options تنظیم می‌کند. این گزینه باعث می‌شود که در داخل تابع gethostbyname(3) پیش از پرس‌وجوی A یک پرس‌وجوی AAAA امتحان شود، و اگر هیچ رکورد AAAA یافت نشد اما مجموعه‌ای از رکوردهای A موجود بود، پاسخ‌های IPv4 در «قالب تونل‌شده» IPv6 نگاشت شوند. از نسخه glibc 2.25، این گزینه منسوخ شده است؛ برنامه‌ها باید به جای gethostbyname(3) از getaddrinfo(3) استفاده نمایند.

برخی برنامه‌ها هنگامی که این گزینه فعال است رفتار غیرمنتظره‌ای نشان می‌دهند.

فلگ RES_USEBSTRING را در _res.options تنظیم می‌کند. این گزینه باعث می‌شود که جستجوهای معکوس IPv6 با استفاده از قالب برچسب بیتی (bit-label) توصیف‌شده در RFC 2673 انجام شوند؛ اگر این گزینه تنظیم نشود (که حالت پیش‌فرض است)، از قالب نیم‌بایت (nibble) استفاده می‌شود. این گزینه در glibc 2.25 حذف شد، زیرا بر افزونه‌ای از DNS متکی بود که با نسخه‌های قبلی سازگار نبود و هرگز در اینترنت به کار گرفته نشد.
فلگ RES_NOIP6DOTINT را در _res.options پاک/تنظیم می‌کند. هنگامی که این گزینه پاک (غیرفعال) باشد (ip6-dotint)، جستجوهای معکوس IPv6 در منطقه (منسوخ‌شده) ip6.int انجام می‌شوند؛ هنگامی که این گزینه تنظیم (فعال) باشد (no-ip6-dotint)، جستجوهای معکوس IPv6 به صورت پیش‌فرض در منطقه ip6.arpa انجام خواهند گرفت. این گزینه‌ها تا glibc 2.24 در دسترس هستند که در آن no-ip6-dotint حالت پیش‌فرض است. از آنجا که پشتیبانی از ip6-dotint مدت‌ها پیش در اینترنت متوقف شد، این گزینه‌ها در glibc 2.25 حذف شدند.
فلگ RES_USE_EDNS0 را در _res.options تنظیم می‌کند. این گزینه پشتیبانی از افزونه‌های DNS شرح داده‌شده در RFC 2671 را فعال می‌کند.
فلگ RES_SNGLKUP را در _res.options تنظیم می‌کند. به طور پیش‌فرض، glibc از نسخه glibc 2.9 جستجوهای IPv4 و IPv6 را به صورت همزمان (موازی) انجام می‌دهد. برخی از کارگزارهای DNS سخت‌افزاری/تجهیزاتی نمی‌توانند این پرس‌وجوها را به درستی پردازش کنند و باعث می‌شوند مهلت زمانی درخواست‌ها به پایان برسد. این گزینه این رفتار را غیرفعال می‌کند و باعث می‌شود glibc درخواست‌های IPv6 و IPv4 را به صورت متوالی انجام دهد (به بهای مقداری کند شدن فرایند تفکیک نام).
فلگ RES_SNGLKUPREOP را در _res.options تنظیم می‌کند. تفکیک‌کننده از یک سوکت مشترک برای درخواست‌های A و AAAA استفاده می‌کند. برخی سخت‌افزارها به اشتباه تنها یک پاسخ را بازمی‌گردانند. هنگامی که این وضعیت رخ می‌دهد، سامانه کلاینت منتظر پاسخ دوم مانده و معطل می‌شود. فعال کردن این گزینه این رفتار را تغییر می‌دهد به طوری که اگر دو درخواست از یک درگاه (port) یکسان به درستی مدیریت نشوند، سوکت بسته شده و قبل از ارسال درخواست دوم یک سوکت جدید باز می‌شود.
فلگ RES_NOTLDQUERY را در _res.options تنظیم می‌کند. این گزینه باعث می‌شود تابع res_nsearch() تلاش نکند یک نام نامشخص (بدون پسوند دامنه) را به گونه‌ای تفکیک کند که گویی یک دامنه سطح‌بالا (TLD) است. اگر یک سایت به جای قرار دادن localhost در یک یا چند عنصر از فهرست جستجو، دارای «localhost» به عنوان یک TLD باشد، این گزینه می‌تواند موجب بروز مشکل شود. این گزینه در صورتی که هیچ‌یک از مقادیر RES_DEFNAMES یا RES_DNSRCH تنظیم نشده باشند، هیچ اثری ندارد.
فلگ RES_USEVC را در _res.options تنظیم می‌کند. این گزینه استفاده از پروتکل TCP را برای تفکیک‌های DNS اجباری می‌کند.
فلگ RES_NORELOAD را در _res.options تنظیم می‌کند. این گزینه بارگذاری مجدد خودکار یک فایل پیکربندی تغییریافته را غیرفعال می‌کند.
فلگ RES_TRUSTAD را در _res.options تنظیم می‌کند. این گزینه رفتار بیت AD مربوط به تفکیک‌کننده پایه (stub resolver) را کنترل می‌کند. اگر یک تفکیک‌کننده اعتبارسنجی‌کننده بیت AD را در پاسخ تنظیم کند، نشان می‌دهد که داده‌های موجود در پاسخ بر اساس پروتکل DNSSEC راستی‌آزمایی شده‌اند. به منظور اعتماد به بیت AD، سامانه محلی باید هم به تفکیک‌کننده اعتبارسنج DNSSEC و هم به مسیر شبکه منتهی به آن اعتماد داشته باشد، به همین دلیل نیاز به انتخاب و فعال‌سازی صریح (opt-in) است. اگر گزینه trust-ad فعال باشد، تفکیک‌کننده پایه بیت AD را در پرس‌وجوهای خروجی DNS تنظیم می‌کند (جهت فعال‌سازی پشتیبانی از بیت AD)، و بیت AD را در پاسخ‌ها دست‌نخورده حفظ می‌نماید. بدون این گزینه، بیت AD در پرس‌وجوها تنظیم نمی‌شود، و همیشه پیش از بازگرداندن پاسخ‌ها به برنامه، از آن‌ها حذف می‌گردد. این بدان معناست که اگر گزینه trust-ad به درستی تنظیم شده باشد، برنامه‌ها می‌توانند به بیت AD در پاسخ‌ها اعتماد کنند.
در نسخه‌های glibc 2.30 و پیش از آن، بیت AD به صورت خودکار در پرس‌وجوها تنظیم نمی‌شد، و در پاسخ‌ها بدون تغییر به برنامه‌ها تحویل داده می‌شد.

کلیدواژه search در فایل resolv.conf سامانه می‌تواند به ازای هر فرایند به طور جداگانه با تنظیم متغیر محیطی LOCALDOMAIN روی فهرستی از دامنه‌های جستجو که با فاصله از هم جدا شده‌اند، بازنویسی شود.

کلیدواژه options در فایل resolv.conf سامانه می‌تواند به ازای هر فرایند به طور جداگانه با تنظیم متغیر محیطی RES_OPTIONS روی فهرستی از گزینه‌های تفکیک‌کننده که با فاصله از هم جدا شده‌اند (همان‌طور که در بالا ذیل options توضیح داده شد)، اصلاح گردد.

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

خطوطی که در ستون نخست آن‌ها یک نقطه‌ویرگول (;) یا نویسه هش (#) قرار دارد، به عنوان یادداشت (کامنت) در نظر گرفته می‌شوند.

/etc/resolv.conf, <resolv.h>

gethostbyname(3), resolver(3), host.conf(5), hosts(5), nsswitch.conf(5), hostname(7), named(8)

Name Server Operations Guide for BIND

2024-05-02 4th Berkeley Distribution