مقدمة
جزء مهم من إدارة تكوين الخادم والبنية التحتية ينطوي على الحفاظ على طريقة للعثور على واجهات الشبكة وعناوين 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
عن طريق كتابة:
- sudo apt update
ثم قم بتثبيت BIND على كل جهاز:
- sudo apt install bind9 bind9utils bind9-doc
تستخدم شبكة DigitalOcean الخاصة IPv4 حصريًا. إذا كان هذا هو الحال بالنسبة لك، قم بتعيين BIND لوضع IPv4. على كلا الخادمين، قم بتحرير ملف إعدادات BIND الافتراضي باستخدام محرر النص المفضل لديك. يستخدم المثال التالي nano
:
- sudo nano /etc/default/named
أضف -4
إلى نهاية معلمة OPTIONS
:
. . .
OPTIONS="-u bind -4"
احفظ وأغلق الملف عند الانتهاء. إذا استخدمت nano
لتحرير الملف، يمكنك القيام بذلك عن طريق الضغط على CTRL + X
ثم Y
ثم ENTER
.
أعد تشغيل BIND لتنفيذ التغييرات:
- sudo systemctl restart bind9
الآن بعد تثبيت BIND، دعنا نقوم بتكوين خادم DNS الأساسي.
الخطوة 2 – تكوين خادم DNS الأساسي
تتكون تكوينات BIND من ملفات متعددة تتم إدراجها من الملف التكوين الرئيسي named.conf
. تبدأ أسماء هذه الملفات بـ named
لأن هذا هو اسم العملية التي يعمل بها BIND (حيث يعتبر named
اختصارًا لـ “اسم الخدمة الأساسية للنطاقات”، أي “name daemon”). سنبدأ بتكوين ملف named.conf.options
.
تكوين ملف الخيارات
على ns1، افتح ملف named.conf.options
للتحرير:
- sudo nano /etc/bind/named.conf.options
فوق الكود الموجود لـ options
، أنشئ كود ACL (قائمة تحكم في الوصول) جديدة تسمى trusted
. هنا ستقوم بتعريف قائمة بالعملاء الذين ستسمح لهم بالاستعلامات القواميسية المتكررة (أي الخوادم الخاصة بك التي توجد في نفس مركز البيانات كـ ns1). أضف الأسطر التالية لإضافة ns1 ، ns2 ، host1 ، و host2 إلى قائمة العملاء الموثوق بهم ، مع التأكد من استبدال عناوين IP الخاصة المثالية بتلك الخاصة بالخوادم الخاصة بك:
acl "trusted" {
10.128.10.11; # ns1
10.128.20.12; # ns2
10.128.100.101; # host1
10.128.200.102; # host2
};
options {
. . .
الآن بعد أن لديك قائمة العملاء الموثوق بهم ، يمكنك تحرير كود options
. يظهر هنا بداية الكود:
. . .
};
options {
directory "/var/cache/bind";
. . .
}
أضف بعد التوجيهة directory
الأسطر المحددة (واستبدل عنوان IP الخاص بـ ns1 بالمناسب):
. . .
};
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
للتحرير:
- sudo nano /etc/bind/named.conf.local
بصرف النظر عن بعض التعليقات، سيكون الملف فارغًا. هنا، ستحدد مناطق الإعادة والتوجيه الخاصة بك. تُعين مناطق DNS نطاقًا محددًا لإدارة وتعريف سجلات DNS. نظرًا لأن نطاقات المثال في هذا الدليل ستكون جميعها ضمن نطاق الفرع الفرعي nyc3.example.com
، سنستخدم ذلك كمنطقة التوجيه الأمامي. ونظرًا لأن عناوين IP الخاصة لخوادم المثال تكون في نطاق 10.128.0.0/16
، ستقوم الأمثلة التالية بإعداد منطقة إعادة لكي نتمكن من تعريف البحث المعكوس ضمن هذا النطاق.
أضف منطقة التوجيه الأمامي بالأسطر التالية، مستبدلاً اسم المنطقة بالخاص بك وعنوان IP الخادم الثانوي لـ DNS في توجيه allow-transfer
:
. . .
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
):
. . .
};
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”:
- sudo mkdir /etc/bind/zones
سنستند في مثالنا على ملف المنطقة الأمامية “db.local” العينة. قم بنسخه إلى الموقع المناسب باستخدام الأوامر التالية:
- sudo cp /etc/bind/db.local /etc/bind/zones/db.nyc3.example.com
قم الآن بتحرير ملف المنطقة الأمامية الخاص بك:
- sudo nano /etc/bind/zones/db.nyc3.example.com
في البداية، سيحتوي على محتوى مشابه للمثال التالي:
$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
:
. . .
;
$TTL 604800
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
. . .
بعد ذلك ، احذف السجلات الثلاثة في نهاية الملف (بعد سجل SOA). إذا لم تكن متأكدًا من أي خطوط يجب حذفها ، فهي مميزة بتعليقات تحتوي على الكود delete this line
في المثال السابق.
في نهاية الملف ، أضف سجلات خادم الأسماء الخاصة بك باستخدام الأسطر التالية (استبدل الأسماء بأسمائك الخاصة). يجب ملاحظة أن العمود الثاني يحدد أن هذه هي سجلات NS
:
. . .
; 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 على النحو التالي:
. . .
; 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
سيحتوي ملف المنطقة الأمامي النهائي لدينا على المحتوى التالي:
$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
). قم بنسخ هذا الملف إلى الموقع الصحيح باستخدام الأوامر التالية (استبدل اسم الملف النهائي بحسب تعريف منطقة العكس الخاصة بك):
- sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128
قم بتحرير ملف منطقة العكس الذي يتوافق مع مناطق العكس المحددة في named.conf.local
:
- sudo nano /etc/bind/zones/db.10.128
في البداية، سيحتوي الملف على محتوى مشابه للمثال التالي:
$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 وزيادة قيمة الرقم المتسلسل:
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
. . .
ثم قم بحذف السجلين في نهاية الملف (بعد سجل SOA). إذا لم تكن متأكدًا من الأسطر التي يجب حذفها، فهي مشار إليها بتعليق حذف هذه السطر
في المثال السابق.
في نهاية الملف، أضف سجلات خادم الأسماء الخاصة بك بواسطة الأسطر التالية (استبدل الأسماء بالأسماء الخاصة بك). يجب ملاحظة أن العمود الثاني يحدد أن هذه سجلات NS
:
. . .
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
ثم أضف سجلات PTR
لجميع الخوادم التي تحمل عناوين IP على نفس الشبكة الفرعية لملف المنطقة الذي تقوم بتحريره. في مثالنا، يتضمن ذلك جميع مضيفينا لأنهم جميعًا على الشبكة الفرعية 10.128.0.0/16
. لاحظ أن العمود الأول يتكون من آخري أربعة أرقام من عناوين IP الخاصة للخوادم في ترتيب عكسي. تأكد من استبدال الأسماء والعناوين الخاصة بالخوادم لتتناسب مع خوادمك:
. . .
; 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
ملف المنطقة الفرعية النهائي الخاص بك سيكون مشابهًا للمثال التالي:
$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*
:
- sudo named-checkconf
إذا لم تكن لديك أخطاء في صيغة ملفات التكوين الخاصة بك، فلن يظهر أي رسائل خطأ وستعود إلى سطر الأوامر. إذا كانت هناك مشاكل في ملفات التكوين الخاصة بك، قم بمراجعة رسالة الخطأ وقسم تكوين خادم DNS الأساسي
، ثم حاول استخدام named-checkconf
مرة أخرى.
يمكن استخدام أمر named-checkzone
للتحقق من صحة ملفات المنطقة الخاصة بك. الوسيطة الأولى تحدد اسم المنطقة، والوسيطة الثانية تحدد ملف المنطقة المقابل، والتي تم تعريفهما في named.conf.local
.
على سبيل المثال، للتحقق من تكوين منطقة إعادة التوجيه الأمامية لـ nyc3.example.com
، قم بتشغيل الأمر التالي (قم بتغيير الأسماء لتتوافق مع منطقة الإعادة التوجيه الأمامية والملف الخاص بك):
- sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
Outputzone nyc3.example.com/IN: loaded serial 3
OK
و للتحقق من تكوين منطقة إعادة التوجيه العكسية لـ 128.10.in-addr.arpa
، قم بتشغيل الأمر التالي (قم بتغيير الأرقام لتتوافق مع منطقة الإعادة التوجيه العكسية والملف الخاص بك):
- sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128
عندما لا تحتوي جميع تكويناتك وملفات المنطقة على أخطاء، ستكون مستعدًا لإعادة تشغيل خدمة BIND.
إعادة تشغيل BIND
أعد تشغيل BIND:
- sudo systemctl restart bind9
إذا كنت قد قمت بتكوين جدار الحماية UFW ، فافتح الوصول إلى BIND عن طريق كتابة:
- sudo ufw allow Bind9
الآن تم إعداد خادم DNS الأساسي وجاهز للرد على استفسارات DNS. لننتقل إلى تكوين خادم DNS الثانوي.
الخطوة 3 – تكوين خادم DNS الثانوي
في معظم البيئات ، من الجيد إعداد خادم DNS ثانوي سيستجيب للطلبات إذا كان الخادم الأساسي غير متوفر. لحسن الحظ ، تكوين خادم DNS الثانوي أقل تعقيدًا بكثير من إعداد الخادم الأساسي.
على ns2 ، قم بتحرير ملف named.conf.options
:
- sudo nano /etc/bind/named.conf.options
في أعلى الملف ، أضف ACL بعناوين IP الخاصة لجميع الخوادم الموثوق بها:
acl "trusted" {
10.128.10.11; # ns1
10.128.20.12; # ns2
10.128.100.101; # host1
10.128.200.102; # host2
};
options {
. . .
أسفل التوجيه directory
، أضف الأسطر التالية:
. . .
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
:
- sudo nano /etc/bind/named.conf.local
حدد المناطق الثانوية التي تتوافق مع المناطق الأساسية على الخادم الأساسي لـ DNS. لاحظ أن النوع هو secondary
، والملف لا يحتوي على مسار ، وهناك توجيه primaries
يجب تعيينه إلى عنوان IP الخاص للخادم الأساسي لـ DNS. إذا قمت بتعريف عدة مناطق عكسية في خادم DNS الأساسي ، تأكد من إضافتها جميعًا هنا:
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
.
قم بتشغيل الأمر التالي للتحقق من صحة ملفات التكوين الخاصة بك:
- sudo named-checkconf
إذا لم يعود هذا الأمر بأي أخطاء ، أعد تشغيل BIND:
- sudo systemctl restart bind9
ثم قم بالسماح باتصالات DNS بالخادم عن طريق تعديل قواعد جدار الحماية UFW:
- sudo ufw allow Bind9
مع ذلك ، لديك الآن خوادم DNS الأساسية والثانوية لحل اسم الشبكة الخاصة وعناوين IP. الآن يجب عليك تكوين خوادم العميل الخاصة بك لاستخدام خوادم DNS الخاصة بك.
الخطوة 4 – تكوين عملاء DNS
قبل أن يتمكن كل من خوادمك في ACL “الموثوقة” من الاستعلام عن خوادم DNS الخاصة بك ، يجب أن تقوم بتكوين كل منها لاستخدام ns1 و ns2 كخوادم اسم.
في افتراض أن خوادم العميل الخاصة بك تعمل بنظام Ubuntu ، ستحتاج إلى معرفة الجهاز المرتبط بالشبكة الخاصة الخاصة بك. يمكنك القيام بذلك عن طريق استعلام الشبكة الفرعية الخاصة باستخدام أمر “ip address”. قم بتشغيل الأمر التالي على كل من أجهزة العميل الخاصة بك ، مستبدلاً الشبكة الفرعية المميزة بالخاصة بك:
- ip address show to 10.128.0.0/16
Output3: 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
:
- sudo nano /etc/netplan/00-private-nameservers.yaml
قم بإضافة المحتويات التالية. ستحتاج إلى تعديل واجهة الشبكة الخاصة وعناوين خوادم DNS الخاصة بك ns1 و ns2 ومنطقة DNS:
ملاحظة: يستخدم Netplan تنسيق بيانات YAML لملفات التكوين الخاصة به. بسبب استخدام YAML للمسافة والتباعد لتحديد هيكل بياناتها ، تأكد من أن التعريف الخاص بك يستخدم مسافات متساوية لتجنب الأخطاء.
يمكنك حل مشكلة ملف YAML الخاص بك باستخدام أداة فحص YAML مثل YAML Lint.
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 تلقائيًا بالتراجع عن التغييرات بعد انتهاء الوقت المحدد:
- sudo netplan try
OutputWarning: 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 الخاص بك:
- 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
، قم بتشغيل الأمر التالي:
- nslookup host1
يتم توسيع الاستعلام عن host1
إلى host1.nyc3.example.com
لأن الخيار search
مضبوط على النطاق الفرعي الخاص بك، وسيحاول استعلام DNS البحث في ذلك النطاق الفرعي قبل البحث عن الخادم في أماكن أخرى. سيعيد الأمر السابق نتائج مشابهة للتالية:
OutputServer: 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:
- nslookup 10.128.100.101
يجب أن يعيد ذلك نتائج مشابهة للتالية:
Output11.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
)
اختبر ملفات التكوين الخاصة بك:
- sudo named-checkconf
- sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
- sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128
ثم قم بإعادة تحميل BIND:
- sudo systemctl reload bind9
يجب أن يتم تكوين الخادم الأساسي الخاص بك للمضيف الجديد الآن.
خادم اسم ثانوي
- أضف عنوان IP الخاص بالمضيف الجديد إلى ACL الموثوق بها (
named.conf.options
)
تحقق من صحة تركيبة التكوين:
- sudo named-checkconf
ثم قم بإعادة تحميل BIND:
- sudo systemctl reload bind9
سيقبل الخادم الثانوي الآن اتصالات من المضيف الجديد.
قم بتكوين المضيف الجديد لاستخدام خوادم DNS الخاصة بك.
- قم بتكوين
/etc/resolv.conf
لاستخدام خوادم DNS الخاصة بك. - اختبر باستخدام
nslookup
إزالة مضيف من DNS
إذا قمت بإزالة مضيف من بيئتك أو ترغب في إزالته فقط من DNS، قم بإزالة جميع الأشياء التي تمت إضافتها عند إضافة الخادم إلى DNS (أي الخطوات السابقة بالعكس).
استنتاج
الآن يمكنك الإشارة إلى واجهات الشبكة الخاصة بالخوادم الخاصة بك باستخدام الاسم بدلاً من عنوان IP. يجعل ذلك تكوين الخدمات والتطبيقات أكثر سهولة لأنه لم يعد عليك تذكر عناوين IP الخاصة، وستكون الملفات أقل صعوبة في القراءة والفهم. بالإضافة إلى ذلك، يمكنك الآن تغيير تكويناتك للإشارة إلى خادم جديد في مكان واحد فقط، وهو خادم DNS الأساسي الخاص بك، بدلاً من الاضطرار إلى تحرير مجموعة متنوعة من ملفات التكوين الموزعة، مما يحسن الصيانة.
بمجرد إعداد DNS الداخلي الخاص بك، واستخدام ملفات التكوين الخاصة بك أسماء كاملة لتحديد اتصالات الشبكة، من الضروري بشكل حاسم أن يتم صيانة خوادم DNS بشكل صحيح. إذا أصبحت الخوادم غير متوفرة، ستتوقف الخدمات والتطبيقات التي تعتمد عليها عن العمل بشكل صحيح. ولهذا السبب، يُوصى بإعداد DNS الخاص بك مع خادم ثانوي على الأقل، والحفاظ على نسخ احتياطية لجميع الخوادم.
إذا كنت ترغب في معرفة المزيد عن DNS، نشجعك على قراءة مقالنا مقدمة في مصطلحات DNS ومكوناته ومفاهيمه.