كيفية تكوين BIND كخادم DNS للشبكة الخاصة على Ubuntu 22.04

مقدمة

جزء مهم من إدارة تكوين الخادم والبنية التحتية ينطوي على الحفاظ على طريقة للعثور على واجهات الشبكة وعناوين IP عن طريق الاسم. أحد الطرق للقيام بذلك هو إعداد نظام اسم النطاق (DNS) الصحيح. باستخدام أسماء النطاق الكاملة المؤهلة (FQDNs) بدلاً من عناوين IP لتحديد عناوين الشبكة، يتم تحسين تكوين الخدمات والتطبيقات، ويزيد من قابلية صيانة ملفات التكوين. إعداد DNS الخاص بك لشبكة خاصة هو وسيلة رائعة لتحسين إدارة الخوادم الخاصة بك.

في هذا البرنامج التعليمي، ستقوم بإعداد خادم DNS داخلي باستخدام خادمي Ubuntu 22.04. ستستخدم برنامج خادم الأسماء BIND (BIND9) لحل أسماء المضيفين الخاصة وعناوين IP الخاصة. يوفر هذا وسيلة مركزية لإدارة أسماء المضيفين الداخلية وعناوين IP الخاصة بك، وهو لا غنى عنه عندما يتوسع بيئتك إلى أكثر من عدد قليل من المضيفين.

المتطلبات المسبقة

لإكمال هذا البرنامج التعليمي، ستحتاج إلى البنية التحتية التالية. تأكد من إنشاء كل خادم في نفس مركز البيانات مع تمكين الشبكة الخاصة:

  • A fresh Ubuntu 22.04 server to serve as the Primary DNS server, ns1.
  • (مستحسن) خادم Ubuntu 22.04 ثانٍ ليكون خادم DNS الثانوي، ns2.
  • على الأقل خادم إضافي واحد. يفترض هذا الدليل أن لديك خادمين إضافيين، والتي ستُشار إليها باسم خوادم العميل. يجب إنشاء هذه الخوادم العميل في نفس مركز بيانات خوادم DNS الخاص بك.

على كل من هذه الخوادم، قم بتكوين مستخدم إداري sudo وإعداد جدار ناري عن طريق اتباع دليلنا لإعداد الخادم الأولي لـ Ubuntu 22.04.

إذا كنت غير ملم بمفاهيم DNS، فإننا نوصي بقراءة الأجزاء الثلاثة الأولى على الأقل من دليلنا لإدارة DNS.

على DigitalOcean، يتم وضع جميع الـ Droplets الجديدة التي تم إنشاؤها في سحابة خاصة افتراضيًا. تحقق من وثائق منتج VPC الخاصة بنا لمعرفة المزيد.

مثال على البنية التحتية والأهداف

لأغراض هذا المقال، سنفترض ما يلي:

  • لديك خادمين سيتم تعيينهما كخوادم أسماء DNS الخاصة بك. سيُشار إلى هذا الدليل باسم ns1 و ns2.
  • لديك خادمين عميلين إضافيين سيتم استخدامهما في بنية البنية التحتية لنظام نطاق اسم النطاق (DNS) الذي تقوم بإنشائه، والمشار إليهما بـ host1 و host2 في هذا الدليل. يمكنك إضافة أي عدد من خوادم العميل التي ترغب فيها.
  • جميع هذه الخوادم موجودة في نفس مركز البيانات. يفترض هذا البرنامج التعليمي أن هذا المركز يسمى nyc3.
  • جميع هذه الخوادم ممكنة للشبكة الخاصة وهي على الشبكة الفرعية 10.128.0.0/16 (ربما تحتاج إلى ضبط هذا لخوادمك).
  • جميع الخوادم متصلة بمشروع يعمل على example.com. يوضح هذا الدليل كيفية إعداد نظام DNS الداخلي والخاص، حتى تتمكن من استخدام أي اسم نطاق ترغب فيه بدلاً من example.com. ستحاول خوادم DNS دائمًا توجيه الطلبات أولاً داخليًا، وبذلك لن تحاول الوصول إلى النطاق المعطى على الإنترنت العام. ومع ذلك، قد يساعد استخدام نطاق تملكه في تجنب التعارض مع النطاقات التي يمكن الوصول إليها على الإنترنت بشكل عام.

مع مراعاة هذه التوقعات، ستستخدم الأمثلة في هذا الدليل نظام تسمية يستند إلى النطاق الجزئي nyc3.example.com للإشارة إلى الشبكة الفرعية أو المنطقة الخاصة المثالية. وبالتالي، سيكون الاسم الكامل للمجال الفرعي الخاص لـ host1 هو host1.nyc3.example.com. يحتوي الجدول التالي على التفاصيل ذات الصلة المستخدمة في الأمثلة طوال هذا الدليل:

Host Role Private FQDN Private IP Address
ns1 Primary DNS Server ns1.nyc3.example.com 10.128.10.11
ns2 Secondary DNS Server ns2.nyc3.example.com 10.128.20.12
host1 Generic Host 1 host1.nyc3.example.com 10.128.100.101
host2 Generic Host 2 host2.nyc3.example.com 10.128.200.102
 

ملاحظة: ستكون إعداداتك مختلفة، ولكن ستُستخدم أسماء المثال وعناوين IP لتوضيح كيفية تكوين خادم DNS لتوفير خدمة DNS داخلية فعالة. يجب أن تكون قادرًا على تكييف هذا الإعداد لبيئتك الخاصة من خلال استبدال أسماء الأجهزة وعناوين IP الخاصة بك. ليس من الضروري استخدام اسم المنطقة لمركز البيانات في نظام التسمية الخاص بك، ولكن نستخدمه هنا للإشارة إلى أن هذه الأجهزة تنتمي إلى شبكة خاصة تابعة لمركز بيانات معين. إذا كنت تشغل خوادم في عدة مراكز بيانات، فيمكنك إعداد DNS داخلي في كل مركز بيانات بشكل منفصل.

بحلول نهاية هذا البرنامج التعليمي، ستكون لديك خادم DNS أساسي، ns1، واختياريًا خادم DNS ثانوي، ns2، الذي سيكون كنسخة احتياطية.

عند اتباع هذا البرنامج التعليمي، ستكون هناك أوقات عندما يتعين عليك تشغيل بعض الأوامر على خادم محدد في هذا الإعداد. أي أوامر يجب تشغيلها على ns1 ستحتوي على خلفية زرقاء، مثل هذا:

بالمثل، أي أوامر يجب تشغيلها على ns2 ستحتوي على خلفية حمراء:

وأي أوامر يجب تشغيلها على أحد خوادم العميل ستحتوي على خلفية خضراء:

وأي أوامر يجب تشغيلها على العديد من الخوادم ستحتوي على خلفية بحرية عادية:

أخيرًا، تأكد من أن أياما تحتوي على أوامر أو كتلة رمزية تحتوي على نص يتم تمييزه مثل هذا، فهذا يعني أن النص مهم. سيتم استخدام هذا النوع من التمييز في جميع أنحاء هذا الدليل لتحديد التفاصيل التي يجب استبدالها بإعداداتك الخاصة أو يجب تعديل النص المميز أو إضافته إلى ملف التكوين. على سبيل المثال، إذا كان المثال يحتوي على شيء مثل host1.nyc3.example.com، استبدله بـ FQDN لخادمك الخاص.

لنبدأ بتثبيت BIND على خادمي DNS الأساسي والثانوي، ns1 و ns2.

الخطوة 1 – تثبيت BIND على خوادم DNS

على كلا خوادم DNS، ns1 و ns2، قم بتحديث ذاكرة التخزين المؤقتة لحزمة apt عن طريق كتابة:

  1. sudo apt update

ثم قم بتثبيت BIND على كل جهاز:

  1. sudo apt install bind9 bind9utils bind9-doc

تستخدم شبكة DigitalOcean الخاصة IPv4 حصريًا. إذا كان هذا هو الحال بالنسبة لك، قم بتعيين BIND لوضع IPv4. على كلا الخادمين، قم بتحرير ملف إعدادات BIND الافتراضي باستخدام محرر النص المفضل لديك. يستخدم المثال التالي nano:

  1. sudo nano /etc/default/named

أضف -4 إلى نهاية معلمة OPTIONS:

/etc/default/named
. . .
OPTIONS="-u bind -4"

احفظ وأغلق الملف عند الانتهاء. إذا استخدمت nano لتحرير الملف، يمكنك القيام بذلك عن طريق الضغط على CTRL + X ثم Y ثم ENTER.

أعد تشغيل BIND لتنفيذ التغييرات:

  1. sudo systemctl restart bind9

الآن بعد تثبيت BIND، دعنا نقوم بتكوين خادم DNS الأساسي.

الخطوة 2 – تكوين خادم DNS الأساسي

تتكون تكوينات BIND من ملفات متعددة تتم إدراجها من الملف التكوين الرئيسي named.conf. تبدأ أسماء هذه الملفات بـ named لأن هذا هو اسم العملية التي يعمل بها BIND (حيث يعتبر named اختصارًا لـ “اسم الخدمة الأساسية للنطاقات”، أي “name daemon”). سنبدأ بتكوين ملف named.conf.options.

تكوين ملف الخيارات

على ns1، افتح ملف named.conf.options للتحرير:

  1. sudo nano /etc/bind/named.conf.options

فوق الكود الموجود لـ options ، أنشئ كود ACL (قائمة تحكم في الوصول) جديدة تسمى trusted. هنا ستقوم بتعريف قائمة بالعملاء الذين ستسمح لهم بالاستعلامات القواميسية المتكررة (أي الخوادم الخاصة بك التي توجد في نفس مركز البيانات كـ ns1). أضف الأسطر التالية لإضافة ns1 ، ns2 ، host1 ، و host2 إلى قائمة العملاء الموثوق بهم ، مع التأكد من استبدال عناوين IP الخاصة المثالية بتلك الخاصة بالخوادم الخاصة بك:

/etc/bind/named.conf.options — 1 of 3
acl "trusted" {
        10.128.10.11;    # ns1 
        10.128.20.12;    # ns2
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

الآن بعد أن لديك قائمة العملاء الموثوق بهم ، يمكنك تحرير كود options. يظهر هنا بداية الكود:

/etc/bind/named.conf.options — 2 of 3
        . . .
};

options {
        directory "/var/cache/bind";
        . . .
}

أضف بعد التوجيهة directory الأسطر المحددة (واستبدل عنوان IP الخاص بـ ns1 بالمناسب):

/etc/bind/named.conf.options — 3 of 3
        . . .

};

options {
        directory "/var/cache/bind";
        
        recursion yes;                 # enables recursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" clients
        listen-on { 10.128.10.11; };   # ns1 private IP address - listen on private network only
        allow-transfer { none; };      # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

        . . .
};

لاحظ كود forwarders ، الذي يشتمل على عنواني IP: 8.8.8.8 و 8.8.4.4. يقوم هذا الكود بتعريف forwarders ، وهو آلية خاصة يستخدمها BIND لتقليل حركة المرور عبر الروابط إلى خوادم الأسماء الخارجية. يمكن أيضًا لـ BIND استخدام forwarders للسماح بالاستعلامات من قبل الخوادم التي ليس لديها وصول مباشر إلى الإنترنت. يمكن أن يساعد هذا في تسريع الاستجابات لهذه الاستعلامات عن طريق تقليل الحمل على الشبكة المحلية.

يمثل العنوانين IP في هذا الكود حلقات DNS العامة لـ Google ، ولكن عنوان IP لأي خادم أسماء تكراري عام يمكن استخدامه هنا. على سبيل المثال ، يمكنك استخدام عنوان IP لخادم DNS الخاص بـ Cloudflare (1.1.1.1) بدلاً من ذلك.

عند الانتهاء، قم بحفظ وإغلاق ملف named.conf.options. تُحدد الاعدادات أعلاه أنه سيتمكن فقط الخوادم الخاصة بك (الموثوقة) من الاستعلام عن خوادم DNS الخاصة بك للنطاقات الخارجية.

بعد ذلك، ستقوم بتحديد مناطق DNS الخاصة بك عن طريق تكوين ملف named.conf.local.

تكوين الملف المحلي

على ns1، قم بفتح ملف named.conf.local للتحرير:

  1. sudo nano /etc/bind/named.conf.local

بصرف النظر عن بعض التعليقات، سيكون الملف فارغًا. هنا، ستحدد مناطق الإعادة والتوجيه الخاصة بك. تُعين مناطق DNS نطاقًا محددًا لإدارة وتعريف سجلات DNS. نظرًا لأن نطاقات المثال في هذا الدليل ستكون جميعها ضمن نطاق الفرع الفرعي nyc3.example.com، سنستخدم ذلك كمنطقة التوجيه الأمامي. ونظرًا لأن عناوين IP الخاصة لخوادم المثال تكون في نطاق 10.128.0.0/16، ستقوم الأمثلة التالية بإعداد منطقة إعادة لكي نتمكن من تعريف البحث المعكوس ضمن هذا النطاق.

أضف منطقة التوجيه الأمامي بالأسطر التالية، مستبدلاً اسم المنطقة بالخاص بك وعنوان IP الخادم الثانوي لـ DNS في توجيه allow-transfer:

/etc/bind/named.conf.local — 1 of 2
. . .

zone "nyc3.example.com" {
    type primary;
    file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
    allow-transfer { 10.128.20.12; };           # ns2 private IP address - secondary
};

بافتراض أن الشبكة الفرعية الخاصة بنا هي 10.128.0.0/16، أضف منطقة الإعادة بالأسطر التالية (لاحظ أن اسم منطقة الإعادة لدينا يبدأ بـ 128.10 وهو عكس الثمانيات لـ 10.128):

/etc/bind/named.conf.local — 2 of 2
    . . .
};

zone "128.10.in-addr.arpa" {
    type primary;
    file "/etc/bind/zones/db.10.128";  # 10.128.0.0/16 subnet
    allow-transfer { 10.128.20.12; };  # ns2 private IP address - secondary
};

إذا كانت خوادمك تمتد عبر العديد من الشبكات الفرعية الخاصة ولكنها في نفس مركز البيانات، تأكد من تحديد منطقة إضافية وملف منطقة لكل شبكة فرعية متميزة. عند الانتهاء من إضافة جميع المناطق المطلوبة، قم بحفظ وإغلاق ملف “named.conf.local”.

الآن بعد أن تم تحديد المناطق في BIND، تحتاج إلى إنشاء ملفات المناطق الأمامية والعكسية المقابلة.

إنشاء ملف المنطقة الأمامية

ملف المنطقة الأمامية هو المكان الذي تعرف فيه سجلات DNS لعمليات البحث الأمامية في DNS. يعني ذلك أنه عندما يتلقى DNS استعلامًا بالاسم، مثل “host1.nyc3.example.com” على سبيل المثال، سيبحث في ملف المنطقة الأمامية لحل عنوان IP الخاص بـ “host1” المقابل.

قم بإنشاء الدليل الذي ستقم فيه بحفظ ملفات المناطق الخاصة بك. ووفقًا لتكوين “named.conf.local”، يجب أن يكون الموقع هو “/etc/bind/zones”:

  1. sudo mkdir /etc/bind/zones

سنستند في مثالنا على ملف المنطقة الأمامية “db.local” العينة. قم بنسخه إلى الموقع المناسب باستخدام الأوامر التالية:

  1. sudo cp /etc/bind/db.local /etc/bind/zones/db.nyc3.example.com

قم الآن بتحرير ملف المنطقة الأمامية الخاص بك:

  1. sudo nano /etc/bind/zones/db.nyc3.example.com

في البداية، سيحتوي على محتوى مشابه للمثال التالي:

/etc/bind/zones/db.nyc3.example.com — original
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
@       IN      A       127.0.0.1       ; delete this line
@       IN      AAAA    ::1             ; delete this line

أولاً ، سترغب في تحرير سجل SOA. استبدل الكود الأول localhost بـ ns1 FQDN ، ثم استبدل root.localhost بـ admin.nyc3.example.com. في كل مرة تقوم فيها بتحرير ملف المنطقة ، يجب عليك زيادة قيمة Serial قبل إعادة تشغيل عملية named. هنا ، قم بزيادته إلى 3:

/etc/bind/zones/db.nyc3.example.com — updated 1 of 3
. . .
;
$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

بعد ذلك ، احذف السجلات الثلاثة في نهاية الملف (بعد سجل SOA). إذا لم تكن متأكدًا من أي خطوط يجب حذفها ، فهي مميزة بتعليقات تحتوي على الكود delete this line في المثال السابق.

في نهاية الملف ، أضف سجلات خادم الأسماء الخاصة بك باستخدام الأسطر التالية (استبدل الأسماء بأسمائك الخاصة). يجب ملاحظة أن العمود الثاني يحدد أن هذه هي سجلات NS:

/etc/bind/zones/db.nyc3.example.com — updated 2 of 3
. . .

; name servers - NS records
    IN      NS      ns1.nyc3.example.com.
    IN      NS      ns2.nyc3.example.com.

الآن ، أضف سجلات A للخوادم الخاصة بك التي تنتمي إلى هذه المنطقة. ويشمل ذلك أي خادم ترغب في انتهاء اسمه بـ .nyc3.example.com (استبدل الأسماء وعناوين IP الخاصة). باستخدام أسماءنا وعناوين IP الخاصة المذكورة في المثال ، سنضيف سجلات A لـ ns1 ، ns2 ، host1 ، و host2 على النحو التالي:

/etc/bind/zones/db.nyc3.example.com — updated 3 of 3
. . .

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

سيحتوي ملف المنطقة الأمامي النهائي لدينا على المحتوى التالي:

/etc/bind/zones/db.nyc3.example.com — updated
$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                  3     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
; name servers - NS records
     IN      NS      ns1.nyc3.example.com.
     IN      NS      ns2.nyc3.example.com.

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

احفظ وأغلق ملف db.nyc3.example.com.

الآن لننتقل إلى ملف (أو ملفات) المنطقة العكسية.

إنشاء ملفات المنطقة العكسية

ملفات منطقة العكس هي الملفات التي تحدد سجلات DNS PTR لعمليات البحث العكسي في DNS. أي أنه عندما يستلم DNS استعلامًا بواسطة عنوان IP، مثل 10.128.100.101 على سبيل المثال، سيبحث في ملفات منطقة العكس لحل الاسم النطاقي الكامل المقابل، مثل host1.nyc3.example.com في هذه الحالة.

على ns1، قم بإنشاء ملف منطقة عكس لكل منطقة عكس محددة في ملف named.conf.local. سنستند في مثالنا إلى ملف منطقة عكس مثالي db.127. يستخدم BIND هذا الملف لتخزين المعلومات لواجهة الحلقة المحلية؛ 127 هو أول أوكتيت من عنوان IP الذي يمثل localhost (127.0.0.1). قم بنسخ هذا الملف إلى الموقع الصحيح باستخدام الأوامر التالية (استبدل اسم الملف النهائي بحسب تعريف منطقة العكس الخاصة بك):

  1. sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128

قم بتحرير ملف منطقة العكس الذي يتوافق مع مناطق العكس المحددة في named.conf.local:

  1. sudo nano /etc/bind/zones/db.10.128

في البداية، سيحتوي الملف على محتوى مشابه للمثال التالي:

/etc/bind/zones/db.10.128 — original
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
1.0.0   IN      PTR     localhost.      ; delete this line

على نفس النحو الذي تم فيه تحرير ملف المنطقة الأمامية، سترغب في تحرير سجل SOA وزيادة قيمة الرقم المتسلسل:

/etc/bind/zones/db.10.128 — updated 1 of 3
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

ثم قم بحذف السجلين في نهاية الملف (بعد سجل SOA). إذا لم تكن متأكدًا من الأسطر التي يجب حذفها، فهي مشار إليها بتعليق حذف هذه السطر في المثال السابق.

في نهاية الملف، أضف سجلات خادم الأسماء الخاصة بك بواسطة الأسطر التالية (استبدل الأسماء بالأسماء الخاصة بك). يجب ملاحظة أن العمود الثاني يحدد أن هذه سجلات NS:

/etc/bind/zones/db.10.128 — updated 2 of 3
. . .

; name servers - NS records
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

ثم أضف سجلات PTR لجميع الخوادم التي تحمل عناوين IP على نفس الشبكة الفرعية لملف المنطقة الذي تقوم بتحريره. في مثالنا، يتضمن ذلك جميع مضيفينا لأنهم جميعًا على الشبكة الفرعية 10.128.0.0/16. لاحظ أن العمود الأول يتكون من آخري أربعة أرقام من عناوين IP الخاصة للخوادم في ترتيب عكسي. تأكد من استبدال الأسماء والعناوين الخاصة بالخوادم لتتناسب مع خوادمك:

/etc/bind/zones/db.10.128 — updated 3 of 3
. . .

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

ملف المنطقة الفرعية النهائي الخاص بك سيكون مشابهًا للمثال التالي:

/etc/bind/zones/db.10.128 — updated
$TTL    604800
@       IN      SOA     nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

احفظ وأغلق ملف المنطقة الفرعية الخاص بك. إذا كنت بحاجة إلى إضافة ملفات مناطق فرعية أخرى، كرر هذا القسم.

لقد انتهيت من تحرير ملفاتك، لذا يمكنك الآن التحقق من وجود أخطاء في ملفاتك.

فحص صيغة تكوين BIND

قم بتشغيل الأمر التالي للتحقق من صيغة ملفات named.conf*:

  1. sudo named-checkconf

إذا لم تكن لديك أخطاء في صيغة ملفات التكوين الخاصة بك، فلن يظهر أي رسائل خطأ وستعود إلى سطر الأوامر. إذا كانت هناك مشاكل في ملفات التكوين الخاصة بك، قم بمراجعة رسالة الخطأ وقسم تكوين خادم DNS الأساسي، ثم حاول استخدام named-checkconf مرة أخرى.

يمكن استخدام أمر named-checkzone للتحقق من صحة ملفات المنطقة الخاصة بك. الوسيطة الأولى تحدد اسم المنطقة، والوسيطة الثانية تحدد ملف المنطقة المقابل، والتي تم تعريفهما في named.conf.local.

على سبيل المثال، للتحقق من تكوين منطقة إعادة التوجيه الأمامية لـ nyc3.example.com، قم بتشغيل الأمر التالي (قم بتغيير الأسماء لتتوافق مع منطقة الإعادة التوجيه الأمامية والملف الخاص بك):

  1. sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
Output
zone nyc3.example.com/IN: loaded serial 3 OK

و للتحقق من تكوين منطقة إعادة التوجيه العكسية لـ 128.10.in-addr.arpa، قم بتشغيل الأمر التالي (قم بتغيير الأرقام لتتوافق مع منطقة الإعادة التوجيه العكسية والملف الخاص بك):

  1. sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

عندما لا تحتوي جميع تكويناتك وملفات المنطقة على أخطاء، ستكون مستعدًا لإعادة تشغيل خدمة BIND.

إعادة تشغيل BIND

أعد تشغيل BIND:

  1. sudo systemctl restart bind9

إذا كنت قد قمت بتكوين جدار الحماية UFW ، فافتح الوصول إلى BIND عن طريق كتابة:

  1. sudo ufw allow Bind9

الآن تم إعداد خادم DNS الأساسي وجاهز للرد على استفسارات DNS. لننتقل إلى تكوين خادم DNS الثانوي.

الخطوة 3 – تكوين خادم DNS الثانوي

في معظم البيئات ، من الجيد إعداد خادم DNS ثانوي سيستجيب للطلبات إذا كان الخادم الأساسي غير متوفر. لحسن الحظ ، تكوين خادم DNS الثانوي أقل تعقيدًا بكثير من إعداد الخادم الأساسي.

على ns2 ، قم بتحرير ملف named.conf.options:

  1. sudo nano /etc/bind/named.conf.options

في أعلى الملف ، أضف ACL بعناوين IP الخاصة لجميع الخوادم الموثوق بها:

/etc/bind/named.conf.options — updated 1 of 2 (secondary)
acl "trusted" {
        10.128.10.11;   # ns1
        10.128.20.12;   # ns2 
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

أسفل التوجيه directory ، أضف الأسطر التالية:

/etc/bind/named.conf.options — updated 2 of 2 (secondary)
    . . .

        recursion yes;
        allow-recursion { trusted; };
        listen-on { 10.128.20.12; };      # ns2 private IP address
        allow-transfer { none; };          # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

    . . .

احفظ وأغلق ملف named.conf.options. يجب أن يكون هذا الملف مطابقًا لملف named.conf.options في ns1 باستثناء أنه يجب تكوينه للاستماع إلى عنوان IP الخاص بـ ns2.

الآن قم بتحرير ملف named.conf.local:

  1. sudo nano /etc/bind/named.conf.local

حدد المناطق الثانوية التي تتوافق مع المناطق الأساسية على الخادم الأساسي لـ DNS. لاحظ أن النوع هو secondary ، والملف لا يحتوي على مسار ، وهناك توجيه primaries يجب تعيينه إلى عنوان IP الخاص للخادم الأساسي لـ DNS. إذا قمت بتعريف عدة مناطق عكسية في خادم DNS الأساسي ، تأكد من إضافتها جميعًا هنا:

/etc/bind/named.conf.local — updated (secondary)
zone "nyc3.example.com" {
    type secondary;
    file "db.nyc3.example.com";
    primaries { 10.128.10.11; };  # ns1 private IP
};

zone "128.10.in-addr.arpa" {
    type secondary;
    file "db.10.128";
    primaries { 10.128.10.11; };  # ns1 private IP
};

احفظ وأغلق ملف named.conf.local.

قم بتشغيل الأمر التالي للتحقق من صحة ملفات التكوين الخاصة بك:

  1. sudo named-checkconf

إذا لم يعود هذا الأمر بأي أخطاء ، أعد تشغيل BIND:

  1. sudo systemctl restart bind9

ثم قم بالسماح باتصالات DNS بالخادم عن طريق تعديل قواعد جدار الحماية UFW:

  1. sudo ufw allow Bind9

مع ذلك ، لديك الآن خوادم DNS الأساسية والثانوية لحل اسم الشبكة الخاصة وعناوين IP. الآن يجب عليك تكوين خوادم العميل الخاصة بك لاستخدام خوادم DNS الخاصة بك.

الخطوة 4 – تكوين عملاء DNS

قبل أن يتمكن كل من خوادمك في ACL “الموثوقة” من الاستعلام عن خوادم DNS الخاصة بك ، يجب أن تقوم بتكوين كل منها لاستخدام ns1 و ns2 كخوادم اسم.

في افتراض أن خوادم العميل الخاصة بك تعمل بنظام Ubuntu ، ستحتاج إلى معرفة الجهاز المرتبط بالشبكة الخاصة الخاصة بك. يمكنك القيام بذلك عن طريق استعلام الشبكة الفرعية الخاصة باستخدام أمر “ip address”. قم بتشغيل الأمر التالي على كل من أجهزة العميل الخاصة بك ، مستبدلاً الشبكة الفرعية المميزة بالخاصة بك:

  1. ip address show to 10.128.0.0/16
Output
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 altname enp0s4 altname ens4 inet 10.128.100.101/16 brd 10.128.255.255 scope global eth1 valid_lft forever preferred_lft forever

في هذا المثال ، الواجهة الخاصة هي eth1. ستشير الأمثلة في هذا القسم إلى eth1 كواجهة خاصة ، ولكن يجب عليك تغيير هذه الأمثلة لتعكس واجهات خوادمك الخاصة الخاصة.

في Ubuntu 22.04 ، يتم تكوين الشبكة باستخدام Netplan ، وهو تجريد يتيح لك كتابة تكوين الشبكة الموحد وتطبيقه على برامج الشبكة الخلفية المتوافقة. لتكوين DNS ، تحتاج إلى كتابة ملف تكوين Netplan جديد.

أنشئ ملفًا جديدًا في /etc/netplan بالاسم 00-private-nameservers.yaml:

  1. sudo nano /etc/netplan/00-private-nameservers.yaml

قم بإضافة المحتويات التالية. ستحتاج إلى تعديل واجهة الشبكة الخاصة وعناوين خوادم DNS الخاصة بك ns1 و ns2 ومنطقة DNS:

ملاحظة: يستخدم Netplan تنسيق بيانات YAML لملفات التكوين الخاصة به. بسبب استخدام YAML للمسافة والتباعد لتحديد هيكل بياناتها ، تأكد من أن التعريف الخاص بك يستخدم مسافات متساوية لتجنب الأخطاء.

يمكنك حل مشكلة ملف YAML الخاص بك باستخدام أداة فحص YAML مثل YAML Lint.

/etc/netplan 00-private-nameservers.yaml
network:
    version: 2
    ethernets:
        eth1:                                    # Private network interface
            nameservers:
                addresses:
                - 10.128.10.11                # Private IP for ns1
                - 10.132.20.12                # Private IP for ns2
                search: [ nyc3.example.com ]    # DNS zone

احفظ وأغلق الملف عند الانتهاء.

بعد ذلك ، قم بإخبار Netplan بمحاولة استخدام ملف التكوين الجديد باستخدام netplan try. إذا كانت هناك مشاكل تؤدي إلى فقدان الشبكة ، ستقوم Netplan تلقائيًا بالتراجع عن التغييرات بعد انتهاء الوقت المحدد:

  1. sudo netplan try
Output
Warning: Stopping systemd-networkd.service, but it can still be activated by: systemd-networkd.socket Do you want to keep these settings? Press ENTER before the timeout to accept the new configuration Changes will revert in 120 seconds

إذا كانت عملية العد التنازلي تحدث بشكل صحيح في الأسفل ، فإن التكوين الجديد على الأقل يعمل بما فيه الكفاية لعدم كسر اتصال SSH الخاص بك. اضغط على ENTER لقبول التكوين الجديد.

الآن ، تحقق من حلالة محول النظام لمعرفة ما إذا تم تطبيق تكوين DNS الخاص بك:

  1. sudo resolvectl status

قم بالتمرير لأسفل حتى تجد القسم الخاص بواجهة الشبكة الخاصة بك. يجب أن تكون عناوين IP الخاصة بخوادم DNS الخاصة بك مدرجة أولاً ، تليها بعض القيم البديلة. يجب أن يكون اسم النطاق الخاص بك مدرجًا بعد DNS Domain:

Output
. . . Link 3 (eth1) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 67.207.67.3 DNS Servers: 10.128.10.11 10.128.20.12 67.207.67.3 67.207.67.2 DNS Domain: nyc3.example.com

تم تكوين عميل Ubuntu الخاص بك الآن لاستخدام خوادم DNS الداخلية الخاصة بك.

الخطوة 5 – اختبار العملاء

استخدم nslookup لاختبار قدرة عملاءك على استعلام خوادم الأسماء الخاصة بك. يجب أن تكون قادرًا على القيام بذلك على جميع العملاء الذين قمت بتكوينهم والذين هم في ACL الموثوق بها trusted.

يمكنك البدء بتنفيذ استعلام إعادة التوجيه.

إعادة التوجيه

لتنفيذ استعلام إعادة التوجيه لاسترداد عنوان IP لـ host1.nyc3.example.com، قم بتشغيل الأمر التالي:

  1. nslookup host1

يتم توسيع الاستعلام عن host1 إلى host1.nyc3.example.com لأن الخيار search مضبوط على النطاق الفرعي الخاص بك، وسيحاول استعلام DNS البحث في ذلك النطاق الفرعي قبل البحث عن الخادم في أماكن أخرى. سيعيد الأمر السابق نتائج مشابهة للتالية:

Output
Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: host1.nyc3.example.com Address: 10.128.100.101

بعد ذلك، يمكنك التحقق من عمليات البحث العكسي.

البحث العكسي

لاختبار البحث العكسي، استعلم عن خادم DNS باستخدام عنوان IP الخاص بـ host1:

  1. nslookup 10.128.100.101

يجب أن يعيد ذلك نتائج مشابهة للتالية:

Output
11.10.128.10.in-addr.arpa name = host1.nyc3.example.com. Authoritative answers can be found from:

إذا تم حل جميع الأسماء وعناوين IP للقيم الصحيحة، فذلك يعني أن ملفات المنطقة الخاصة بك مكونة بشكل صحيح. إذا حصلت على قيم غير متوقعة، تأكد من مراجعة ملفات المنطقة على خادم DNS الأساسي الخاص بك (على سبيل المثال: db.nyc3.example.com و db.10.128).

كخطوة نهائية، ستقوم هذه الدروس التعليمية بشرح كيفية الحفاظ على سجلات منطقة DNS الخاصة بك.

الخطوة 6 — الحفاظ على سجلات DNS

الآن بعد أن لديك نظام DNS الداخلي العامل، تحتاج إلى الاحتفاظ بسجلات DNS الخاصة بك بحيث تعكس بدقة بيئة الخادم الخاص بك.

إضافة مضيف إلى DNS

عندما تقوم بإضافة مضيف إلى بيئتك (في نفس مركز البيانات)، سترغب في إضافته إلى DNS. فيما يلي قائمة بالخطوات التي تحتاج إلى اتخاذها:

خادم الأسماء الرئيسي

  • ملف المنطقة الأمامية: أضف سجل A للمضيف الجديد، وزد قيمة Serial
  • ملف المنطقة العكسية: أضف سجل PTR للمضيف الجديد، وزد قيمة Serial
  • أضف عنوان IP الخاص بالمضيف الجديد إلى مجموعة الوصول الموثوق trusted (named.conf.options)

اختبر ملفات التكوين الخاصة بك:

  1. sudo named-checkconf
  2. sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
  3. sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

ثم قم بإعادة تحميل BIND:

  1. sudo systemctl reload bind9

يجب أن يتم تكوين الخادم الأساسي الخاص بك للمضيف الجديد الآن.

خادم اسم ثانوي

  • أضف عنوان IP الخاص بالمضيف الجديد إلى ACL الموثوق بها (named.conf.options)

تحقق من صحة تركيبة التكوين:

  1. sudo named-checkconf

ثم قم بإعادة تحميل BIND:

  1. sudo systemctl reload bind9

سيقبل الخادم الثانوي الآن اتصالات من المضيف الجديد.

قم بتكوين المضيف الجديد لاستخدام خوادم DNS الخاصة بك.

  • قم بتكوين /etc/resolv.conf لاستخدام خوادم DNS الخاصة بك.
  • اختبر باستخدام nslookup

إزالة مضيف من DNS

إذا قمت بإزالة مضيف من بيئتك أو ترغب في إزالته فقط من DNS، قم بإزالة جميع الأشياء التي تمت إضافتها عند إضافة الخادم إلى DNS (أي الخطوات السابقة بالعكس).

استنتاج

الآن يمكنك الإشارة إلى واجهات الشبكة الخاصة بالخوادم الخاصة بك باستخدام الاسم بدلاً من عنوان IP. يجعل ذلك تكوين الخدمات والتطبيقات أكثر سهولة لأنه لم يعد عليك تذكر عناوين IP الخاصة، وستكون الملفات أقل صعوبة في القراءة والفهم. بالإضافة إلى ذلك، يمكنك الآن تغيير تكويناتك للإشارة إلى خادم جديد في مكان واحد فقط، وهو خادم DNS الأساسي الخاص بك، بدلاً من الاضطرار إلى تحرير مجموعة متنوعة من ملفات التكوين الموزعة، مما يحسن الصيانة.

بمجرد إعداد DNS الداخلي الخاص بك، واستخدام ملفات التكوين الخاصة بك أسماء كاملة لتحديد اتصالات الشبكة، من الضروري بشكل حاسم أن يتم صيانة خوادم DNS بشكل صحيح. إذا أصبحت الخوادم غير متوفرة، ستتوقف الخدمات والتطبيقات التي تعتمد عليها عن العمل بشكل صحيح. ولهذا السبب، يُوصى بإعداد DNS الخاص بك مع خادم ثانوي على الأقل، والحفاظ على نسخ احتياطية لجميع الخوادم.

إذا كنت ترغب في معرفة المزيد عن DNS، نشجعك على قراءة مقالنا مقدمة في مصطلحات DNS ومكوناته ومفاهيمه.

Source:
https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-ubuntu-22-04