انتقل إلى المحتوى الرئيسي

الفصل 7.3 - DNS وحل الأسماء

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • فهم نظام DNS
  • تكوين خوادم DNS
  • استخدام /etc/hosts
  • تكوين /etc/resolv.conf
  • اختبار حل DNS
  • استخدام أدوات DNS (dig, nslookup, host)

ما هو DNS؟​

DNS (نظام أسماء النطاقات) يترجم أسماء النطاقات إلى عناوين IP.

الوظيفة:

  • حل الأسماء → IPs
  • حل IPs → الأسماء (DNS العكسي)
  • التخزين المؤقت للأداء

/etc/hosts​

التنسيق​

# /etc/hosts
127.0.0.1 localhost
127.0.1.1 hostname.localdomain hostname
192.168.1.100 server.local
10.0.0.50 database.internal

التنسيق:

IP_ADDRESS    HOSTNAME [ALIASES...]

الاستخدام​

# إضافة إدخال
echo "192.168.1.100 mon-serveur.local" | sudo tee -a /etc/hosts

# التحقق
cat /etc/hosts

الأولوية:

  • يتم التحقق من /etc/hosts قبل DNS
  • مفيد لتجاوز المحلي
  • الاختبارات والتطوير

/etc/resolv.conf​

التكوين​

# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
search example.com localdomain
options timeout:2 attempts:3

التوجيهات:

  • nameserver: خوادم DNS (حتى 3)
  • search: نطاقات البحث
  • options: المهلة، المحاولات، إلخ.

خوادم DNS شائعة​

# Google DNS
nameserver 8.8.8.8
nameserver 8.8.4.4

# Cloudflare DNS
nameserver 1.1.1.1
nameserver 1.0.0.1

# OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220

ملاحظة: في الأنظمة الحديثة، يمكن إدارة /etc/resolv.conf بواسطة NetworkManager أو systemd-resolved.


systemd-resolved​

التكوين​

# /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 1.1.1.1
FallbackDNS=8.8.4.4 1.0.0.1
Domains=example.com

إعادة التشغيل:

sudo systemctl restart systemd-resolved

التحقق​

# الحالة
systemd-resolve --status

# الحل
systemd-resolve google.com

أدوات DNS​

dig - بحث DNS​

# حل بسيط
dig google.com

# خادم DNS محدد
dig @8.8.8.8 google.com

# نوع السجل
dig google.com A # سجل A
dig google.com MX # سجل MX
dig google.com NS # سجل NS
dig google.com TXT # سجل TXT

# DNS العكسي
dig -x 8.8.8.8

# تنسيق قصير
dig +short google.com

nslookup​

# الحل
nslookup google.com

# خادم محدد
nslookup google.com 8.8.8.8

# وضع تفاعلي
nslookup
> google.com
> server 8.8.8.8
> exit

host​

# حل بسيط
host google.com

# IP فقط
host -t A google.com

# DNS العكسي
host 8.8.8.8

# خادم محدد
host google.com 8.8.8.8

getent​

# الحل عبر النظام
getent hosts google.com

# يستخدم /etc/hosts وDNS

اختبار الحل​

التحقق من التكوين​

# عرض خوادم DNS المكونة
cat /etc/resolv.conf
systemd-resolve --status

# اختبار الحل
ping -c 2 google.com
host google.com
dig google.com

التحقق من التخزين المؤقت​

# تفريغ التخزين المؤقت systemd-resolved
sudo systemd-resolve --flush-caches

# التحقق من التخزين المؤقت
systemd-resolve --statistics

التكوين الدائم​

Ubuntu/Debian (Netplan)​

# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search:
- example.com

Red Hat/CentOS​

# /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=example.com

استكشاف أخطاء DNS وإصلاحها​

المشاكل الشائعة​

# 1. التحقق من الحل
host google.com
dig google.com

# 2. التحقق من خوادم DNS
cat /etc/resolv.conf

# 3. اختبار خادم DNS مباشرة
dig @8.8.8.8 google.com

# 4. التحقق من الاتصال
ping -c 2 8.8.8.8

# 5. التحقق من /etc/hosts
cat /etc/hosts

# 6. تفريغ التخزين المؤقت
sudo systemd-resolve --flush-caches

سكربت التشخيص​

#!/bin/bash
# تشخيص DNS

echo "=== تكوين DNS ==="
cat /etc/resolv.conf

echo "=== اختبار الحل ==="
host google.com
dig +short google.com

echo "=== اختبار خادم DNS ==="
dig @8.8.8.8 google.com +short

echo "=== التخزين المؤقت ==="
systemd-resolve --statistics 2>/dev/null || echo "systemd-resolved غير نشط"

أمثلة عملية​

تكوين DNS مخصص​

#!/bin/bash
# تكوين DNS

# النسخ الاحتياطي
sudo cp /etc/resolv.conf /etc/resolv.conf.bak

# تكوين جديد
cat <<EOF | sudo tee /etc/resolv.conf
nameserver 8.8.8.8
nameserver 1.1.1.1
search localdomain
EOF

# التحقق
cat /etc/resolv.conf

تجاوز محلي​

#!/bin/bash
# إضافة إدخال /etc/hosts

HOST="dev-server.local"
IP="192.168.1.50"

# التحقق إذا كان موجودًا
if ! grep -q "$HOST" /etc/hosts; then
echo "$IP $HOST" | sudo tee -a /etc/hosts
echo "تمت الإضافة: $HOST -> $IP"
else
echo "$HOST موجود بالفعل"
fi

ملخص​

في هذا الفصل، تعلمت:

DNS: حل الأسماء → IPs
/etc/hosts: الحل المحلي، الأولوية على DNS
/etc/resolv.conf: تكوين خوادم DNS
systemd-resolved: خدمة DNS حديثة
الأدوات: dig, nslookup, host للاختبارات
التكوين: Netplan، ملفات ifcfg-*
استكشاف الأخطاء: اختبارات الحل، التخزين المؤقت


الخطوات التالية​

الفصل 7.4: أدوات الشبكة
الوحدة 8: الخدمات والخوادم


تم إنشاء الفصل في: ديسمبر 2024