利用 BIND 9 建立一台「轉發型 DNS 伺服器」:本機不負責權威解析,僅接收客戶端查詢,轉發給上游 DNS(如 ISP、Google 8.8.8.8),並快取結果以加速後續查詢。適用於企業內網、家庭網路、開發環境。
# CentOS/RHEL 7/8
sudo dnf install -y bind bind-utils # bind-chroot 為選擇性
# Ubuntu/Debian
sudo apt-get install -y bind9 bind9utils dnsutils
options {
listen-on port 53 { 127.0.0.1; 192.168.1.10; }; # 監聽介面
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost; 192.168.1.0/24; }; # 允許查詢的客戶端
allow-recursion { localhost; 192.168.1.0/24; };
# 轉發核心設定
forwarders {
8.8.8.8; # Google Public DNS
8.8.4.4;
202.96.128.86; # ISP DNS (視環境調整)
};
forward only; # 僅轉發,不遞迴查詢根域
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
forwarders:上游 DNS 列表,依序嘗試。forward only:關鍵,若無此行,BIND 在轉發失敗時會嘗試遞迴查詢根域,導致解析緩慢或洩露內網查詢。allow-query/recursion:限制來源 IP,防止成為開放解析器被濫用 DDoS。# 啟動並設定開機自動啟動
sudo systemctl enable --now named
# 檢查啟動日誌
sudo tail -30 /var/log/messages | grep named
# 測試 1:指定本機解析
dig @127.0.0.1 www.google.com
# 測試 2:將本機 /etc/resolv.conf 指向 127.0.0.1
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
dig www.google.com
dig 輸出底部顯示 SERVER: 127.0.0.1#53(127.0.0.1)options {
max-cache-size 256M; # 記憶體快取上限
max-ncache-ttl 3600; # 否定快取 TTL (秒)
max-stale-ttl 86400; # 過期資料最長可用時間
};
若上游為智慧型 DNS(依客戶端 IP 回傳最近節點),轉發伺服器的出口 IP決定回傳節點。若內網客戶端跨 ISP(電信/聯通/移動),可能導致非最優路由。對策:
unbound + stub-zone 直接查詢權威伺服器,繞過智慧型 DNS。| 現象 | 可能原因 | 解決 |
|---|---|---|
| named 啟動失敗 | 權限、SELinux、埠衝突 | journalctl -u named -xe、semanage port -l | grep 53 |
| 查詢超時 | 上游 DNS 不通、防火牆阻擋 | dig @8.8.8.8 . NS 測試上游、開放 UDP 53 |
| 解析錯誤 (SERVFAIL) | DNSSEC 驗證失敗、轉發迴路 | 暫時關閉 dnssec-validation、檢查 forward only |
| 快取不生效 | TTL 過短、max-cache-size 過小 | 調大快取、檢查上游 TTL |
allow-query、allow-recursion 僅信任網段。response-rate-limiting(RRL)防緩衝放大攻擊。named.ca(根域提示)與 bindkeys-file(DNSSEC 金鑰)。named.stats 異常流量。轉發型 DNS 架設簡單、效能好、維護成本低,是中小型網路的首選。記住 forward only 與 來源 IP 限制 兩大關鍵,即可穩定上線。