اگر کلاینتهای شبکه به IP دسترسی دارند اما نام دامنه یا نام سرورها Resolve نمیشود، با تغییر تصادفی DNS یا Restart کردن سرویسها شروع نکنید. در Windows Server بهتر است مسیر عیبیابی را از تنظیم IP و خود سرویس DNS آغاز کنید، سپس authoritative zone، رکوردها، recursion و Forwarder را جداگانه تست کنید. این راهنما یک مسیر عملی برای پیدا کردن محل خرابی و رفع آن ارائه میدهد.
خلاصه مسیر عیبیابی DNS در Windows Server
- روی DNS Server با
ipconfig /allآدرس IP، Gateway و DNSهای تنظیمشده را بررسی کنید. - از فعال بودن سرویس DNS مطمئن شوید.
- با
nslookupمستقیماً همان DNS Server را Query کنید. - مشخص کنید نام موردنظر داخل Zone محلی است یا باید از طریق Recursion/Forwarder Resolve شود.
- Zone، رکوردهای A/AAAA/CNAME و Forwarderها را بررسی کنید.
- Cache را فقط بعد از ثبت وضعیت فعلی پاک کنید و دوباره تست بگیرید.
- در پایان از خود Server و یک Client واقعی Verify کنید.
سناریوی واقعی: اینترنت با IP باز میشود ولی نام دامنه Resolve نمیشود
فرض کنید یک Windows Server با IP فرضی 10.0.0.10 نقش DNS دارد. کلاینتها میتوانند 1.1.1.1 را Ping کنند، اما example.com یا یک نام داخلی مانند app1.corp.local Resolve نمیشود. این سناریو معمولاً به یکی از این دستهها برمیگردد: پیکربندی IP اشتباه، توقف سرویس DNS، رکورد یا Zone اشتباه، مشکل Recursion/Forwarder، Cache قدیمی یا تنظیم DNS اشتباه روی Client.
برای درک تفاوت Cache و پاسخگویی DNS، مقاله DNS Caching چیست؟ نیز مرتبط است.
پیشنیازها و نکات احتیاطی
- دسترسی Administrator به Windows Server.
- دانستن IP واقعی DNS Server و نام Zone داخلی.
- ثبت تنظیمات فعلی Forwarder و Zone قبل از هر تغییر.
- اگر سرور Domain Controller است، DNS را بدون شناخت ساختار Active Directory حذف یا Reinstall نکنید.
- در محیط Production، قبل از حذف رکورد، Zone یا تغییر Forwarder از تنظیمات فعلی خروجی بگیرید.
مرحله 1: تنظیم IP سرور DNS را بررسی کنید
مستندات Microsoft اولین مرحله را بررسی IP configuration میداند. در Command Prompt با دسترسی Administrator اجرا کنید:
ipconfig /allآدرس IP، Subnet Mask، Default Gateway و DNS Servers را بررسی کنید. یک DNS Server سازمانی معمولاً باید IP ثابت داشته باشد. اگر سرور به خودش یا DNS داخلی دیگری وابسته است، تغییر بیدلیل DNS کارت شبکه به Resolver عمومی میتواند نامهای داخلی Active Directory را خراب کند.
برای دیدن تنظیم DNS با PowerShell:
Get-DnsClientServerAddress -AddressFamily IPv4خروجی را با NIC فعال و طراحی واقعی شبکه تطبیق دهید.
مرحله 2: وضعیت سرویس DNS را بررسی کنید
در PowerShell:
Get-Service DNSخروجی سالم باید وضعیت Running را نشان دهد. اگر سرویس متوقف است، قبل از Start کردن علت را در Event Viewer بررسی کنید. سپس در صورت مناسب بودن:
Start-Service DNSبرای Verify:
Get-Service DNS | Select-Object Status,Name,DisplayNameاگر با PowerShell کمتر آشنا هستید، مقاله بررسی PowerShell و کاربردهای آن برای دستورات مدیریتی ویندوز مفید است.
مرحله 3: DNS Server را مستقیم Query کنید
Microsoft برای جدا کردن مشکل Client از Server پیشنهاد میکند Query را مستقیماً به DNS Server بفرستید. با IP فرضی 10.0.0.10:
nslookup app1.corp.local 10.0.0.10برای نام عمومی:
nslookup example.com 10.0.0.10اگر نام داخلی جواب میدهد اما نام عمومی Timeout میشود، تمرکز را روی Recursion، Forwarder و دسترسی خروجی DNS بگذارید. اگر هیچکدام جواب نمیدهند، سرویس، Firewall، Bind شدن DNS به Interface یا پیکربندی Zone را بررسی کنید.
با PowerShell نیز میتوانید Query بزنید:
Resolve-DnsName app1.corp.local -Server 10.0.0.10خروجی موفق باید رکورد و IP مورد انتظار را نشان دهد.
مرحله 4: تشخیص دهید مشکل Authoritative است یا Recursion
این تفکیک بسیار مهم است. اگر DNS Server برای Zone موردنظر Authoritative است، مثلاً corp.local، باید Zone و رکورد همان Zone را بررسی کنید. اگر نام بیرونی مثل example.com است، Server باید از Recursion، Root Hints یا Forwarder استفاده کند.
Zoneهای موجود:
Get-DnsServerZoneیک Zone مشخص:
Get-DnsServerZone -Name "corp.local"رکوردهای Zone:
Get-DnsServerResourceRecord -ZoneName "corp.local"برای یک رکورد مشخص:
Get-DnsServerResourceRecord -ZoneName "corp.local" -Name "app1"IP نمایشدادهشده باید با سرویس واقعی مطابقت داشته باشد.
مرحله 5: Forwarderهای DNS را بررسی کنید
Forwarderهای فعلی:
Get-DnsServerForwarderاگر Forwarder تعریف شده ولی پاسخ نمیدهد، ابتدا دسترسی شبکه به آن را بررسی کنید. توجه کنید DNS معمولاً از UDP/53 استفاده میکند و در برخی پاسخها یا شرایط از TCP/53 هم استفاده میشود؛ بنابراین تست فقط TCP بهتنهایی اثبات نمیکند UDP DNS سالم است.
برای تست واقعی DNS بهترین Verify همان Query مستقیم است:
Resolve-DnsName example.com -Server <FORWARDER_IP>سپس همان نام را از DNS Server داخلی Query کنید:
Resolve-DnsName example.com -Server 10.0.0.10اگر Query مستقیم Forwarder موفق است ولی Query از DNS داخلی شکست میخورد، تنظیم Recursion/Forwarder یا Policyهای خود DNS Server را بررسی کنید.
مرحله 6: Cache سرور را با احتیاط پاک کنید
قبل از پاک کردن Cache، اگر مشکل تکرارشونده است زمان و نام رکورد خراب را یادداشت کنید. سپس طبق مستندات Microsoft میتوانید در Command Prompt مدیریتی اجرا کنید:
dnscmd /clearcacheیا در PowerShell:
Clear-DnsServerCache -Forceبعد دوباره Query را اجرا کنید:
Resolve-DnsName example.com -Server 10.0.0.10پاک کردن Cache درمان ریشهای Forwarder خراب یا رکورد اشتباه نیست؛ فقط پاسخهای Cacheشده را حذف میکند.
مرحله 7: Client را جداگانه بررسی کنید
روی Client:
ipconfig /allمطمئن شوید DNS Server همان IP داخلی موردنظر است. سپس Cache کلاینت را پاک کنید:
ipconfig /flushdnsو تست بگیرید:
nslookup app1.corp.localnslookup example.comاگر Query با تعیین دستی Server موفق است ولی Query عادی شکست میخورد، معمولاً DNS تنظیمشده روی NIC، DHCP یا VPN Client متفاوت است.
مرحله 8: لاگها را بررسی کنید
برای مشاهده Eventهای اخیر DNS Server با PowerShell میتوانید از لاگ مربوطه استفاده کنید:
Get-WinEvent -LogName "DNS Server" -MaxEvents 50اگر نام Log در نسخه یا Role شما متفاوت است، ابتدا Event Viewer را بررسی کنید و از حدس زدن نام Log خودداری کنید. به خطاهای startup، zone loading، transfer، recursion و network binding توجه کنید.
خطاهای رایج و معنی آنها
nslookup با IP خود DNS Server جواب میدهد، ولی روی Client نه
مشکل به احتمال زیاد سمت Client، DHCP، Firewall بین Client و Server یا DNS تنظیمشده روی NIC است.
نام داخلی Resolve میشود ولی دامنههای اینترنتی نه
Zone محلی سالم است؛ Forwarder، Recursion، Root Hints یا دسترسی خروجی DNS را بررسی کنید.
نام عمومی Resolve میشود ولی رکورد داخلی نه
Zone authoritative، نام رکورد، نوع رکورد و IP آن را بررسی کنید. همچنین مطمئن شوید Client به DNS داخلی Query میزند نه Resolver عمومی.
بعد از تغییر IP سرور، بعضی کلاینتها هنوز IP قدیمی میگیرند
TTL و Cache را بررسی کنید. اگر رکورد authoritative هنوز IP قدیمی دارد، اول رکورد را اصلاح کنید؛ صرفاً Flush کردن Client مشکل رکورد اشتباه را حل نمیکند.
تست نهایی و Verify
پس از اصلاح، این چهار تست را انجام دهید:
- از خود DNS Server یک نام داخلی را مستقیم Query کنید.
- از خود DNS Server یک نام عمومی را Query کنید.
- همان دو تست را از یک Client واقعی انجام دهید.
- IP برگشتی را با سرویس واقعی و رکورد مورد انتظار مقایسه کنید.
نمونه:
Resolve-DnsName app1.corp.local -Server 10.0.0.10
Resolve-DnsName example.com -Server 10.0.0.10اگر هر دو پاسخ درست دارند، مسیر Server تا Zone و Recursion سالم است. سپس Query عادی Client بدون پارامتر -Server را تست کنید تا مطمئن شوید DHCP/NIC نیز DNS درست را توزیع میکند.
Rollback و Recovery
قبل از تغییر Forwarderها، Zone یا رکوردهای حساس، تنظیم فعلی را ثبت کنید. برای نمونه:
Get-DnsServerForwarder | Format-List *
Get-DnsServerZone | Select-Object ZoneName,ZoneType,IsDsIntegratedاگر پس از تغییر Forwarder مشکل بیشتر شد، مقدارهای قبلی را برگردانید و دوباره Query مستقیم بگیرید. Zone یا رکورد را صرفاً برای تست حذف نکنید؛ در Active Directory-integrated DNS حذف اشتباه میتواند روی چند DNS Server Replicate شود.
نکات امنیتی
- DNS Server سازمانی را بدون نیاز برای Recursion عمومی روی اینترنت باز نگذارید.
- پورت 53 را فقط برای شبکهها و مسیرهایی باز کنید که واقعاً نیاز دارند.
- برای نامهای Active Directory از Resolver عمومی بهعنوان جایگزین DNS داخلی استفاده نکنید.
- تغییرات Zone و Forwarder را مستندسازی کنید تا Rollback ممکن باشد.
- اگر DNS روی VPS ویندوزی ارائه میشود، Firewall و دسترسی شبکه را همراه با خود Role بررسی کنید.
برای سناریوهایی که به سرور با دسترسی مدیریتی کامل نیاز دارند، سرور مجازی وانسرور مرتبط است.
جمعبندی
رفع مشکل DNS در Windows Server زمانی سریعتر و امنتر است که مشکل را لایهبهلایه جدا کنید: IP configuration، سرویس DNS، Query مستقیم، Zone و رکورد authoritative، سپس Recursion و Forwarder، و در پایان Client. ipconfig /all، nslookup، Resolve-DnsName، Get-DnsServerZone و Get-DnsServerForwarder ابزارهای اصلی این مسیر هستند. بعد از هر تغییر، از Server و Client واقعی Verify بگیرید و تنظیم قبلی را برای Rollback نگه دارید.