ما هو Cache DNS؟
التخزين المؤقت لـDNS هو حفظ مؤقت لنتائج استعلامات DNS لدى المحللات وأنظمة التشغيل والمتصفحات والتطبيقات. عند تنفيذ بحث DNS، تُحفظ النتيجة لمدة يحددها TTL للسجل (مدة البقاء)، فتجاب الطلبات اللاحقة للنطاق نفسه فوراً من دون سؤال الخوادم الموثوقة.
لماذا يهم التخزين المؤقت لـDNS؟
من دون التخزين المؤقت سيحتاج كل طلب ويب إلى بحث DNS كامل، مما يضيف زمناً ويولد حركة DNS كبيرة. ويوفر التخزين المؤقت:
- استجابة أسرع: تعود الإجابات المخزنة خلال ميكروثوان، مقابل ميلي ثوان للبحث الكامل.
- حركة شبكة أقل: استعلامات أقل إلى الخوادم الموثوقة.
- مرونة أفضل: يمكن للذاكرة المحلية تقديم إجابة إذا تعذر الوصول إلى خوادم DNS مؤقتاً.
- حملاً أقل على الخادم: تعالج الخوادم الموثوقة استعلامات أقل.
كيف يعمل تخزين DNS؟
هرم التخزين المؤقت
يحدث التخزين المؤقت لـDNS على مستويات متعددة:
Browser Cache (seconds to minutes)
↓
OS Cache (seconds to minutes)
↓
Local Resolver Cache (minutes to hours)
↓
ISP Resolver Cache (minutes to hours)
↓
Authoritative Name Server (source of truth)
عملية البحث في Cache
1. يطلب المستخدم example.com.
2. يفحص المتصفح ذاكرته.
3. عند الإخفاق يفحص النظام ذاكرته.
4. عند الإخفاق يفحص المحلل ذاكرته.
5. عند الإخفاق يرسل المحلل استعلاماً عودياً إلى الخوادم الموثوقة.
6. تخزن النتيجة في كل مستوى وفق TTL.
7. تعاد الاستجابة إلى المستخدم.
الانتهاء وفق TTL
يحتوي كل سجل DNS على قيمة TTL:
example.com. 300 IN A 203.0.113.50
^^^
TTL in seconds (5 minutes)
تحتفظ الذاكرات بالسجل 300 ثانية ثم تتخلص منه. ويؤدي الاستعلام التالي إلى بحث جديد.
طبقات Cache DNS
Cache المتصفح
تخزن المتصفحات الحديثة نتائج DNS بصورة مستقلة:
Chrome: يستخدم ذاكرة DNS خاصة به (chrome://net-internals/#dns) Firefox: يحتفظ بذاكرة داخلية (about:networking#dns) Safari: يستخدم محلل النظامTTL المعتاد لذاكرة المتصفح: 60 ثانية، بصرف النظر عن TTL في DNS.
Cache نظام التشغيل
تخزن أنظمة التشغيل النتائج عبر خدمة DNS المحلية:
Windows: تخزن خدمة DNS Client النتائج# View cache
ipconfig /displaydns
# Flush cache
ipconfig /flushdns
macOS: تتولى mDNSResponder التخزين
# Flush cache (macOS 10.15+)
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux: يختلف حسب النظام، وغالباً يستخدم systemd-resolved
# Flush systemd-resolved cache
sudo systemd-resolve --flush-caches
# Check statistics
sudo systemd-resolve --statistics
Cache المحلل
تحافظ المحللات العودية لـDNS (مثل DNS الخاص بمزود الإنترنت و8.8.8.8 و1.1.1.1) على ذاكرات كبيرة تخدم ملايين المستخدمين:
| المحلل | استراتيجية التخزين المؤقت |
|---|---|
| Google (8.8.8.8) | يحترم TTL، وذاكرة عالمية |
| Cloudflare (1.1.1.1) | يحترم TTL، وموزعة |
| محللات مزود الإنترنت | قد تتجاهل TTL المنخفض |
أمثلة على سلوك Cache
التشغيل العادي
Query 1: example.com
→ Full lookup: 50ms
→ Cached for 300s (TTL)
Query 2: example.com (1 minute later)
→ Cache hit: 1ms
Query 3: example.com (10 minutes later)
→ Cache expired, full lookup: 50ms
→ Re-cached for 300s
تحديث سجل DNS
Original: example.com → 203.0.113.50 (TTL: 300s)
Time: 10:00 - DNS updated to 203.0.113.51
Client queries at 10:02
→ Still cached: 203.0.113.50 (expires 10:05)
Client queries at 10:06
→ Cache expired, new lookup: 203.0.113.51
→ Cached until 10:11
استراتيجية TTL والتخزين المؤقت
اختيار قيم TTL
| حالة الاستخدام | TTL الموصى به | السبب |
|---|---|---|
| بنية تحتية ثابتة | 3600-86400s (1-24 ساعة) | نادراً ما تتغير، وتقليل حمل DNS |
| موقع إنتاج | 300-1800s (5-30 دقيقة) | موازنة الأداء والمرونة |
| نقل نشط | 60-300s (1-5 دقائق) | انتشار أسرع أثناء التغييرات |
| موازنة حمل | 60-120s | تجاوز سريع عند تغير الخوادم |
خفض TTL قبل النقل
أفضل ممارسة عند التخطيط لتغييرات DNS:
Day -7: example.com TTL 3600s (1 hour)
Day -2: Reduce to 300s (5 minutes)
Day 0: Make DNS change
→ Max 5 minute cache retention
Day +1: Restore TTL to 3600s
تسميم Cache DNS والأمان
هجوم تسميم Cache DNS
يحاول المهاجمون إدخال سجلات DNS زائفة إلى الذاكرات:
1. يغمر المهاجم المحلل باستجابات مزيفة.
2. إذا طابقت إحداها استعلاماً معلقاً، تُخزن.
3. يتلقى المستخدمون عنوان IP ضاراً لنطاق شرعي.
4. تقدم الإجابة المسممة إلى مستخدمين كثيرين.
وسائل التخفيف الأمنية
DNSSEC: تمنع السجلات الموقعة تشفيرياً التسميم:example.com. IN A 203.0.113.50
IN RRSIG A 8 2 300 ...
عشوائية منفذ المصدر: تجعل تزوير الاستجابات أصعب.
ترميز 0x20: تساعد عشوائية حالة الأحرف في الاستعلامات على التحقق.
أمان المحلل: استخدم محللات موثوقة مثل Cloudflare وGoogle وQuad9.
فحص Cache DNS
عرض محتويات Cache
Windows:ipconfig /displaydns | more
macOS (معلومات محدودة):
sudo killall -INFO mDNSResponder
# Check Console.app for logs
Linux (systemd-resolved):
sudo systemd-resolve --statistics
اختبار سلوك Cache
# First query (cache miss)
time dig example.com
# Immediate repeat (cache hit)
time dig example.com
# Compare times
مشكلات مرتبطة بالتخزين المؤقت
Cache قديم بعد تغيير DNS
المشكلة: لا تظهر سجلات DNS المحدثة للمستخدمين. الحل:1. انتظر انتهاء TTL.
2. خفض TTL قبل التغييرات المستقبلية.
3. اطلب من المستخدمين مسح الذاكرة المحلية.
تخزين مفرط العدوانية
تتجاهل بعض مزودات الإنترنت TTL وتخزن مدة أطول:
المشكلة: تستغرق التغييرات ساعات أو أياماً للانتشار. الحل:- استخدم TTL أقل، إذ تحترم مزودات الإنترنت عادةً حداً أدنى قدره 300 ثانية.
- فكر في DNS Anycast للخدمات المهمة.
- وثق مزودات الإنترنت المعروفة بالمشكلة.
التخزين السلبي
تخزن أيضاً عمليات البحث الفاشلة (NXDOMAIN):
Query: newsubdomain.example.com
Response: NXDOMAIN (does not exist)
Cached: 3600s (SOA minimum TTL)
Result: New subdomain won't resolve for 1 hour
الحل: خفض الحد الأدنى لـTTL في SOA قبل إضافة سجلات جديدة.
مسح Cache DNS
متى يجب المسح؟
- اختبار تغييرات DNS فوراً
- تشخيص مشكلات الحل
- بعد نقل مزود DNS
- الاشتباه في تسميم الذاكرة
كيف يتم المسح؟
Windows:ipconfig /flushdns
macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux (systemd-resolved):
sudo systemd-resolve --flush-caches
Chrome:
Navigate to: chrome://net-internals/#dns
Click: "Clear host cache"
Firefox:
Toggle network.dnsCacheExpiration in about:config
Or restart browser
أفضل الممارسات
1. اضبط TTL مناسباً: وازن بين الأداء وسرعة التغيير.
2. خفض TTL قبل التغييرات: خفضه قبل تحديثات DNS بـ24-48 ساعة.
3. راقب الانتشار: استخدم أدوات لفحص حل DNS عالمياً.
4. وثق سلوك الذاكرة: افهم طبقات التخزين في بنيتك.
5. استخدم DNSSEC: احم من تسميم الذاكرة.
6. اختبر جيداً: تحقق من عمل تغييرات DNS قبل إعلان نجاحها.
7. ثقف المستخدمين: قدم تعليمات واضحة لمسح الذاكرة عند الحاجة.
مفاهيم التخزين المتقدمة
الاستباقية في الجلب
قد تجلب المتصفحات والمحللات DNS مسبقاً للروابط الموجودة في الصفحة:
<!-- Hint to browser -->
<link rel="dns-prefetch" href="//cdn.example.com">
تدفئة Cache
قد تملأ موازنات الحمل وشبكات CDN الذاكرة مسبقاً للسجلات المهمة.
Anycast والتخزين المؤقت
يوجه DNS Anycast الاستعلامات إلى أقرب خادم، وينشئ ذاكرات موزعة جغرافياً لأفضل أداء.
التخزين المؤقت لـDNS أساس أداء الإنترنت. ويضمن فهم TTL وضبطه بصورة صحيحة انتشار تغييرات DNS بكفاءة مع الحفاظ على سرعة الحل.