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; };
};