如何在 Ubuntu 22.04 上配置 BIND 為私有網路 DNS 伺服器

介紹

管理服務器配置和基礎設施的重要部分之一是通過名稱查找網絡接口和IP地址的方式。一種方法是建立一個合適的域名系統(DNS)。使用全限定域名(FQDN)而不是IP地址來指定網絡地址,可以優化服務和應用程序的配置,提高配置文件的可維護性。為私有網絡設置自己的DNS是改善服務器管理的一個很好的方法。

在本教程中,您將使用兩台Ubuntu 22.04服務器設置一個內部DNS服務器。您將使用BIND域名服務器軟件(BIND9)來解析私有主機名和私有IP地址。這提供了一種集中管理內部主機名和私有IP地址的方式,在您的環境擴展到多個主機時不可或缺。

先決條件

要完成本教程,您需要以下基礎設施。請確保在同一數據中心啟用私有網絡的情況下創建每個服務器:

  • A fresh Ubuntu 22.04 server to serve as the Primary DNS server, ns1.
  • (推薦)第二台Ubuntu 22.04服務器作為次級DNS服務器,名為ns2
  • 至少需要一台额外的服务器。本指南假定您有两台额外的服务器,这将被称为客户端服务器。这些客户端服务器必须在与您的DNS服务器相同的数据中心中创建。

在这些服务器的每一台上,按照我们的Ubuntu 22.04初始服务器设置指南配置一个管理员sudo用户并设置防火墙。

如果您对DNS概念不熟悉,我们建议您阅读我们的Introduction to Managing DNS的前三部分。

在DigitalOcean上,所有新创建的Droplets默认放置在虚拟私有云(VPC)中。查看我们的VPC产品文档以了解更多信息。

示例基础架构和目标

对于本文,我们将假设以下内容:

  • 您有两台服务器,它们将被指定为您的DNS名称服务器。本指南将称这两台为ns1ns2
  • 您有兩個額外的客戶端伺服器,將使用您創建的 DNS 基礎設施,本指南中稱為 host1host2。您可以添加任意多個客戶端伺服器。
  • 所有這些伺服器都存在於同一數據中心。本教程假設該數據中心稱為 nyc3
  • 所有這些伺服器都已啟用私人網路並位於 10.128.0.0/16 子網路上(您可能需要調整這個子網路以配合您的伺服器)。
  • 所有伺服器都連接到運行在 example.com 上的項目。本指南概述了如何設置內部私有 DNS 系統,因此您可以使用任何您喜歡的域名,而不是 example.com。DNS 伺服器將始終優先嘗試在內部路由請求,這意味著它們不會嘗試在公共互聯網上訪問給定的域。但是,使用您自己擁有的域名可能有助於避免與公共可路由域的衝突。

在這些假設的基礎上,本指南中的示例將使用基於子域 nyc3.example.com 的命名方案來引用示例私有子網路或區域。因此,host1 的私有全限定域名(FQDN)將為 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。

讓我們從在主要和次要DNS伺服器,ns1ns2上安裝BIND開始。

步驟1 — 在DNS伺服器上安裝BIND

在兩台DNS伺服器,ns1ns2上,通過鍵入以下命令來更新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

OPTIONS參數的末尾添加-4

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

完成後保存並關閉文件。如果您使用nano編輯文件,可以通過按CTRL + XY,然後ENTER來進行操作。

重新啟動 BIND 以實施更改:

  1. sudo systemctl restart bind9

現在 BIND 已安裝完成,讓我們配置主 DNS 伺服器。

步驟 2 — 配置主 DNS 伺服器

BIND 的配置包含多個文件,這些文件從主配置文件 named.conf 中包含。這些文件名以 named 開頭,因為這是 BIND 運行的進程名稱(named 是“name daemon”的縮寫,即“domain name daemon”)。我們將從配置 named.conf.options 文件開始。

配置選項文件

ns1 上,打開 named.conf.options 文件進行編輯:

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

在現有的options塊上方,建立一個名為trusted的新ACL(訪問控制列表)塊。這是您將定義一個允許遞歸DNS查詢的客戶端列表的地方(即與ns1位於同一數據中心的您的服務器)。將以下行添加到您的信任客戶端列表中,以確保將ns1ns2host1host2添加到您的信任客戶端列表中,請務必將示例私有IP地址替換為您自己的服務器的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 {

        . . .

現在您已經有了信任的DNS客戶端列表,您可以編輯options塊。這是當前塊的開始:

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

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

directory指令下方,添加突出顯示的配置行(並替換為適當的ns1私有IP地址):

/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.88.8.4.4。此塊定義了forwarders,這是BIND用於減少與外部名稱服務器之間流量的特殊機制。BIND還可以使用轉發器來允許那些無法直接訪問互聯網的服務器進行查詢。這可以通過減少本地網絡的負載來幫助加快對這些查詢的響應速度。

此塊中的兩個IP地址表示Google的公共DNS解析器,但任何公共递归名称服务器的IP地址都可以在此处使用。例如,您可以使用Cloudflare的DNS服务器的IP地址(1.1.1.1)。

完成後,請保存並關閉 named.conf.options 檔案。上述配置指定只有您自己的伺服器(trusted)才能向您的 DNS 伺服器查詢外部域名。

接下來,您將通過配置 named.conf.local 檔案來指定您的 DNS 區域。

配置本地檔案

ns1 上,打開 named.conf.local 檔案進行編輯:

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

除了一些註釋外,檔案將是空的。在這裡,您將指定正向區域和反向區域。DNS 區域 指定了管理和定義 DNS 記錄的特定範圍。由於本指南的示例域將全部位於 nyc3.example.com 子域內,我們將使用該子域作為我們的正向區域。因為我們示例伺服器的私有 IP 地址都在 10.128.0.0/16 IP 範圍內,以下示例將設置一個反向區域,以便我們可以在該範圍內定義反向查找。

使用以下行添加正向區域,將區域名稱替換為您自己的名稱,並在 allow-transfer 指令中替換 次要 DNS 伺服器的私有 IP 地址

/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,它将在正向区域文件中查找以解析 host1 对应的私有IP地址。

创建您的区域文件存放目录。根据 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`。每次編輯區域文件時,在重新啟動 named 進程之前,您需要增加 Serial 值。在這裡,將其增加到 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 記錄:ns1ns2host1host2

/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 文件。

現在讓我們轉到反向區域文件(s)。

創建反向區域文件(s)

反向區域文件是您定義反向 DNS 查找的 DNS PTR 記錄的地方。也就是說,當 DNS 收到按 IP 地址查詢時,例如 10.128.100.101,它將在反向區域文件中查找以解析相應的 FQDN,在本例中為 host1.nyc3.example.com

ns1 上,對於在 named.conf.local 文件中指定的每個反向區域,都創建一個反向區域文件。我們將以範例 db.127 區域文件為基礎來創建我們的範例反向區域文件。BIND 使用此文件來存儲本地回環接口的信息;127 是表示 本地主機127.0.0.1)的 IP 地址的第一個八位組。使用以下命令將此文件復制到適當的位置(替換目標文件名,使其與您的反向區域定義匹配):

  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 記錄之後)。如果您不確定要刪除哪些行,可以在前一個示例中使用 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.

然後為所有位於您正在編輯的區域檔案子網路的 IP 地址的伺服器添加 PTR 記錄。 在我們的示例中,這包括所有主機,因為它們都位於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 配置檔案沒有語法錯誤,將不會顯示任何錯誤消息,並且您將返回到您的 shell 提示符。 如果您的配置檔案存在問題,請檢查錯誤消息和Configure Primary DNS Server 部分,然後再次嘗試執行 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

在檔案的頂部,添加包含所有受信任伺服器的私有IP地址的ACL:

/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檔案。此檔案應該與ns1named.conf.options檔案相同,除了它應該配置為在ns2的私有IP地址上監聽。

現在編輯named.conf.local檔案:

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

定義與主要DNS伺服器上的主要區域對應的次要區域。注意類型為secondary,檔案不包含路徑,並且有一個primaries指令,應該設置為主要DNS伺服器的私有IP地址。如果在主要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

然後通過修改UFW防火牆規則允許DNS連接到伺服器:

  1. sudo ufw allow Bind9

隨著這一步,您現在已經為私人網絡名稱和IP地址解析設置了主要和次要DNS伺服器。現在,您必須配置您的客戶伺服器以使用您的私人DNS伺服器。

步驟4 — 配置DNS客戶端

trusted ACL中的所有伺服器都能夠查詢您的DNS伺服器之前,您必須配置每個伺服器以使用ns1ns2作為名稱伺服器。

假設您的客戶伺服器正在運行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進行配置,Netplan是一種抽象,允許您編寫標準化的網路配置並將其應用於兼容的後端網路軟件。要配置DNS,您需要編寫一個Netplan配置文件。

/etc/netplan中創建一個名為00-private-nameservers.yaml的新文件:

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

在內部添加以下內容。您需要修改私人網路的介面、ns1ns2 DNS伺服器的地址,以及DNS區域:

注意:Netplan使用YAML數據序列化格式進行配置文件。由於YAML使用縮進和空格來定義其數據結構,請確保您的定義使用一致的縮進以避免錯誤。

您可以使用YAML Lint等YAML檢查器來排除YAML文件的問題。

/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 try告訴Netplan嘗試使用新的配置文件。如果存在導致網絡丟失的問題,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

滾動至找到您的私人網路界面的部分。您的DNS伺服器的私人IP地址應該首先列出,然後是一些後備值。您的域名應該在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 中的所有客戶端上執行此操作。

您可以從執行向前查找開始。

向前查找

要執行向前查找以檢索 host1.nyc3.example.com 的 IP 地址,請運行以下命令:

  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

接下來,您可以檢查反向查找。

反向查找

要測試反向查找,請使用 host1 的私有 IP 地址查詢 DNS 伺服器:

  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.comdb.10.128)。

作为最后一步,本教程将介绍如何维护区域记录。

第6步 — 维护DNS记录

现在您有一个正常工作的内部DNS,需要维护DNS记录以准确反映您的服务器环境。

添加主机到DNS

每当您向环境中添加主机(在相同的数据中心),都需要将其添加到DNS。以下是您需要执行的步骤列表:

主名称服务器

  • 正向区域文件:为新主机添加A记录,递增Serial的值
  • 反向区域文件:为新主机添加PTR记录,递增Serial的值
  • 将新主机的私有IP地址添加到trusted ACL(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 地址添加到trusted 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術語、組件和概念介紹》(An Introduction to DNS Terminology, Components, and Concepts)。

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