مقارنة سجلات DNS

بمساعدة الخادم جديد DNS والنطاقات

ضع اسم نطاق أو سجلات ملصوقة في كل جهة: تُستعلم الأسماء عبر محلّل Cloudflare أو Google العام، وتُقرأ مخرجات dig وأسطر ملف المنطقة الملصوقة داخل متصفحك. تُقارن المجموعتان بغض النظر عن الترتيب وحالة الأحرف والنقاط الختامية وطريقة تقسيم نصوص TXT، ويُعلَّم كل سجل بأنه في A فقط أو في B فقط أو في الجهتين، مع فروق TTL.

الخصوصية: يُرسَل الاسم الذي تبحث عنه من خادم متقن إلى محلّلات DNS العامة المذكورة في النتائج. ولا يُخزَّن أي شيء.
جارٍ تحميل الأداة…

ما هو سجل DNS؟

سجل DNS (سجل مورد) مُدخل واحد في المنطقة: اسم مالك، ونوع مثل A أو MX أو TXT، وقيمة TTL بالثواني، والبيانات الخاصة بذلك النوع. وتشكّل سجلات الاسم والنوع نفسيهما مجموعةً (RRset) تجلبها المحلّلات من الخوادم الموثوقة للمنطقة وتخزّنها طوال مدة TTL، ولهذا لا يظهر أي تعديل إلا مع انتهاء صلاحية النسخ المخزّنة.

كيفية استخدام مقارنة سجلات DNS

  1. في الجهة A اكتب اسم نطاق أو الصق سجلات (مثل المنطقة المصدَّرة من مزوّد DNS الحالي).
  2. في الجهة B افعل الشيء نفسه لما تقارن به — منطقة المزوّد الجديد، أو المحلّل الآخر، أو اسماً آخر.
  3. للاستعلامات اختر نوع السجل ومحلّل كل جهة، وفعّل «تجاهل أسماء المالك» لمقارنة البيانات وحدها.
  4. اضغط «مقارنة» وعالج الصفوف المعلَّمة بأنها في A فقط أو في B فقط؛ وتعرض لوحة «ما الذي قورن» كيف قُرئت كل جهة.

مزايا مقارنة سجلات DNS

  • كل جهة إمّا استعلام مباشر (Cloudflare أو Google، يُختار لكل جهة) أو سجلات ملصوقة — ويمكن المزج بينهما
  • قراءة أسطر الإجابة من dig وأسطر ملف المنطقة ($ORIGIN و$TTL و@ والأقواس والأسطر المزاحة التابعة لما قبلها) ومخرجات dig +short البسيطة
  • مقارنة لا تتأثر بالترتيب، وتتجاهل حالة الأحرف والنقاط الختامية والمسافات وطريقة تقسيم نصوص TXT
  • جدول واحد لكل السجلات يبيّن ما في A فقط وما في B فقط وما في الجهتين، قابل للتنزيل بصيغة CSV
  • فروق TTL تُعرض بمعزل عن الفروق الحقيقية، مع القيمتين
  • عند لصق الجهتين تتم المقارنة كلها في متصفحك ولا يُرسل شيء إلى أي مكان

المدخلات والمخرجات

المدخلات

  • الجهة A والجهة B — كل منهما إمّا اسم نطاق واحد (يُستعلم عنه) أو سجلات ملصوقة (مخرجات dig أو أسطر ملف منطقة أو مخرجات dig +short).
  • نوع السجل للاستعلامات — النوع المطلوب لأي جهة تحوي اسم نطاق (A افتراضياً)؛ ومع وجود استعلام في جهة، تُقارن الجهة الملصوقة بذلك النوع وCNAME فقط.
  • محلّل الجهة A / الجهة B — Cloudflare 1.1.1.1 أو Google Public DNS، لمقارنة الاسم نفسه بين محلّلين.
  • تجاهل أسماء المالك — مقارنة النوع والبيانات فقط، ويُطبَّق تلقائياً حين لا يمكن أن تتطابق الأسماء.

المخرجات

  • الملخص — النتيجة (= أو ≠)، وعدد السجلات التي في A فقط وفي B فقط وفي الجهتين، وعدد السجلات المشتركة التي تختلف في TTL وحده.
  • السجلات — كل سجل متمايز مع نوعه واسمه وبياناته ووجوده في كل جهة وقيمتي TTL.
  • الملاحظات — حكم المقارنة، وفروق TTL، والسجلات التي استُبعدت، وسبب تجاهل أسماء المالك.
  • ما الذي قورن — كيف قُرئت كل جهة: الاستعلام ورمز استجابته، أو عدد السجلات الملصوقة وأي أسطر تعذّرت قراءتها.

مثال على مقارنة سجلات DNS

نسختان مصدَّرتان من المنطقة نفسها قبل النقل

الإدخال:

Side A: example.com. 3600 IN MX 10 mail1.example.net. · example.com. 3600 IN MX 20 mail2.example.net. · example.com. 300 IN TXT "v=spf1 include:_spf.example.net -all"
Side B: the same, with MX 20 at TTL 1800 and the SPF ending in ~all

النتيجة:

Result: ≠ · Only in A: 1 · Only in B: 1 · In both: 2 · TTL differences: 1
TXT "v=spf1 include:_spf.example.net -all"   in A only
TXT "v=spf1 include:_spf.example.net ~all"   in B only
Findings: 1 record only on side A (TXT), 1 only on side B (TXT), 2 in common. 1 record on both sides with a different TTL: MX 20 mail2.example.net (3600 s vs 1800 s).

كيف تقرأ نتائج مقارنة سجلات DNS

«=»: الجهتان تحملان السجلات نفسها. واختلاف TTL وحده بين استعلامين هو عمر النسخة المخزّنة، أما بين ملفي منطقة فهو اختلاف حقيقي في الإعداد.

صفوف «في A فقط» سجلات تفتقدها الجهة B (عليك إنشاؤها لدى المزوّد الجديد مثلاً)، وصفوف «في B فقط» سجلات تفتقدها الجهة A (لحذفها أو لإضافتها في الجهة القديمة).

الاختلاف داخل قيمة TXT المقتبسة — مثل ‎-all مقابل ~all في SPF — تغيير حقيقي في السياسة، لا مسألة تنسيق.

الأسطر التي تظهر معها عبارة «not understood» لم تدخل المقارنة؛ راجعها، لأن سطراً فائتاً قد يخفي سجلاً ناقصاً.

متى تستخدم مقارنة سجلات DNS

  • قبل تغيير خوادم الأسماء: مقارنة المنطقة لدى مزوّد DNS الجديد بالقديمة سجلاً سجلاً.
  • مقارنة ما يعيده محلّلا Cloudflare وGoogle للاسم نفسه أثناء التعديل.
  • التحقق من أن مضيف بيئة التجربة ونظيره في الإنتاج (www مقابل www-staging) يحملان السجلات نفسها.
  • مراجعة تعديل على ملف المنطقة في طلب دمج (pull request) مقابل ما هو منشور فعلاً.

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

  • كل شيء يظهر مختلفاً مع أن السجلات متطابقة: قد تحمل إحدى الجهتين أسماء نسبية؛ أضف سطر $ORIGIN إلى النص الملصوق أو فعّل «تجاهل أسماء المالك».
  • ظهور عبارة «not understood» لبعض الأسطر: يحتاج كل سطر إلى نوع سجل (A أو MX أو TXT…) بين المالك/TTL/الفئة وبين البيانات؛ ولا تُقبل مخرجات dig +short إلا إذا لم يحمل أي سطر نوعاً.
  • جهة أردتها استعلاماً قُرئت نصاً ملصوقاً: يجب أن تحوي جهة الاستعلام اسم نطاق واحداً فقط ولا شيء غيره.
  • اختفاء سجلات من أنواع أخرى: حين تكون إحدى الجهتين استعلاماً، يُقارن النوع المختار (وCNAME) فقط؛ الصق الجهتين لمقارنة المناطق كاملة.

الأسئلة الشائعة حول مقارنة سجلات DNS

ماذا يمكنني أن أضع في كل جهة؟

إمّا اسم نطاق واحد يُستعلم عنه مباشرة بنوع السجل والمحلّل المختارين لتلك الجهة، وإمّا سجلات ملصوقة: أسطر إجابة dig، أو أسطر ملف منطقة (مع $ORIGIN و$TTL و@ والأقواس)، أو مخرجات dig +short البسيطة التي تُقرأ على أنها من نوع السجل المختار.

ما الفروق التي تتجاهلها المقارنة؟

الترتيب، وحالة الأحرف في أسماء المضيفين، والنقاط الختامية، والمسافات خارج علامات الاقتباس، وطريقة كتابة عنوان IPv6، وكيفية تقسيم سجل TXT الطويل إلى نصوص. أما ما داخل النص المقتبس فيُقارن حرفياً، وتُعرض قيم TTL منفصلة لأنها غالباً تعكس عمر النسخة المخزّنة لا تغييراً فعلياً.

هل تُرسل السجلات الملصوقة إلى خادم؟

لا. إذا كانت الجهتان ملصوقتين تجري المقارنة بالكامل في متصفحك. وحدها الجهة التي تحوي اسم نطاق تؤدي إلى استعلام، وعندها يُرسل ذلك الاسم ونوع السجل فقط عبر خادم متقن إلى المحلّل المختار.

كيف أقارن مزوّد DNS القديم بالجديد قبل تغيير خوادم الأسماء؟

الصق المنطقة المصدَّرة من المزوّد الجديد في جهة واسم النطاق الحي في الجهة الأخرى — والاستعلام يقارن نوع سجل واحداً في كل تشغيل — أو الصق المنطقتين المصدَّرتين من المزوّدين لمقارنة المنطقة كاملة. والسجلات التي تظهر في A فقط أو في B فقط هي ما عليك إنشاؤه أو حذفه.

لماذا تجاهلت الأداة أسماء المالك؟

حين تستعلم الجهتان عن اسمين مختلفين، أو تكون إحداهما استعلاماً والأخرى نصاً ملصوقاً، لا يمكن أن تتطابق أسماء المالك، فتُقارن الأنواع والبيانات وحدها. وفعّل «تجاهل أسماء المالك» لتفعل الشيء نفسه مع مجموعتين ملصوقتين.

ملاحظات تقنية

تُوحَّد بيانات السجلات قبل المقارنة: العناوين إلى صيغتها القياسية (RFC 5952 أو الصيغة العشرية المنقوطة)، وأسماء المضيفين إلى أحرف صغيرة بلا نقطة ختامية، ونصوص TXT تُدمج ويُفك تهريبها كما يفعل RFC 7208 §3.3، وتُوحَّد حالة أحرف وسم CAA. ولا يُغيَّر شيء داخل النصوص المقتبسة، فيبقى «‎-all» و«~all» مختلفين.

يتبع النص الملصوق صيغة الملف الرئيسي في RFC 1035 §5: المالك، ثم TTL والفئة اختيارياً، ثم النوع، ثم البيانات؛ ويكمل $ORIGIN الأسماء النسبية (حتى داخل بيانات NS وCNAME وMX وSRV وSOA)، ويحدد $TTL قيمة TTL الافتراضية، وتجمع الأقواس السجلات الممتدة على عدة أسطر مثل SOA. أما جهة الاستعلام فتعيد مجموعة سجلات واحدة من المحلّل، بما فيها سلسلة CNAME إن وُجدت.

الحدود ومنهجية القياس

جهة الاستعلام تسأل عن نوع سجل واحد لاسم واحد عبر محلّل عام واحد من حافة Cloudflare؛ فهي نسخة مخزّنة لا المنطقة الموثوقة نفسها (استخدم فاحص خوادم الأسماء لذلك).

يغطي المحلّل اللغوي الصيغة الشائعة للملف الرئيسي؛ فلا تُوسَّع ‎$INCLUDE و‎$GENERATE ولا وحدات TTL مثل 1h، ولا يُقرأ إلا أول 5000 سطر.

تواقيع DNSSEC (RRSIG) التي تعيدها الاستعلامات مستبعدة من المقارنة.

الأمان والخصوصية

السجلات الملصوقة تُحلَّل في متصفحك ولا تُرسل. والجهة التي تحوي اسم نطاق لا ترسل إلا ذلك الاسم ونوع السجل من خادم متقن إلى المحلّل المختار لتلك الجهة؛ ولا يُخزَّن شيء.

المراجع

  • RFC 1035: Domain Names - Implementation and SpecificationIETFصيغة رسائل DNS وأنواع السجلات ورموز الاستجابة (NOERROR وNXDOMAIN وSERVFAIL وREFUSED) التي لا يزال كل محلّل يستخدمها.
  • RFC 1034: Domain names - concepts and facilitiesIETFنموذج DNS: فضاء الأسماء على هيئة شجرة، والمناطق والتفويض، والخوادم الموثوقة والمحلّلات، وكيف يتتبّع المحلّل الإحالات والأسماء المستعارة.
  • RFC 2181: Clarifications to the DNS SpecificationIETF · 1997قواعد تركتها معايير DNS الأولى مفتوحة: مجموعة السجلات تشترك في TTL واحد، وحدود TTL، وأن أهداف MX وNS لا يجوز أن تكون أسماء مستعارة (CNAME).