انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تشخيص وحل مشاكل DNS

دليل شامل لتشخيص وحل مشاكل DNS باستخدام أوامر dig و nslookup، فحص انتشار DNS، مسح ذاكرة التخزين المؤقت وحلول أخطاء DNS الشائعة.

وقت القراءة: 14 دقيقة استكشاف الأخطاء وإصلاحها
dnsdignslookupانتشارذاكرة مؤقتةاستكشاف الأخطاء

جدول المحتويات

مقدمة

DNS (نظام أسماء النطاقات) هو أحد المكونات الأساسية للبنية التحتية للإنترنت. يقوم هذا النظام بتحويل أسماء النطاقات إلى عناوين IP، وعندما لا يعمل بشكل صحيح، يمكن أن تتعطل العديد من الخدمات مثل الوصول إلى المواقع وتسليم البريد الإلكتروني واتصالات الخادم.

في هذا الدليل، سنستعرض بالتفصيل الأدوات والطرق التي يمكنك استخدامها لتشخيص وحل مشاكل DNS.

أساسيات DNS

أنواع سجلات DNS

نوع السجلالوصفمثال
Aتعيين عنوان IPv4example.com → 1.2.3.4
AAAAتعيين عنوان IPv6example.com → 2001:db8::1
CNAMEاسم مستعار لنطاق آخرwww → example.com
MXتوجيه خادم البريدmail.example.com (أولوية: 10)
TXTسجل نصي (SPF, DKIM إلخ)v=spf1 ip4:1.2.3.4 -all
NSتعريف خادم الأسماءns1.example.com
PTRسجل DNS العكسي4.3.2.1 → example.com
SOAسجل سلطة المنطقةTTL, serial, refresh

عملية حل DNS

المستخدم → ذاكرة DNS المحلية → المحلل التكراري → NS الجذر → NS نطاق المستوى الأعلى → NS المعتمد → عنوان IP

تشخيص DNS باستخدام أمر dig

dig (Domain Information Groper) هو أقوى أداة لتشخيص مشاكل DNS.

الاستخدام الأساسي

hljs bash
# استعلام سجل A
dig example.com A

# استعلام من خادم DNS محدد
dig @8.8.8.8 example.com A

# إخراج مختصر
dig example.com +short

# استعلام جميع أنواع السجلات
dig example.com ANY

# استعلام سجل MX
dig example.com MX

# استعلام سجل NS
dig example.com NS

# استعلام سجل TXT
dig example.com TXT

استعلامات تفصيلية

hljs bash
# وضع التتبع — يعرض عملية الحل خطوة بخطوة
dig example.com +trace

# سجل SOA — معلومات المنطقة
dig example.com SOA

# استعلام DNS العكسي
dig -x 1.2.3.4

# استعلام عبر TCP (للردود الكبيرة)
dig example.com +tcp

# التحقق من DNSSEC
dig example.com +dnssec

قراءة مخرجات dig

hljs bash
$ dig example.com A

;; QUESTION SECTION:
;example.com.                   IN      A

;; ANSWER SECTION:
example.com.            300     IN      A       93.184.216.34

;; AUTHORITY SECTION:
example.com.            86400   IN      NS      ns1.example.com.

;; Query time: 23 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; MSG SIZE  rcvd: 56

الحقول الرئيسية:

  • ANSWER SECTION: إجابة الاستعلام
  • TTL (300): مدة بقاء السجل في الذاكرة المؤقتة (بالثواني)
  • Query time: وقت الاستجابة
  • SERVER: خادم DNS الذي قدم الإجابة

أمر nslookup

nslookup أداة أبسط لاستعلامات DNS:

hljs bash
# استعلام أساسي
nslookup example.com

# استعلام من خادم DNS محدد
nslookup example.com 8.8.8.8

# استعلام سجل MX
nslookup -type=MX example.com

# استعلام سجل NS
nslookup -type=NS example.com

# DNS العكسي
nslookup 1.2.3.4

فحص انتشار DNS

عند إجراء تغييرات DNS، يستغرق الأمر وقتًا لانتشار السجلات الجديدة إلى جميع خوادم DNS.

أوقات الانتشار

نوع السجلTTL النموذجيوقت الانتشار
A / AAAA300-3600 ثانية5 دقائق - ساعة
MX3600-86400 ثانية1 - 24 ساعة
NS86400 ثانية24 - 48 ساعة
TXT300-3600 ثانية5 دقائق - ساعة

الفحص من خوادم DNS مختلفة

hljs bash
# Google DNS
dig @8.8.8.8 example.com A +short

# Cloudflare DNS
dig @1.1.1.1 example.com A +short

# Quad9 DNS
dig @9.9.9.9 example.com A +short

أدوات فحص الانتشار عبر الإنترنت:

لتسريع انتشار DNS، قم بتخفيض قيمة TTL قبل إجراء التغييرات (مثلاً 300 ثانية). يمكنك زيادة TTL مرة أخرى بعد اكتمال التغيير.

مسح ذاكرة DNS المؤقتة

مسح ذاكرة نظام التشغيل

hljs bash
# Linux (systemd-resolved)
sudo systemd-resolve --flush-caches
sudo resolvectl flush-caches

# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# Windows
ipconfig /flushdns

مسح ذاكرة خادم DNS

hljs bash
# مسح ذاكرة BIND named
sudo rndc flush

# لمنطقة محددة
sudo rndc flushname example.com

# مسح ذاكرة Unbound
sudo unbound-control flush_zone example.com

ذاكرة DNS في المتصفح

لمسح ذاكرة DNS في Chrome:

chrome://net-internals/#dns → Clear host cache

مشاكل DNS الشائعة والحلول

1. NXDOMAIN (النطاق غير موجود)

hljs bash
$ dig nonexistent.example.com
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN

الأسباب:

  • اسم النطاق مكتوب بشكل خاطئ
  • سجل DNS لم يُنشأ بعد
  • انتهت صلاحية النطاق

الحل:

hljs bash
# تحقق من معلومات WHOIS للنطاق
whois example.com

# تحقق من خوادم الأسماء
dig example.com NS +short

# استعلم من NS المعتمد
dig @ns1.example.com example.com A

2. SERVFAIL

الأسباب:

  • خادم الأسماء غير قابل للوصول
  • خطأ في التحقق من DNSSEC
  • ملف المنطقة تالف

الحل:

hljs bash
# تحقق من إمكانية الوصول لخادم الأسماء
dig @ns1.example.com example.com A

# تحقق من حالة DNSSEC
dig example.com +dnssec

# جرب محلل مختلف
dig @1.1.1.1 example.com A

3. إرجاع عنوان IP خاطئ

الحل:

hljs bash
# امسح الذاكرة المؤقتة
sudo systemd-resolve --flush-caches

# استعلم مباشرة من NS المعتمد
dig @ns1.example.com example.com A +short

# تحقق من مسار الحل باستخدام trace
dig example.com +trace

4. حل DNS بطيء

الحل:

hljs bash
# قياس وقت استجابة DNS
dig example.com | grep "Query time"

# مقارنة خوادم DNS مختلفة
for dns in 8.8.8.8 1.1.1.1 9.9.9.9; do
  echo "$dns: $(dig @$dns example.com +short +stats | grep 'Query time')"
done

لإعدادات DNS الدائمة، استخدم تكوين systemd-resolved أو NetworkManager بدلاً من تحرير /etc/resolv.conf مباشرة.

سكريبت تشخيص DNS

hljs bash
#!/bin/bash
DOMAIN="example.com"

echo "=== تشخيص DNS: $DOMAIN ==="

echo -e "\n[1] خوادم الأسماء:"
dig $DOMAIN NS +short

echo -e "\n[2] سجل A:"
dig $DOMAIN A +short

echo -e "\n[3] سجل MX:"
dig $DOMAIN MX +short

echo -e "\n[4] سجلات TXT:"
dig $DOMAIN TXT +short

echo -e "\n[5] فحص الانتشار:"
for dns in 8.8.8.8 1.1.1.1 9.9.9.9; do
  result=$(dig @$dns $DOMAIN A +short)
  echo "  $dns$result"
done

echo -e "\n=== اكتمل الفحص ==="

الخلاصة

مشاكل DNS من أكثر المشاكل شيوعًا في إدارة الخوادم. باستخدام أدوات dig و nslookup بفعالية، يمكنك تشخيص المشاكل بسرعة وتتبع عمليات الانتشار وحل مشاكل الذاكرة المؤقتة. تذكر تخفيض قيم TTL قبل تغييرات DNS والتحقق من خوادم DNS مختلفة بعد التغييرات.