ubuntu server guide تنصيب وإعداد خدمة اسم النطاق (DNS) على خواديم أوبنتو


عبد اللطيف ايمش

خدمة اسم النطاق (Domain Name Service) هي خدمة إنترنت تربط بين عناوين IP وأسماء النطاق الكاملة (fully qualified domain names‏ [FQDN])؛ وفي هذه الطريقة، تخفف خدمة DNS من حاجة تذكر عناوين IP. تسمى الحواسيب التي تشغّل خدمة DNS «خواديم الأسماء»، ويأتي أوبنتو مع BIND‏ (Brekley Internet Naming Daemon)، وهو أشهر خدمة لإعداد خادوم أسماء في لينُكس.

ubuntu-server-dns.thumb.png.f04729c62ea7

التثبيت

أدخِل الأمر الآتي في مِحَث الطرفية لتثبيت خادوم dns:

sudo apt-get install bind9

حزمة dnsutils مفيدةٌ جدًا في اختبار واستكشاف أخطاء DNS؛ قد تكون هذه الأدوات مثبتةً مسبقًا على نظامك؛ لكن للتأكد من وجودها أو تثبيتها، أدخِل الأمر الآتي:

sudo apt-get install dnsutils

الضبط

هنالك العديد من الطرق لضبط BIND9؛ لكن بعض أشهر هذه الإعدادات هي خادوم تخزين أسماء (caching nameserver)، الرئيس الأولي (primary master)، والرئيس الثانوي (secondary master).

  • عند ضبطه كخادوم تخزين أسماء، فسيجد BIND9 جوابًا عن استعلامات الأسماء وسيتذكر الجواب عندما يُطلَب النطاق مرةً أخرى.
  • عندما يُضبَط كخادوم رئيس أولي، فسيقرأ BIND9 البيانات لنطاق (Zone) في ملف في المضيف ويستوثق لهذا النطاق.
  • عندما يُضبَط كخادوم رئيس ثانوي؛ فسيحصل BIND9 على بيانات النطاق من خادوم أسماء آخر ويستوثق للنطاق.

لمحة

تُخزَّن ملفات ضبط DNS في المجلد ‎/etc/bind، ملف الضبط الرئيسي هو ‎/etc/bind/named.conf.

يُحدِّد سطر include اسمَ الملف الذي يحتوي على خيارات DNS؛ سطر directory في ملف ‎/etc/bind/named.conf.options يخبر DNS أين سيبحث عن الملفات، جميع الملفات التي يستخدمها BIND ستتعلق بهذا المجلد.

يصف ملف ‎/etc/bind/db.root خواديم الأسماء الرئيسية في العالم؛ تتغير هذه الخواديم مع مرور الوقت، لذلك يجب أن يُحدَّث ملف ‎/etc/bind/db.root بين الحين والآخر؛ وذلك يتم عادةً في تحديثات حزمة bind9؛ يُعرِّف القسم zone خادومًا رئيسيًا (master server)، وهو مخزن في ملف مذكور في خيار file.

من الممكن ضبط نفس الخادوم ليكون خادوم تخزين أسماء، ورئيس أولي، ورئيس ثانوي؛ ويمكن أن يكون الخادوم «بداية السلطة» (Start of Authority‏ [SOA]) لنطاق واحد، بينما يوفر خدمة ثانوية لنطاق آخر؛ ومع كل هذا فهو يوفر خدمات التخزين للمضيفين على الشبكة المحلية LAN.

خادوم تخزين الأسماء

الضبط الافتراضي هو العمل كخادوم تخزين؛ كل ما هو مطلوب هو ببساطة إضافة عناوين IP لخواديم DNS التي وفرها لك مزود الخدمة ISP؛ ببساطة، أزل التعليقات عن الأسطر الآتية وعدلها في ملف ‎/etc/bind ‎/named.conf.options:

forwarders {
              1.2.3.4;
              5.6.7.8;
           };

ملاحظة: استبدل 1.2.3.4 و 5.6.7.8 بعناوين IP لخواديم الأسماء لديك.

أعد الآن تشغيل خادوم DNS لتفعيل الضبط الجديد، وذلك بتنفيذ الأمر الآتي من مِحَث الطرفية:

sudo service bind9 restart

راجع القسم «dig» لمزيدٍ من المعلومات حول اختبار خادوم تخزين DNS.

الرئيس الأولي

سنضبط في هذا القسم BIND9 كخادوم رئيس أولي للنطاق example.com؛ استبدل example.com باسم نطاقك الكامل.

  • ملف تمرير المنطقة

لإضافة منطقة DNS إلى BIND9، مما يحول BIND9 إلى خادوم رئيس أولي، فإنَّ أول خطوة هي تعديل ملف ‎/etc/bind/named.conf.local:

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
};

ملاحظة: إذا كان سيستقبل bind تحديثاتٍ تلقائيةً عبر DDNS، فعليك استخدام الملف ‎/var/lib/bind ‎/db.example.com‎ بدلًا من ‎/etc/bind/db.example.com سواءً في الملف السابق أو في أمر النسخ الآتي.

استخدم الآن ملف نطاق موجود مسبقًا كقالب لإنشاء ملف ‎/etc/bind/db.example.com:

sudo cp /etc/bind/db.local /etc/bind/db.example.com

عدِّل ملف النطاق الجديد ‎/etc/bind/db.example.com مغيّرًا localhost إلى FQDN لخادومك، واترك النقطة الإضافية في النهاية؛ وغيّر 127.0.0.1 إلى عنوان IP لخادوم الأسماء و root.localhost إلى عنوان بريد صالح، لكن باستخدام "." بدلًا من رمز "@" واترك أيضًا النقطة الإضافية في النهاية؛ عدِّل التعليق لكي يبيّن النطاق الخاص بهذا الملف.

أنشئ «سجلًا» (record) للنطاق الأساسي، example.com، وأيضًا أنشِئ سجلًا لخادوم الأسماء، الذي هو في هذا المثال ns.example.com:

;
; BIND data file for example.com
;
$TTL    604800
@       IN       SOA    example.com.     root.example.com. (
                              2             ; Serial
                         604800             ; Refresh
                          86400             ; Retry
                        2419200             ; Expire
                         604800 )           ; Negative Cache TTL
        IN       A      192.168.1.10
;
@       IN       NS     ns.example.com.
@       IN       A      192.168.1.10
@       IN       AAAA   ::1
ns      IN       A      192.168.1.10

يجب أن تزيد الرقم التسلسلي (Serial Number) في كل مرة تعدِّل فيها على ملف النطاق؛ إذا عدَّلت عدة تغيرات قبل إعادة تشغيل BIND9، فَزِد الرقم التسلسلي مرةً واحدةً فقط.

تستطيع الآن إضافة سجلات DNS في نهاية ملف المنطقة، راجع القسم «أنواع السجلات الشائعة» للتفاصيل.

ملاحظة: يحب العديد من مدراء الأنظمة استخدام تاريخ آخر تعديل كرقم تسلسلي للمنطقة؛ مثل 2012010100 الذي هو yyyymmddss (حيث ss هو الرقم التسلسلي).

بعد أن أجريت تعديلاتك في ملف النطاق؛ فيجب إعادة تشغيل BIND9 لكي تأخذ التعديلات مجراها.

sudo service bind9 restart
  • ملف النطاق المعكوس

بعد أن ضبطت النطاق لحل الأسماء إلى عناوين IP، فمن المطلوب أيضًا «نطاق معكوس» (Reverse zone)؛ يسمح النطاق المعكوس لخدمة DNS بحل العناوين إلى أسماء.

عدِّل ملف ‎/etc/bind/named.conf.local، وأضف ما يلي:

zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192";
};

ملاحظة: استبدل 1.168.192 بأول ثلاث خانات تستخدمها شبكتك؛ وسَمِّ ملف النطاق ‎/etc/bind/db.192 تسميةً ملائمةً، حيث يجب أن يُطابِق أول خانة من خانات عنوان الشبكة.

أنشِئ الآن ملف ‎/etc/bind/db.192:

sudo cp /etc/bind/db.127 /etc/bind/db.192

ثم غيِّر ملف ‎/etc/bind/db.192 معدِّلًا نفس الخيارات في ‎/etc/bind/db.example.com:

;
; BIND reverse data file for local 192.168.1.XXX net
;
$TTL  604800
@     IN       SOA    ns.example.com.     root.example.com. (
                             2                 ; Serial
                        604800                 ; Refresh
                         86400                 ; Retry
                       2419200                 ; Expire
                        604800 )               ; Negative Cache TTL
;
@     IN       NS      ns.
10    IN       PTR     ns.example.com.

يجب أن يُزاد الرقم التسلسلي في النطاق المعكوس في كل مرة يُعدَّل فيها الملف. فلكل سجل A تضبطه في ‎/etc/bind/db.example.com لعنوان مختلف، يجب عليك أن تنشِئ سجل PTR في ‎/etc/bind/db.192.

أعد تشغيل BIND9 بعد إنشاء ملف النطاق المعكوس.

sudo service bind9 restart

الرئيس الثانوي

بعد أن يُضبَط الرئيس الأولي فسنحتاج إلى رئيس ثانوي لكي نحافظ على بقاء النطاق في حال لم يكن الرئيس الأولي متوفرًا.

في البداية، يجب أن يُسمَح بنقل النطاق في الخادوم الرئيس الأولي؛ أضف الخيار allow-transfer إلى قسم النطاق والنطاق المعكوس في ملف ‎/etc/bind/named.conf.local:

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
        allow-transfer { 192.168.1.11; };
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192";
        allow-transfer { 192.168.1.11; };
};

ملاحظة: استبدل 192.168.1.11 بعنوان IP لخادوم الأسماء الثانوي.

أعد تشغيل خدمة BIND9 في الرئيس الأولي:

sudo service bind9 restart

الآن ثبِّت على الرئيس الثانوي الحزمة bind9 بنفس الطريقة التي ثبتتها على الأولي؛ ثم عدِّل ملف ‎/etc/bind/named.conf.local وأضف التعاريف الآتية لنطاقَيّ التمرير والعكس:

zone "example.com" {
        type slave;
        file "db.example.com";
        masters { 192.168.1.10; };
};

zone "1.168.192.in-addr.arpa" {
        type slave;
        file "db.192";
        masters { 192.168.1.10; };
};

ملاحظة: استبدل 192.168.1.10 بعنوان IP لخادوم الأسماء الأولي.

أعد تشغيل خدمة BIND9 على الخادوم الثانوي:

sudo service bind9 restart

يجب أن تشاهد في سجل ‎/var/log/syslog شيئًا شبيهًا بما يلي (قُسِّمَت بعض الأسطر لكي تتسع في عرض الصفحة):

client 192.168.1.10#39448: received notify for zone '1.168.192.in-addr.arpa'
zone 1.168.192.in-addr.arpa/IN: Transfer started.
transfer of '100.18.172.in-addr.arpa/IN' from 192.168.1.10#53:
 connected using 192.168.1.11#37531
zone 1.168.192.in-addr.arpa/IN: transferred serial 5
transfer of '100.18.172.in-addr.arpa/IN' from 192.168.1.10#53:
 Transfer completed: 1 messages,
6 records, 212 bytes, 0.002 secs (106000 bytes/sec)
zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 5)

client 192.168.1.10#20329: received notify for zone 'example.com'
zone example.com/IN: Transfer started.
transfer of 'example.com/IN' from 192.168.1.10#53: connected using 192.168.1.11#38577
zone example.com/IN: transferred serial 5
transfer of 'example.com/IN' from 192.168.1.10#53: Transfer completed: 1 messages,
8 records, 225 bytes, 0.002 secs (112500 bytes/sec)

ملاحظة: تُنقَل المنطقة فقط إذا كان الرقم التسلسلي على الأولي أكبر منه على الثانوي؛ وإذا أردت أن يعلم الرئيس الأولي بتعديلات النطاقات في خواديم DNS الثانوية، فعليك إضافة الخيار ;{ also-notify { ipaddress  في ملف ‎/etc/bind/named.conf.local كما هو موضح في المثال الآتي:

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
        allow-transfer { 192.168.1.11; };
        also-notify { 192.168.1.11; };
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192";
        allow-transfer { 192.168.1.11; };
        also-notify { 192.168.1.11; };
};

ملاحظة: المجلد الافتراضي للنطاقات غير الموثوق منها هو ‎/var/cache/bind؛ يُضبَط هذا المجلد أيضًا في AppArmor ليسمح للعفريت named بالكتابة إليه؛ المزيد من المعلومات حول AppArmor ستتوفر في الدرس القادم.

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

يشرح هذا القسم الطرق التي تستخدم للمساعدة في تحديد المسبب عندما تحدث المشاكل مع DNS و BIND9.

الاختبار

  • ملف resolv.conf

أول خطوة في اختبار BIND9 هي إضافة عنوان IP لخادوم الأسماء للذي يستبين أسماء المضيفين؛ يجب أن يُضبَّط خادوم الأسماء أيضًا لمضيف آخر للتأكد مرةً أخرى؛ تحقق إن كان الملف ‎/etc/resolv.conf يحتوي على الأسطر الآتية:

nameserver 192.168.1.10
nameserver 192.168.1.11

خواديم الأسماء التي تستمع على ‎127.*‎ مسؤولة عن إضافة عناوين IP الخاصة بهم إلى ملف resolv.conf (باستخدام resolveconf)؛ وهذا يتم عبر الملف ‎/etc/default/bind9 بتغيير السطر:

RESOLVECONF=no 

إلى:

RESOLVECONF=yes.‏‎

ملاحظة: يجب إضافة عنوان IP لخادوم الأسماء الثانوي في حال لم يكن الخادوم الأولي متوفرًا.

  • أداة البحث dig

إذا ثبتت حزمة dnsutils فيمكنك اختبار إعداداتك باستخدام أداة البحث في DNS المسماة dig:

بعد تثبيت BIND9، فاستخدم dig مع بطاقة loopback (أي localhost) للتأكد أنها تستمع على المنفذ 53؛ أدخِل الأمر الآتي في مِحَث الطرفية:

dig -x 127.0.0.1

يجب أن تُشاهِد أسطرًا شبيهة بالآتي في ناتج الأمر:

;; Query time: 1 msec
;; SERVER: 192.168.1.10#53(192.168.1.10)

إذا ضَبطَت BIND9 كخادوم تخزين الأسماء، فابحث (dig) عن نطاق خارجي للتحقق من زمن الطلبية:

dig ubuntu.com

لاحظ وقت الطلبية في نهاية ناتج الأمر السابق:

;; Query time: 49 msec

بعد استخدام dig مرةً أخرى، يجب أن يتحسن الرقم السابق:

;; Query time: 1 msec
  • أداة ping

لشرح كيف تَستخدم التطبيقات DNS لكي يستبين اسم المضيف؛ فسنستخدم الأداة ping لإرسال طلب ICMP echo؛ وذلك بإدخال الأمر الآتي في الطرفية:

ping example.com

ما سبق سيختبر إن استطاع خادوم الأسماء استبيان الاسم ns.example.com وتحويله إلى عنوان IP؛ يجب أن تشابه مخرجات الأمر السابق ما يلي:

PING ns.example.com (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.800 ms
64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=0.813 ms
  • named-checkzone

طريقة رائعة لاختبار ملفات النطاقات لديك هي استخدام الأداة المثبتة مع حزمة bind9؛ تسمح هذه الأداة لك بالتأكد من أن الضبط صحيح قبل إعادة تشغيل BIND9 وجعل التغيرات حيةً.

أدخِل الأمر الآتي في الطرفية لاختبار ملف النطاق في مثالنا:

named-checkzone example.com /etc/bind/db.example.com

إذا كان كل شيءٍ مضبوطًا ضبطًا سليمًا، فستشاهد مخرجاتٍ شبيهةٍ بما يلي:

zone example.com/IN: loaded serial 6
OK

وبشكل مشابه، أدخل ما يلي لاختبار ملف النطاق العكسي:

named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192

يجب أن تكون المخرجات شبيهةً بما يلي:

zone 1.168.192.in-addr.arpa/IN: loaded serial 3
OK

ملاحظة: سيكون الرقم التسلسلي لملف النطاق عندك مختلفًا عادةً.

التسجيل

لدى BIND9 خيارات كثيرة لضبط التسجيل (logging)؛ هنالك خياران رئيسيان هما الخيار channel الذي يضبط أين سيذهب السجل، والخيار category الذي يحدد ما هي المعلومات التي ستُسجَّل.

إذا لم يُحدَّد ضبطٌ للتسجيل، فالضبط الافتراضي هو:

logging {
     category default { default_syslog; default_debug; };
     category unmatched { null; };
};

يشرح هذا القسم ضبط BIND9 لإرسال رسائل debug متعلقة بطلبيات DNS إلى ملفٍ منفصل.

سنحتاج أولًا إلى ضبط «قناة» (channel) لتحديد الملف الذي ستُرسَل إليه الرسائل، عدل ملف ‎‎/etc/bind/‎named.conf.local، وأضف ما يلي:

logging {
    channel query.log {
        file "/var/log/query.log";
        severity debug 3;
    };
};
  • اضبط الآن تصنيفًا لإرسال جميع طلبيات DNS إلى ملف query:

logging {
    channel query.log {
        file "/var/log/query.log";
        severity debug 3;
    };
    category queries { query.log; };
};

ملاحظة: لاحظ أن الخيار debug يمكن أن يُضبَط من المرحلة 1 إلى 3؛ وستستخدم المرحلة 1 إذا لم تُحدَّد مرحلة.

ولما كان عفريت named يعمل كمستخدم bind، فيجب إنشاء الملف ‎/var/log/query.log وتغيير ملكيته:

sudo touch /var/log/query.log
sudo chown bind /var/log/query.log

قبل أن يتمكن العفريت named من الكتابة إلى ملف السجل الجديد، فيجب أن يُحدَّث ضبط AppArmor؛ أولًا، عدِّل ملف ‎/etc/apparmor.d/usr.sbin.named وأضف:

/var/log/query.log w,

ثم أعد تحميل ملف ضبطه:

cat /etc/apparmor.d/usr.sbin.named | sudo apparmor_parser -r

أعد الآن تشغيل BIND9 لكي تأخذ التغييرات مفعولها:

sudo service bind9 restart

يجب أن ترى الملف ‎/var/log/query.log ممتلئًا بمعلومات الطلبيات؛ هذا مثال بسيط عن ضبط تسجيل BIND9؛ راجع القسم «المزيد من المعلومات» للمزيد من الخيارات المتقدمة.

المراجع

أنواع السجلات الشائعة

يغطي هذا القسم بعض أنواع سجلات DNS الشائعة.

  • سجل A: يربط هذا السجل عنوان IP إلى اسم مضيف.

www IN A 192.168.1.12
  • سجل CNAME: يُستخدَم لإنشاء اسم بديل لسجل موجود مسبقًا، لا يمكنك استخدام سجل CNAME للإشارة إلى سجل CNAME آخر.

web IN CNAME www
  • سجل MX: يُستخدَم لتعريف أين يجب أن يُرسَل البريد؛ يجب أن يشير إلى سجل A، وليس سجل CNAME.

     IN MX 1 mail.example.com.
mail IN A    192.168.1.13
  • سجل NS: يُستخدَم لتعريف أيّة خواديم تُخَدِّم نسخًا من المنطقة؛ يجب أن يشير إلى سجل A، وليس إلى CNAME؛ هذا مكان تعريف الخادومين الأولى والثانوي.

    IN NS ns.example.com.
    IN NS ns2.example.com.
ns  IN A  192.168.1.10
ns2 IN A  192.168.1.11

المزيد من المعلومات

  • دليل «DNS HOWTO» يشرح الخيارات المتقدمة لضبط BIND9.
  • انظر إلى bind9.net للحصول على شرح معمّق لعمل DNS و BIND9.
  • كتاب «DNS and BIND» هو كتابٌ شائع أصبح في إصداره الخامس؛ وهنالك أيضًا كتاب «DNS and BIND on IPv6».
  • مكان رائع لطلب المساعدة في BIND9 والتعاون مع مجتمع خادوم أوبنتو هو قناة IRC على خادوم Freenode «#ubuntu-server»‎.
  • أيضًا، راجع «BIND9 Server HOWTO» في ويكي أوبنتو.

ترجمة -وبتصرف- للمقال: Ubuntu Server Guide: Domain Name Service DNS





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن