سیستم نام دامنه (DNS) وظیفه ترجمه نامهای قابلخواندن برای انسان (مانند example.com) به آدرسهای IP قابلاستفاده برای ماشینها را بر عهده دارد. عیبیابی DNS یکی از رایجترین کارهای مدیران سیستم و شبکه است. در این درس، دو ابزار کلیدی dig و nslookup را برای بررسی، تحلیل و عیبیابی DNS بررسی میکنیم.
dig — ابزار جامع و استاندارد DNS
dig (مخفف Domain Information Groper) یک ابزار خطفرمان انعطافپذیر و قدرتمند برای پرسوجو از سرورهای DNS است که به دلیل وضوح خروجی و امکانات کامل، ابزار اصلی عیبیابی DNS در لینوکس محسوب میشود .
ساختار کلی:
dig [@server] [name] [type] [options]
-
@server: آدرس سرور DNS مورد نظر برای ارسال پرسوجو (اگر مشخص نشود، از سرورهای تعریفشده در/etc/resolv.confاستفاده میکند) . -
name: نام دامنه مورد نظر برای جستجو. -
type: نوع رکورد DNS (پیشفرضAبرای IPv4 است) .
کاربردهای اصلی و مثالها
مشاهدهی رکورد A (آدرس IPv4):
dig example.com
خروجی شامل بخشهای مختلفی مانند QUESTION SECTION (نوع پرسوجو) و ANSWER SECTION (پاسخ دریافتی) است .
دریافت خروجی خلاصه (فقط پاسخ):
dig example.com +short
این گزینه برای استفاده در اسکریپتها و مشاهده سریع نتیجه بسیار مفید است .
پرسوجوی رکوردهای خاص:
dig example.com MX # رکوردهای Mail Exchange dig example.com NS # رکوردهای Name Server dig example.com TXT # رکوردهای متنی (مانند SPF) dig example.com AAAA # رکورد IPv6
استفاده از یک سرور DNS خاص (برای عیبیابی و دورزدن کش محلی):
dig @8.8.8.8 example.com
در این مثال، پرسوجو مستقیماً به سرور عمومی گوگل ارسال میشود . این تکنیک برای تشخیص این که آیا مشکل از سرور DNS محلی است یا خیر، بسیار کارآمد است.
Reverse Lookup (یافتن نام دامنه از روی IP):
dig -x 8.8.8.8
این دستور یک پرسوجوی معکوس (PTR Record) انجام میدهد .
ردیابی مسیر کامل پرسوجو (+trace):
dig example.com +trace
این گزینه مسیر پرسوجو را از سرورهای ریشه (Root) تا سرورهای معتبر (Authoritative) نشان میدهد و برای تشخیص مشکلات مربوط به انتشار (Propagation) یا زنجیرهٔ اعتماد DNS بسیار مفید است .
نمایش فقط بخش پاسخ (+noall +answer):
dig example.com +noall +answer
این ترکیب، خروجی را به بخش پاسخ نهایی محدود میکند و برای عیبیابی سریع و اسکریپتنویسی ایدهآل است .
درخواست تمام رکوردها:
dig example.com ANY
توجه: استفاده از
ANYدر بسیاری از سرورهای مدرن به دلیل مصرف بالا و حملات DDoS محدود یا غیرفعال شده است.
nslookup — ابزار دوحالته و سنتی
nslookup (مخفف Name Server Lookup) یک ابزار قدیمیتر است که همچنان روی اکثر سیستمها موجود است. nslookup در دو حالت اجرا میشود: غیرتعاملی و تعاملی .
حالت غیرتعاملی (غالباً استفاده میشود)
ساختار کلی:
nslookup [options] [host] [server]
مثالها:
nslookup example.com nslookup example.com 8.8.8.8 # استفاده از سرور خاص nslookup -type=MX example.com # جستجوی رکورد MX nslookup -type=NS example.com # جستجوی رکورد NS nslookup 8.8.8.8 # Reverse Lookup
حالت تعاملی
با وارد کردن nslookup بدون آرگومان، وارد حالت تعاملی میشوید. در این حالت میتوانید تنظیمات را تغییر دهید و چندین پرسوجو پشت سر هم انجام دهید .
$ nslookup > server 8.8.8.8 # تغییر سرور پیشفرض > set type=MX # تغییر نوع پرسوجو به MX > example.com > exit # خروج از حالت تعاملی
دستورات تعاملی مهم
| دستور | عملکرد |
|---|---|
server <domain> | تغییر سرور DNS پیشفرض با استفاده از سرور فعلی برای رزولوشن |
lserver <domain> | تغییر سرور DNS پیشفرض با استفاده از سرور اولیه |
set type=<type> | تنظیم نوع رکورد (مانند A, MX, NS, ANY) |
set debug / set nodebug | فعال/غیرفعال کردن حالت دیباگ برای مشاهده بستههای کامل پاسخ |
set all | نمایش تمام تنظیمات جاری |
exit | خروج از برنامه |
نکته: مستندات BIND امروزه استفاده از
digرا به دلیل رفتار منسجمتر و خروجی دقیقتر، بهجایnslookupتوصیه میکند. اماnslookupبه دلیل سادگی و در دسترس بودن، همچنان کاربرد فراوانی دارد .
عیبیابی پیشرفته DNS
بررسی سرورهای DNS پیکربندیشده
پیکربندی DNS سیستم معمولاً در فایل /etc/resolv.conf یا توسط systemd-resolved و NetworkManager مدیریت میشود .
cat /etc/resolv.conf
خروجی نمونه:
nameserver 192.168.1.1 nameserver 8.8.8.8
برای مشاهده تنظیمات NetworkManager:
nmcli dev show | grep DNS
عیبیابی گامبهگام
۱. بررسی اتصال اولیه:
قبل از هر چیز، مطمئن شوید که اتصال شبکه برقرار است (ping 8.8.8.8).
۲. تست با سرورهای عمومی:
اگر رزولوشن دامنه با سرور پیشفرض سیستم کار نمیکند، آن را با یک سرور عمومی تست کنید:
dig @1.1.1.1 example.com
اگر این درخواست موفق بود، مشکل از سرور DNS پیکربندیشده یا فیلترهای شبکه است .
۳. بررسی تأخیر و زمانبندی:
اگر پاسخدهی کند است، میتوانید زمان پاسخدهی را با گزینه stats+ در dig بررسی کنید یا timeout را در nslookup تنظیم کنید.
dig example.com +stats
در nslookup میتوان مقدار timeout را تغییر داد :
nslookup -timeout=5 example.com
۴. تحلیل خطاها:
-
SERVFAIL: معمولاً به معنای مشکل در سرور معتبر (Authoritative) یا پیکربندی نادرست منطقه است. -
NXDOMAIN: دامنه یا رکورد مورد نظر وجود ندارد. -
Timeout: سرور DNS پاسخ نمیدهد (مشکل شبکه یا فایروال).
۵. ردیابی کامل مسیر با +trace:
برای دیدن دقیقاً کدام بخش از زنجیره DNS با مشکل مواجه است :
dig example.com +trace
۶. بررسی کش DNS محلی:
برخی سرویسها مانند systemd-resolved کش محلی دارند. برای پاک کردن کش (در صورت نیاز):
sudo systemd-resolve --flush-caches
توجه: این دستور ممکن است در توزیعهای مختلف متفاوت باشد.
مقایسه dig و nslookup
| ویژگی | dig | nslookup |
|---|---|---|
| وضعیت | ابزار مدرن و استاندارد | ابزار سنتی (اما همچنان پرکاربرد) |
| خروجی | بسیار دقیق، ساختاریافته و قابل اسکریپتنویسی | سادهتر و قابلخواندنتر برای انسان |
| امکانات | بسیار زیاد (+trace, +short, +noall) | محدودتر |
| موارد استفاده | عیبیابی حرفهای، اسکریپتنویسی، تحلیل عمیق | بررسی سریع، محیطهای تعاملی |
نتیجهگیری نهایی: برای عیبیابی حرفهای و دقیق DNS،
digابزار انتخابی است.nslookupبرای بررسیهای سریع و ساده و همچنین در محیطهایی کهdigنصب نیست، گزینه مناسبی بهشمار میرود . تسلط بر هر دو ابزار، توانایی شما را در مدیریت و عیبیابی شبکه بهشدت افزایش میدهد.