Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 架設 DNS 轉發伺服器(BIND)完整步驟

編輯:Linux 教學

利用 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

修改主設定檔 /etc/named.conf

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)
  • ANSWER SECTION 回傳正確 A/AAAA 記錄
  • 查詢時間(Query time)通常 < 10 ms(快取命中)

進階調優

快取大小與 TTL

options {
    max-cache-size 256M;          # 記憶體快取上限
    max-ncache-ttl 3600;          # 否定快取 TTL (秒)
    max-stale-ttl 86400;          # 過期資料最長可用時間
};

針對智慧型 DNS(CDN)的轉發策略

若上游為智慧型 DNS(依客戶端 IP 回傳最近節點),轉發伺服器的出口 IP決定回傳節點。若內網客戶端跨 ISP(電信/聯通/移動),可能導致非最優路由。對策:

  • 部署多台轉發伺服器,分別走不同 ISP 專線出口。
  • 客戶端依所屬 ISP 指向對應轉發伺服器(DHCP 下發不同 DNS)。
  • 或改用 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

安全性加固

  1. 限制 allow-query、allow-recursion 僅信任網段。
  2. 啟用 response-rate-limiting(RRL)防緩衝放大攻擊。
  3. 定期更新 named.ca(根域提示)與 bindkeys-file(DNSSEC 金鑰)。
  4. 監控 named.stats 異常流量。
轉發型 DNS 架設簡單、效能好、維護成本低,是中小型網路的首選。記住 forward only 與 來源 IP 限制 兩大關鍵,即可穩定上線。
Copyright © Windows教程網 All Rights Reserved