איך להגדיר את 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 ולהגדיר חומת אש על ידי מעקב אחר המדריך שלנו להתקנת שרת התחלתי של אובונטו 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 על ידי להקליד:

  1. sudo apt update

אז התקן את BIND על כל מכונה:

  1. sudo apt install bind9 bind9utils bind9-doc

הרשת הפרטית של DigitalOcean משתמשת ב-IPv4 באופן בלעדי. אם זה המקרה גם עבורך, הגדר את BIND למצב IPv4. על שני השרתים, ערוך את קובץ ההגדרות ברירת המחדל של named באמצעות עורך הטקסט המועדף עליך. בדוגמה הבאה נעשה שימוש ב־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. זהו המקום בו תגדיר רשימת לקוחות שבהם תאפשר שאילתות DNS רקורסיביות (כלומר, השרתים שלך הנמצאים באותו מרכז נתונים כמו 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 של שרת DNS רקורסיבי ציבורי אחר (לדוגמא, ניתן להשתמש בכתובת ה־IP של שרת DNS של Cloudflare (1.1.1.1) במקום).

כאשר אתה מסיים, שמור וסגור את קובץ named.conf.options. התצורה למעלה מציינת כי רק שרתי ה-DNS שלך (הסומנים כ-"trusted") יכולים לשאול את שרת ה-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

First, תרצה לערוך את רשומת ה-SOA. החלף את ה-localhost הראשון ב-ns1’s 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 לדוגמה, הוא יחפש בקובץ אזור הפוך(ים) כדי לפתור את ה-FQDN התואם, 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 ולהגדיל את ערך ה-serial:

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

                              . . .

כעת מחקו את שתי הרשומות בסופו של הקובץ (אחרי רשומת ה-SOA). אם אינכם בטוחים אילו שורות למחוק, הן מסומנות בהערה delete this line בדוגמה הקודמת:

בסופו של הקובץ, הוסיפו את רשומות שרת השמות שלכם עם השורות הבאות (החליפו את השמות בשלכם). שימו לב שהעמודה השנייה מציינת שאלו רשומות 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 הפרטית של השרתים שלך בסדר הפוך. וודא שאתה מחליף שמות וכתובות 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

אם לקבצי התצורה שלך ב־named אין שגיאות תחבורת, לא יהיו הודעות שגיאה ותחזור למסוף השלך. אם יש בעיות עם קבצי התצורה שלך, עיין בהודעת השגיאה ובסעיף הגדרת שרת 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 trusted יכולים לשאול את שרתי ה-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 של המערכת כדי לקבוע האם הגדרת ה-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 כדי לבדוק אם הלקוחות שלך יכולים לשאול את שרתי השמות שלך. עליך להיות מסוגל לעשות זאת בכל הלקוחות שהגדרת ושהם ב־trusted ACL.

ניתן להתחיל על ידי ביצוע חיפוש קדימה.

חיפוש קדימה

כדי לבצע חיפוש קדימה לקבלת כתובת ה־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).

כשלבסוף, המדריך הזה יסביר כיצד לשמור על רשומות האזור שלך.

שלב 6 — שמירה על רשומות DNS

כעת שיש לך DNS פנימי פועל, יש לך צורך לשמור על רשומות ה-DNS שלך כך שישקפו בדיוק את הסביבה של השרת שלך.

הוספת מארח ל-DNS

כל פעם שאתה מוסיף מארח לסביבה שלך (באותו מרכז נתונים), יש להוסיף אותו ל-DNS. הנה רשימת השלבים שעליך לבצע:

שרת שם ראשי

  • קובץ אזור קדמי: הוסף רשומת A עבור המארח החדש, הגבל את ערך ה-Serial
  • קובץ אזור רוורס: הוסף רשומת PTR עבור המארח החדש, הגבל את ערך ה-Serial
  • הוסף את כתובת ה-IP הפרטית של המארח החדש ל-ACL של 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 הפנימי שלך, והקבצים שלך משתמשים ב-FQDN פרטיים לציון של חיבורי הרשת, יש חשיבות מרבית לכך ששרתי ה-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