開始使用 BIND DNS 伺服器

域名服務器(DNS)是互聯網基礎設施的關鍵組成部分,構建自己的DNS服務器可能具有挑戰性。但使用BIND就不是這樣,您可以在很短的時間內創建自己的BIND DNS服務器。BIND以其靈活性和高可用性支持而在管理員中享有良好的聲譽。

在本文中,您將學習如何安裝和配置安全的BIND DNS服務器,並驗證子域名是否解析到正確的IP地址。

繼續閱讀,輕鬆創建您的DNS服務器!

先決條件

本教程將進行實踐演示。請確保您擁有以下內容。

  • A Linux server – This example uses the Ubuntu 20.04 server.
  • A non-root user with root privileges or root/administrator user.
  • A domain name pointed to the server IP address – This demo uses the atadomain.io domain and server IP address 172.16.1.10.

安裝BIND套件

默認的Ubuntu存儲庫提供BIND套件,但不會預先安裝在系統中。您可以安裝BIND作為主要的DNS服務器或僅作為權威服務器。BIND提供強大的功能,例如主-從安裝支持、DNSSEC支持和內置的存取控制列表(ACL)。

要開始使用BIND DNS,您首先需要使用apt套件管理器在計算機上安裝BIND套件。

1. 打開終端並登錄到您的服務器。

2. 接下來,執行以下apt update命令來更新並刷新存儲庫套件索引。此命令確保您安裝的是套件的最新版本。

sudo apt update
Refreshing Package Index

3. 更新後,執行以下apt install命令以安裝用於 Ubuntu 伺服器的 BIND 套件。

 bind9-utils 和 bind9-dnsutils 套件提供了用於 BIND 的額外命令行工具。這些套件對於測試和管理 BIND DNS 伺服器非常有用。

sudo apt install bind9 bind9-utils bind9-dnsutils -y
Installing BIND Packages

4. 最後,執行以下systemctl命令來驗證 BIND 服務。

BIND 套件附帶了服務 named,並且在 BIND 套件安裝期間會自動啟動和啟用。

# 檢查是否啟用了 named 服務
sudo systemctl is-enabled named

# 檢查 named 服務狀態
sudo systemctl status named

現在您應該會看到 BIND named 服務已啟用,狀態為 active (running)。此時,BIND 服務將在系統啟動/開機時自動運行。

Checking BIND named service

配置 BIND DNS 伺服器

您已在 Ubuntu 伺服器上安裝了 BIND 套件,因此現在是時候在您的 Ubuntu 伺服器上設置 BIND 安裝了。如何?通過編輯 BIND 和named服務的配置。

所有 BIND 的配置都在/etc/bind/目錄下,named服務的配置在/etc/default/named目錄下。

1. 使用您喜歡的編輯器編輯/etc/default/named配置文件,在OPTIONS行上添加選項-4,如下所示。此選項將僅在 IPv4 上運行named服務。

OPTIONS="-4 -u bind"

保存您所做的更改並關閉文件。

Configuring BIND to Run on IPv4 Only

2. 接下來,編輯/etc/bind/named.conf.options文件,並在directory "/var/cache/bind";行下填入以下配置。

此配置將 BIND 服務設置為在伺服器的本地主機和公共 IP 地址(172.16.1.10)上運行默認的 UDP 端口 53。同時,它允許從任何主機對 BIND DNS 伺服器使用 Cloudflare DNS 1.1.1.1 作為轉發器的查詢。

    // listen port and address
    listen-on port 53 { localhost; 172.16.1.10; };

    // for public DNS server - allow from any
    allow-query { any; };

    // define the forwarder for DNS queries
    forwarders { 1.1.1.1; };

    // enable recursion that provides recursive query
    recursion yes;

最後,在底部註釋掉listen-on-v6 { any; };行,如下所示,以禁用在 IPv6 上運行的named服務。

Editing the BIND Configuration Options

3. 最後,運行以下命令驗證 BIND 配置。

sudo named-checkconf

如果没有输出,则BIND配置正确且没有任何错误。

Verifying BIND Configurations

设置DNS区域

此时,您已经配置了BIND DNS服务器的基本配置。您准备好创建一个带有您的域名的DNS服务器,并为您的应用程序添加其他子域。您需要定义和创建一个新的DNS区域配置来实现这一点。

在本教程中,您将创建一个新的名称服务器(ns1.atadomain.io)和子域(www.atadomain.iomail.atadomain.iovault.atadomain.io)。

1. 使用您喜欢的编辑器编辑/etc/bind/named.conf.local文件,并添加以下配置。

此配置定义了atadomain.io域名的前向区域(/etc/bind/zones/forward.atadomain.io)和反向区域(/etc/bind/zones/reverse.atadomain.io)。

zone "atadomain.io" {
    type master;
    file "/etc/bind/zones/forward.atadomain.io";
};

zone "1.16.172.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/reverse.atadomain.io";
};

保存更改并关闭文件。

Defining Forward Zone and Reverse Zone BIND

2. 接下来,运行以下命令创建一个新目录(/etc/bind/zones),用于存储DNS区域配置。

mkdir -p /etc/bind/zones/

3. 运行每个命令将默认的前向和反向区域配置复制到/etc/bind/zones目录中。

# 复制默认的前向区域
sudo cp /etc/bind/db.local /etc/bind/zones/forward.atadomain.io

# 复制默认的反向区域
sudo cp /etc/bind/db.127 /etc/bind/zones/reverse.atadomain.io

# 列出/etc/bind/zones/目录的内容
ls /etc/bind/zones/
Copying Default Zones Configurations

4. 现在,使用您喜欢的编辑器编辑前向区域配置(/etc/bind/zones/forward.atadomain.io),并填写以下配置。

前向區配置是您定義域名和伺服器 IP 位址的地方。該配置將域名轉換為伺服器的正確 IP 位址。

以下配置創建了以下名稱伺服器和子域:

  • ns1.atadomain.io – 您域的主要名稱伺服器,具有 IP 位址172.16.1.10
  • atadomain.io 域的 MX 記錄由 mail.atadomain.io 處理。 MX 記錄用於郵件伺服器。
  • 應用程式的子域:www.atadomain.iomail.atadomain.iovault.atadomain.io
;
; BIND data file for the local loopback interface
;
$TTL    604800
@       IN      SOA     atadomain.io. root.atadomain.io. (
                            2         ; Serial
                        604800         ; Refresh
                        86400         ; Retry
                        2419200         ; Expire
                        604800 )       ; Negative Cache TTL

; Define the default name server to ns1.atadomain.io
@       IN      NS      ns1.atadomain.io.

; Resolve ns1 to server IP address
; A record for the main DNS
ns1     IN      A       172.16.1.10


; Define MX record for mail
atadomain.io. IN   MX   10   mail.atadomain.io.


; Other domains for atadomain.io
; Create subdomain www - mail - vault
www     IN      A       172.16.1.10
mail    IN      A       172.16.1.20
vault   IN      A       172.16.1.50

保存更改並關閉文件。

Configuring Forward Zone BIND

5. 與前向區類似,編輯反向區配置文件(/etc/bind/zones/reverse.atadomain.io)並填寫以下配置。

反向區將伺服器 IP 位址轉換為域名。反向區或 PTR 記錄對於像郵件伺服器這樣的服務至關重要,這會影響郵件伺服器的聲譽。

PTR 記錄使用 IP 位址的最後一個區塊,例如 IP 位址 172.16.1.10 的 PTR 記錄為 10。

此配置創建了以下域的反向區或 PTR 記錄:

  • 名稱伺服器 ns1.atadomain.io 具有反向區或 PTR 記錄 172.16.1.10
  • 將域 mail.atadomain.io 的 PTR 記錄設置為伺服器 IP 位址 172.16.1.20
;
; BIND reverse data file for the local loopback interface
;
$TTL    604800
@       IN      SOA     atadomain.io. root.atadomain.io. (
                            1         ; Serial
                        604800         ; Refresh
                        86400         ; Retry
                        2419200         ; Expire
                        604800 )       ; Negative Cache TTL

; Name Server Info for ns1.atadomain.io
@       IN      NS      ns1.atadomain.io.


; Reverse DNS or PTR Record for ns1.atadomain.io
; Using the last number of DNS Server IP address: 172.16.1.10
10      IN      PTR     ns1.atadomain.io.


; Reverse DNS or PTR Record for mail.atadomain.io
; Using the last block IP address: 172.16.1.20
20      IN      PTR     mail.atadomain.io.

保存更改並關閉文件。

Configuring Reverse Zone BIND

6. 現在,執行以下命令來檢查和驗證 BIND 配置。

# 檢查 BIND 的主配置
sudo named-checkconf

# 檢查前向區域 forward.atadomain.io
sudo named-checkzone atadomain.io /etc/bind/zones/forward.atadomain.io

# 檢查反向區域 reverse.atadomain.io
sudo named-checkzone atadomain.io /etc/bind/zones/reverse.atadomain.io

當您的配置正確時,您將看到類似下面的輸出。

Checking and Verifying BIND configurations

7. 最後,運行以下命令systemctl重新啟動並驗證named服務。這樣做會將新更改應用於named服務。

# 重新啟動 named 服務
sudo systemctl restart named

# 驗證 named 服務
sudo systemctl status named

下面,您可以看到 named 服務的狀態為活動(正在運行)。

Restarting Named Service and Verifying Named Service Status

使用 UFW 防火牆開啟 DNS 端口

此時,您已完成 BIND DNS 服務器的安裝。但您仍需保護您的 DNS 服務器。您將設置 UFW 防火牆並打開 DNS 端口以進行對服務器的任何查詢。這樣做允許客戶端向 BIND DNS 服務器發出查詢。

出於安全原因,建議在您的 Ubuntu 服務器上運行並啟用 UFW 防火牆。

1. 運行ufw命令以檢查 UFW 防火牆上的可用應用程式。

sudo ufw app list

您應該在以下UFW應用程式清單中看到Bind9。

Listing Available Applications on the UFW Firewall

2. 現在執行以下命令以將Bind9允許到UFW防火牆。

sudo ufw allow Bind9
Adding UW Rule

3. 最後,執行以下命令來檢查UFW防火牆上已啟用的規則。

sudo ufw status

您應該在清單中看到類似下方截圖中的Bind9應用程式。

Verifying List of Rules

驗證BIND DNS伺服器安裝

您現在已完成BIND DNS安裝並設定了UFW防火牆。但是如何驗證您的DNS伺服器安裝?使用dig命令即可。

Dig是用於故障排除DNS伺服器安裝的命令列工具。dig對於給定的域名執行DNS查詢,並顯示該域名目標的詳細答案。在Ubuntu系統上,digbind9-dnsutil套件的一部分。

要驗證您的BIND DNS伺服器安裝:

1. 分別執行下面每個dig命令來驗證子域名www.atadomain.iomail.atadomain.iovault.atadomain.io

如果您的DNS服务器安装成功,每个子域名将根据forward.atadomain.io的配置解析为正确的IP地址。

# 检查域名
dig @172.16.1.10 www.atadomain.io
dig @172.16.1.10 mail.atadomain.io
dig @172.16.1.10 vault.atadomain.io

以下是子域名www.atadomain.io解析为服务器IP地址172.16.1.10的输出。

Checking sub-domain www.atadomain.io

以下是子域名mail.atadomain.io解析为服务器IP地址172.16.1.20的输出。

Checking sub-domain mail.atadomain.io

以下是子域名vault.atadomain.io解析为服务器IP地址172.16.1.50的输出。

Checking sub-domain vault.atadomain.io

2. 接下来,运行以下dig命令来验证atadomain.io域的MX记录。

dig @172.16.1.10 atadomain.io MX

您应该能看到atadomain.io域有MX记录mail.atadomain.io。

Checking MX record for atadomain.io

3. 最后,运行以下命令来验证服务器IP地址172.16.1.10和172.16.1.20的PTR记录或反向区配置。

如果您的BIND安装成功,每个IP地址将解析为在reverse.atadomain.io配置中定义的域名。

# 检查PTR记录或反向DNS
dig @172.16.1.10 -x 172.16.1.10
dig @172.16.1.10 -x 172.16.1.20

您可以看到下面,服务器IP地址172.16.1.10解析为域名ns1.atadomain.io。

Checking PTR record for IP address 172.16.1.10

如下所示,服务器IP地址172.16.1.20解析为域名mail.atadomain.io。

Checking PTR record for IP address 172.16.1.20

结论

在這個教程中,你已經學會了如何在你的Ubuntu伺服器上建立和設定一個安全的BIND DNS伺服器。你還創建了正向和反向區域,用於添加你的域名並通過運行dig命令驗證DNS伺服器。

現在,你如何在你的環境中實施一個BIND DNS伺服器呢?也許實施BIND作為一個授權伺服器?或者使用主從 BIND安裝來設定高可用性?

Source:
https://adamtheautomator.com/bind-dns-server/