הקדמה
חלק חשוב מניהול התצורה של השרת והתשתיות הוא לשמור על דרך למצוא ממשקי רשת וכתובות 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
ולהגדיר חומת אש על ידי מעקב אחר המדריך שלנו להתקנת שרת התחלתי של אובונטו 22.04.
אם אינך מכיר את מושגי ה-DNS, אנו ממליצים שתקרא לפחות את שלושת החלקים הראשונים של מבוא לניהול DNS.
ב-DigitalOcean, כל ה-Droplets החדשים שנוצרים מוצבים בתוך רשת פרטית וירטואלית (VPC) כברירת מחדל. בדוק את תיעוד המוצר VPC שלנו כדי ללמוד עוד.
תשתית ומטרות דוגמה
לצורך המאמר הזה, נניח את הנתונים הבאים:
- יש לך שני שרתים המיועדים לשרתי שמות DNS שלך. מדריך זה יתייחס אליהם כ-ns1 ו-ns2.
- יש לך שני שרתי לקוח נוספים שישתמשו בתשתית DNS שתיצור, המתייחסים להם כ־host1 ו־host2 במדריך זה. תוכל להוסיף כמה שרתי לקוח שתרצה.
- כל השרתים הללו קיימים באותו מרכז נתונים. המדריך הזה מניח שהמרכז הנתונים הזה נקרא
nyc3
. - כל השרתים הללו מחוברים לרשת פרטית ונמצאים בתת־רשת
10.128.0.0/16
(תצטרך כנראה להתאים את זה עבור השרתים שלך). - כל השרתים מחוברים לפרויקט שרץ על
example.com
. מדריך זה מתאר איך להגדיר מערכת DNS פנימית ופרטית, כך שתוכל להשתמש בשם דומיין כלשהו שתרצה במקוםexample.com
. שרתי ה־DNS תמיד ינסו להפנות בקשות באופן פנימי תחילה, במובן שהם לא ינסו להגיע לדומיין הנתון באינטרנט הציבורי. עם זאת, שימוש בדומיין שבבעלותך עשוי לעזור למניעת קונפליקטים עם דומיינים ניתנים לניתוב באופן ציבורי.
עם הנחות אלו בדעת, הדוגמאות במדריך זה ישתמשו במערכת שמות המבוססת על התת־דומיין nyc3.example.com
להתייחס לתת־רשת או אזור הדוגמה. לכן, Fully-Qualified Domain Name (FQDN) הפרטי של 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. על שני השרתים, ערוך את קובץ ההגדרות ברירת המחדל של named
באמצעות עורך הטקסט המועדף עליך. בדוגמה הבאה נעשה שימוש ב־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
. זהו המקום בו תגדיר רשימת לקוחות שבהם תאפשר שאילתות DNS רקורסיביות (כלומר, השרתים שלך הנמצאים באותו מרכז נתונים כמו 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 של שרת DNS רקורסיבי ציבורי אחר (לדוגמא, ניתן להשתמש בכתובת ה־IP של שרת DNS של Cloudflare (1.1.1.1
) במקום).
כאשר אתה מסיים, שמור וסגור את קובץ named.conf.options
. התצורה למעלה מציינת כי רק שרתי ה-DNS שלך (הסומנים כ-"trusted") יכולים לשאול את שרת ה-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
First, תרצה לערוך את רשומת ה-SOA. החלף את ה-localhost
הראשון ב-ns1’s 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
לדוגמה, הוא יחפש בקובץ אזור הפוך(ים) כדי לפתור את ה-FQDN התואם, 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 ולהגדיל את ערך ה-serial:
@ 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.
הוסף רשומות PTR עבור כל השרתים שלך שכתובות ה-IP שלהם נמצאות בתת־רשת של קובץ האזור שאתה עורך. בדוגמה שלנו, זה כולל את כל המארחים שלנו מאחר וכולם נמצאים בתת־רשת 10.128.0.0/16
. שים לב שהעמודה הראשונה כוללת את שתי האוקטטים האחרונים של כתובת ה-IP הפרטית של השרתים שלך בסדר הפוך. וודא שאתה מחליף שמות וכתובות 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
אם לקבצי התצורה שלך ב־named אין שגיאות תחבורת, לא יהיו הודעות שגיאה ותחזור למסוף השלך. אם יש בעיות עם קבצי התצורה שלך, עיין בהודעת השגיאה ובסעיף הגדרת שרת 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 trusted
יכולים לשאול את שרתי ה-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 של המערכת כדי לקבוע האם הגדרת ה-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
כדי לבדוק אם הלקוחות שלך יכולים לשאול את שרתי השמות שלך. עליך להיות מסוגל לעשות זאת בכל הלקוחות שהגדרת ושהם ב־trusted
ACL.
ניתן להתחיל על ידי ביצוע חיפוש קדימה.
חיפוש קדימה
כדי לבצע חיפוש קדימה לקבלת כתובת ה־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
).
כשלבסוף, המדריך הזה יסביר כיצד לשמור על רשומות האזור שלך.
שלב 6 — שמירה על רשומות DNS
כעת שיש לך DNS פנימי פועל, יש לך צורך לשמור על רשומות ה-DNS שלך כך שישקפו בדיוק את הסביבה של השרת שלך.
הוספת מארח ל-DNS
כל פעם שאתה מוסיף מארח לסביבה שלך (באותו מרכז נתונים), יש להוסיף אותו ל-DNS. הנה רשימת השלבים שעליך לבצע:
שרת שם ראשי
- קובץ אזור קדמי: הוסף רשומת
A
עבור המארח החדש, הגבל את ערך ה-Serial
- קובץ אזור רוורס: הוסף רשומת
PTR
עבור המארח החדש, הגבל את ערך ה-Serial
- הוסף את כתובת ה-IP הפרטית של המארח החדש ל-ACL של
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 הפנימי שלך, והקבצים שלך משתמשים ב-FQDN פרטיים לציון של חיבורי הרשת, יש חשיבות מרבית לכך ששרתי ה-DNS יתוחזקו בצורה תקינה. אם שני השרתים מתעקשים לא להיות זמינים, השירותים והיישומים שלך שמתבססים עליהם יפסיקו לפעול בצורה תקינה. זה הסיבה לכך שמומלץ להקים את ה-DNS שלך עם לפחות שרת משנה אחד, ולשמור על גיבויים תקינים של כולם.
אם ברצונך ללמוד עוד על DNS, אנו ממליצים לך לבדוק את המאמר שלנו הקדמה למונחים, רכיבים ועקרונות של DNS.