مدونة عمار الخوالده

شرح الـ DNS وآلية عمله وبعض تطبيقاته


شرح الـ DNS وآلية عمله وبعض تطبيقاته

ما هو الـ DNS

تتواصل الأجهزة على الشبكة مع بعضها عن طريق الـ IP Address، عند تعاملنا مع المواقع فإننا نتعامل مع الـ Domain Names، فتذكُّر رابط موقعي أو التعرف عليه (ammar.dev) أسهل بكثير من محاولة تذكر الـ IP المكون من مجموعة من الأرقام.

وبما أن التواصل عبر الشبكة يتم عن طريق الـ IP Address، فنحن بحاجة إلى آلية لتحويل الـ Domain Name إلى IP Address حتى يتم الاتصال، وهذا ما يتم عبر الـ Domain Name System ويرمز له اختصارا بـ DNS.

كيف يعمل الـ DNS

الـ DNS يعمل عبر عدة خطوات، عند إدخال ammar.dev إلى متصفح الويب مثلا، يقوم المتصفح بالتحقق من وجود الـ IP Address الخاص بـ ammar.dev في ذاكرة الـ Cache الخاصة بالمتصفح، إذا تم إيجاده، فقد تمت العملية بنجاح وحصلنا على الـ IP Address المطلوب.

في حال لم يتم إيجاد الـ IP Address في ذاكرة الـ Cache الخاصة بالمتصفح، يبدأ البحث في ذاكرة الـ Cache الخاصة بنظام التشغيل، فربما قام برنامج آخر أو متصفح آخر بطلب نفس الـ Domain Name مما يعني أن عملية الـ Cache تمت على مستوى نظام التشغيل لكن لم تتم على مستوى البرنامج أو المتصفح الحالي.

سيتم أيضا البحث في ملف hosts الذي يمكنك من تحديد IP Address مخصص لأي Domain Name.

إذا لم يتم إيجاد الـ IP Address في ذاكرة الـ Cache للمتصفح أو لنظام التشغيل، ستبدأ سلسلة من الاتصالات عبر بروتوكول UDP للسؤال عن الـ IP Address، تتم هذه العملية عبر عدة خطوات، أولا سيقوم جهازك بسؤال سيرفر يسمى DNS Resolver عن عنوان الـ IP.

DNS Resolver

شرح الخطوة الأولى من عملية الـ DNS Lookup واتصال الجهاز بالـ DNS Resolver

الـ DNS Resolver هو سيرفر وظيفته الحصول على الـ IP Addresses من الـ Domain Names عبر الاتصال بعدة سيرفرات، غالبا ما تتم ادارة هذا السيرفر عن طريق مزود خدمة الانترنت ISP.

في حال لم يكن الـ Domain Name موجودا في ذاكرة الـ Cache الخاصة بالـ DNS Resolver، سيقوم الـ DNS Resolver بسؤال أحد سيرفرات الـ Root Servers عن عنوان الـ IP للـ Domain الذي تم إرساله.

DNS Root Server

الـ Root Servers هي سيرفرات الـ DNS الرئيسية، تقوم هذه السيرفرات بإرسال الـ IP Address المطلوب للـ DNS Resolver في حال كان موجودا في ذاكرة الـ Cache الخاصة بها، لكن إن لم يتم إيجادها فإنها ترسل الـ IP Address الخاص بنوع آخر من الـ DNS Name Servers للـ DNS Resolver.

صورة توضيحية للخطوة الثانية من الاتصال وسؤال الـ Root Server عن الـ IP Address

كما في الصورة السابقة، يقوم الـ Root Server بإرسال IP Address لسيرفر آخر مسؤول عن اللاحقة الخاصة بـ .dev للـ DNS Resolver.

هذه اللواحق الخاصة بالـ Domains تسمى Top Level Domain، يرمز لها اختصارا بـ TLD.

TLD Name Server

رسم توضيحي للخطوة الثالثة من العملية وسؤال الـ TLD Name Server عن عنوان الـ IP

كما هو الحال في جميع الخطوات السابقة، سيقوم الـ TLD Name Server بالبحث في ذاكرة الـ Cache الخاصة به أولا، في المثال السابق، هذا السيرفر هو الـ TLD Name Server الخاص بـ .dev، وظيفته هي تخزين الـ IP الخاص بسيرفر الـ DNS المسؤول عن كل Domain ينتهي بـ .dev.

Authoritative Name Server

سيرفر الـ DNS الذي يخزن إعدادات Domain معين، يسمى Authoritative Name Server، سيحاول الـ DNS Resolver Server أن يسأل الـ Authoritative Name Server عن الـ IP Address:

الخطوة الأخيرة والحصول على الـ IP Address من الـ Authoritative Name Server

الـ TLD Name Server سيقوم بتحويل الـ DNS Resolver إلى الـ Authoritative Name Server وهذه هي وجهتنا النهائية، يقوم الـ Authoritative Name Server بالبحث عن الـ Domain المطلوب ويرجع للـ DNS Resolver الـ IP Address الخاص بـ ammar.dev.

الـ Authoritative Name Server هو السيرفر الذي تقوم بتخزين إعدادات الـ DNS لإسم الـ Domain الخاص بك فيه، سنأخذ مثالا عمليا عليه خلال المقال.

خلاصة آلية عمل الـ DNS

الرسم التالي يلخص جميع الخطوات التي شرحناها سابقا في رسم توضيحية واحد:

صورة تلخص جميع الخطوات الخاصة بعملية الـ DNS Lookup

ماذا يحدث عندما أقوم بحجز Domain Name؟

لنفترض أنك تريد أن تحجز example.com عن طريق إحدى خدمات حجز الـ Domains، ستقوم هذه الخدمات بحجز الـ Domain في الـ TLD Name Servers الخاصة بلاحقة .com، ومن الخطوات السابقة، نحن نعلم أن الـ TLD Name Server يجب أن يُشير إلى الـ Authoritative Name Server الخاص بـ example.com، الـ Authoritative Name Server في هذه الحالة هو سيرفر خاص بخدمة تسجيل الدومينات.

يمكنك معرفة الـ Authoritative Name Server الخاص بأي موقع عن طريق تنفيذ الأمر:

1dig NS +noall +answer domain_name

مثال على النتيجة:

مثال على نتيجة الأمر dig

النتيجة الأولى توضح أن موقعي يستخدم ثلاثة من الـ Authoritative Name Servers الخاصة بخدمة DigitalOcean بينما StackOverflow يستخدم Authoritative Name Server من خدمتي Google Domains و AWS.

ما تقوم به خدمة تسجيل الـ Domains هو ربط الدومين بـ Authoritative Name Server خاص بها (يمكن تغييره لاحقا)، ثم تسجيل الـ Domain في الـ TLD Name Server المناسب.

يمكنني مثلا بالنسبة لموقعي إضافة SubDomains أو تعديل إعدادات الـ Domain عن طريق DigitalOcean لأنها هي الخدمة التي تستضيف الـ Authoritative Name Server المسؤول عن الـ Domain الخاص بي.

DNS Records

سجلات الـ DNS، أو الـ DNS Records، هي اعدادات خاصة بالـ Domain يتم تخزينها على الـ Authoritative Name Server، توجد عدة أنواع من هذه السجلات، معرفة وفهم هذه الأنواع مهمة للتعامل مع الـ Domain Name الخاص بك، غالبا ستوفر لك خدمة الـ Name Server أو الـ Domain Name Registarar التي تستخدمها واجهة إعدادات تمكنك من تعديل الـ DNS Records.

A Record

وظيفة هذا الـ Record هو الإشارة إلى الـ IP Address الخاص بالـ Domain، عند محاولتك لفتح موقعي عبر المتصفح، سيقوم المتصفح بعملية DNS Lookup التي شرحناها مسبقا، ما لم نذكره خلال الشرح، أن المتصفح (غالبا) يطلب الـ A Record، فهو الـ Record الخاص بالـ IP Address.

هذه نتيجة الأمر dig عند السؤال عن الـ A Record لموقعي:

نتيجة الأمر dig للحصول على الـ A Record

لنلقي نظرة على إعداد هذا الـ Record من إعدادات خدمة الـ DNS التي استخدمها:

إعدادات الـ A Record الخاصة بموقع ammar.dev

هذه المعلومات هي نفسها التي تم الحصول عليها من خلال الأمر dig، لاحظ أننا لإضافة A Record نحتاج إلى ثلاث معلومات:

  • الـ Hostname، وهو في هذه الحالة ammar.dev.
  • الـ Value، وهي قيمة الـ IP المطلوب ربط الـ Domain به.
  • الـ TTL وهي عدد الثواني التي يجب أن تبقى قيمة الـ Record فيها في ذاكرة الـ Cache (تذكر أننا في كل خطوة من خطوات الـ DNS Lookup كنا نقوم بعملية Cache للبيانات).

هذه صورة لصفحة إضافة Record جديد:

إضافة A Record جديد

لاحظ أن بإمكاني إضافة Record لـ Sub Domain بدلا من الـ Domain الرئيسي.

AAAA Record

هذا الـ Record هو بنفس فكرة الـ A Record لكنه مخصص للـ IPv6 بدلا من الـ IPv4، تفعيلك لهذا الـ Record (في حال كان سيرفرك يدعم IPv6) سيمكن المتصلين باستخدام IPv6 من التعامل مع موقعك.

CNAME Record

الـ CNAME هو Record يستخدم للإشارة إلى A Record آخر، مثال:

إعدادات الـ CNAME Record

من الصورة السابقة نجد أن www.ammar.dev يُشير إلى ammar.dev، الـ CNAME لا يمكن أن تكون القيمة فيها IP، بل هي دائما تشير إلى Domain آخر.

يفضل استخدام الـ CNAME لأي Sub Domain لديك ما دمت تحتاج إلى أن يشير إلى نفس الـ IP الخاص بالموقع الرئيسي (أو بـ Sub Domain آخر)، فتخيل أن لدينا خمسة دومينات فرعية، ولكل واحد منهم A Record وكلهم يشيرون إلى نفس الـ IP، ففي حال تعديل الـ IP ستضطر لتعديل الـ IP لجميع الـ Records الخمسة، بينما في حالة الـ CNAME ستعدل فقط الـ A Record الأساسي.

وجود الـ CNAME لا يعني أن جميع الـ Sub Domains ستشغل نفس الموقع، فيمكنني من خلال Nginx أو أي Web Server آخر أن أقوم بتحويل كل Domain إلى الـ Application المناسب.

NS Record

هذا الـ Record هو الـ Record الذي يحدد الـ Authoritative Name Servers، في بداية المقال عند الحديث عن ما يحدث عند تسجيل Domain Name، قمنا بتنفيذ أمر dig التالي:

1dig NS +noall +answer domain_name

لاحظ أننا مررنا NS إلى الأمر dig، بالتالي فإن الـ NS Record هو الـ Record المسؤول عن تحديد الـ Authoritative Name Server، فيمكنني من خلاله تبديل الـ Name Servers الأساسية (مثلا في موقعي قمت باستخدام الـ Name Servers الخاصة بـ Digitalocean بدلا من الخدمة التي قمت بحجز الـ Domain Name من خلالها).

كما يمكنك تحديد Name Servers مختلفة لأحد الـ Sub Domains الموجودة.

إعدادات الـ Name Server Records

DNS Records أخرى

توجد الكثير من أنواع الـ DNS Records، وقد شرحنا أشهرها، توجد أيضا بعض الـ DNS Records التي تستخدم بكثرة مثل MX، التي تستخدم لخدمات البريد الالكتروني، أو TXT والتي هي عبارة عن حقل نصي عادي، تستخدم أحيانا لإثبات ملكية الموقع لخدمة خارجية أو لإضافة بعض المعلومات.

لتفاصيل أكثر عن الـ DNS Records التي قمنا بشرحها بإيجاز، أو لمعرفة باقي الـ DNS Records التي لم نتطرق إليها يمكنك مراجعة DNS Records | Cloudflare.

مراجع ومصادر أخرى للقراءة

فهم طريقة عمل الـ DNS لا تساعدك فقط في إدارة الـ Records الخاصة بالـ Domains، بل يتعدى ذلك إلى فهم بعض المواضيع المتعلقة بالـ Architecture أو معمارية النظام الذي تَبْنيه، وفيما يلي بعض الروابط المتعلقة ببعض المواضيع مع نبذة بسيطة عنها

Round-Robin DNS

عند إضافة أكثر من Record من نفس النوع لنفس الـ Hostname، كإضافة أكثر من A Record بعناوين IP مختلفة لنفس الـ Domain، سيوفر هذا نوعا من الـ Load Balancing بحيث لا يستخدم جميع المستخدمين نفس الـ API في نفس الوقت، مصادر ينصح بمراجعتها:

DNS FailOver

بعض خدمات الـ DNS كـ CloudFlare أو AWS Route 53 وغيرها توفر خدمة تتحقق ما إذا كانت سيرفراتك تعمل أم لا (Health Check)، في حال توقف أحد السيرفرات عن العمل تقوم هذه الخدمات (إذا قمت بإعدادها لتفعل ذلك) بإزالة السيرفر المتعطل من الـ DNS Records مما يزيد من توفر الموقع (Availability).

إضافة إلى ذلك تقوم بعض الـ Http Clients والمتصفحات بفتح أكثر من اتصال TCP مع قائمة الـ IP Addresses ثم تختار أسرع اتصال وتغلق البقية.

مصادر ينصح بمراجعتها:

Dns Traffic Steering

بعض خدمات الـ DNS تقدم إمكانية عمل Traffic Steering أو Routing على مستوى الـ DNS، فيمكن للـ Authoritative Server أن يقوم بإرجاع قيم مختلفة للـ DNS Records بحسب متغيرات معينة، فيمكن مثلا أن يقوم بتزويد الـ Client بـ IP مختلف بحسب الدولة أو الاقليم، فمن يزور الموقع من قارة آسيا يتم تزويده بـ IP مختلف عن الـ IP الذي يتم تزويده للزائر من قارة افريقيا، مما يمكنك من توفير السيرفر الأقرب للزائر وهذا سيقلل الـ Response Time ويزيد سرعة الاستجابة.

مصادر ينصح بمراجعتها:

اقرأ أيضا