跳到主內容

BIND9 安裝記錄

  BUBU 在專案需求中需要使用 BIND9 來架設 DNS 服務。過去 BUBU 主要採用 PowerDNS 進行部署,但由於 BIND9 作為歷史悠久且廣泛應用的 DNS 伺服器軟體,具備穩定性與完整功能,因此本篇將記錄 BIND 的安裝與設定流程,以供後續參考與維護之用。

運行環境


  環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: Ubuntu 24.04

安裝過程


  • 安裝必要套件
apt install bind9 bind9utils bind9-doc -y
  • 編輯設定檔 vim /etc/bind/named.conf.options
// 定義一個 存取控制清單 (ACL),名稱為 internal-network。
acl internal-network {192.168.1.0/24;};
options {        
              // 指定 BIND9 快取存放位置
              directory "/var/cache/bind";
              // 誰可以向這台 DNS 查詢紀錄。
              allow-query { localhost; internal-network; };
              // 定義 誰可以做 zone transfer (區檔複製),未來如果有 Slave 的話這裡要新增加 Slave 來源。
              allow-transfer { localhost; };
              // 指定上游 DNS 服務。
              forwarders { 8.8.8.8; };
              // 啟用 遞迴查詢,允許這台伺服器代替客戶端向其他 DNS 查詢結果。
              recursion yes;
              // 啟用 DNSSEC 驗證,自動使用系統內建的信任錨(trust anchor)。
              dnssec-validation auto;
              // 指定 BIND 在 IPv6 上監聽所有介面。
              listen-on-v6 { none; };
}; 
  • 設定 DNS 區域 (zones) 定義出來,讓 BIND9 知道要管理哪些網域名稱和對應的反解。 vim /etc/bind/named.conf.local
// 正向解析 (Forward Lookup Zone) 的定義
// 要管理的網域
zone "abc.local" IN {
              // 設定這台是 Master
              type master;
              // 指定這個 zone 的區檔存放位置。
              file "/etc/bind/forward.abc.local";
              // 禁止動態更新。
              allow-update { none; };
              // 區檔更新後通知 Slave
              also-notify { 192.168.1.11; };
              notify yes;
};

// 反向解析 (Reverse Lookup Zone) 的定義
// 管理的反向區域是 192.168.1.0/24
zone "1.168.192.in-addr.arpa" IN {
                // 設定這台是 Master
                type master;
                // 指定反向解析的區檔存放位置。
                file "/etc/bind/reverse.abc.local";
                // 禁止動態更新。
                allow-update { none; };
                // 區檔更新後通知 Slave
                also-notify { 192.168.1.11; };
                notify yes;
};
  • 設定 正向解析 vim /etc/bind/forward.abc.local
$TTL    86400
@       IN      SOA     ns1.abc.local. admin.abc.local. (
                        2025092201      ; Serial (版本號, 每次修改要遞增)
                        3600            ; Refresh (1 小時, Slave 多久檢查一次)
                        1800            ; Retry (30 分鐘, 檢查失敗多久後重試)
                        1209600         ; Expire (14 天, 若失聯多久後捨棄 zone)
                        86400 )         ; Minimum TTL (快取 1 天)

; --- DNS 伺服器 ---
        IN      NS      ns1.abc.local.   ; 主要 DNS
        IN      NS      ns2.abc.local.   ; 次要 DNS (Slave)

; --- 主機紀錄 ---
ns1     IN      A       192.168.1.10
ns2     IN      A       192.168.1.11
www     IN      A       192.168.1.20
mail    IN      A       192.168.1.30

; --- 郵件紀錄 ---
@       IN      MX 10   mail.abc.local.
  • 設定 反向解析 vim /etc/bind/reverse.abc.local
$TTL    86400
@       IN      SOA     ns1.abc.local. admin.abc.local. (
                        2025092201      ; Serial (版本號, 要跟正向解析一致)
                        3600            ; Refresh (1 小時, Slave 多久檢查一次)
                        1800            ; Retry (30 分鐘, 檢查失敗多久後重試)
                        1209600         ; Expire (14 天, 若失聯多久後捨棄 zone)
                        86400 )         ; Minimum TTL (快取 1 天)

; --- DNS 伺服器 ---
        IN      NS      ns1.abc.local.
        IN      NS      ns2.abc.local.

; --- PTR (反向解析) ---
10      IN      PTR     ns1.abc.local.   ; 192.168.1.10 → ns1.abc.local
11      IN      PTR     ns2.abc.local.   ; 192.168.1.11 → ns2.abc.local
20      IN      PTR     www.abc.local.   ; 192.168.1.20 → www.abc.local
30      IN      PTR     mail.abc.local.  ; 192.168.1.30 → mail.abc.local
  • 設定 BIND9 只監聽 IPv4 vim /etc/default/named
# 修改前
IONS="-u bind"

# 修改後
IONS="-u bind -4"
  • 驗證主設定檔
named-checkconf /etc/bind/named.conf.local
  • 驗證正向解析設定檔
named-checkzone abc.local /etc/bind/forward.abc.local

  • 驗證反向解析設定檔
named-checkzone 10.168.192.in-addr.arpa /etc/bind/reverse.abc.local

  • 驗證所有設定檔
named-checkconf -z
  • 啟動服務
systemctl enable --now named

Slave設定

  • 編輯設定檔 vim /etc/bind/named.conf.options
// 定義一個 存取控制清單 (ACL),名稱為 internal-network。
acl internal-network {192.168.1.0/24;};
options {        
              // 指定 BIND9 快取存放位置
              directory "/var/cache/bind";
              // 誰可以向這台 DNS 查詢紀錄。
              allow-query { localhost; internal-network; };
              // Slave 端「不主動提供」zone transfer 給其他人
              allow-transfer { none; };
              // 指定上游 DNS 服務。
              forwarders { 8.8.8.8; };
              // 啟用 遞迴查詢,允許這台伺服器代替客戶端向其他 DNS 查詢結果。
              recursion yes;
              // 啟用 DNSSEC 驗證,自動使用系統內建的信任錨(trust anchor)。
              dnssec-validation auto;
              // 指定 BIND 在 IPv6 上監聽所有介面。
              listen-on-v6 { none; };
}; 
  • 設定 DNS 區域 (zones) 定義出來,讓 BIND9 知道要管理哪些網域名稱和對應的反解。 vim /etc/bind/named.conf.local
// 正向解析 (Forward Lookup Zone) 的定義
// 要管理的網域
zone "abc.local" IN {
              // 設定這台是 slave
              type slave;
              // 指定這個 zone 的區檔存放位置。
              file "/etc/bind/forward.abc.local";
              // 指定這個 zone 的 Master DNS 伺服器來源。
              masters { 192.168.1.1; };
};

// 反向解析 (Reverse Lookup Zone) 的定義
// 管理的反向區域是 192.168.1.0/24
zone "1.168.192.in-addr.arpa" IN {
                // 設定這台是 slave
                type slave;
                // 指定反向解析的區檔存放位置。
                file "/etc/bind/reverse.abc.local";
                // 指定這個 zone 的 Master DNS 伺服器來源。
                masters { 192.168.1.1; };
};

補充說明


備註





參考相關網頁