BIND - Arch Linux 中文维基

跳至內容

# BIND

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 BIND，最近一次同步於 2017-08-07，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- DNSCrypt
- dnsmasq
- Pdnsd
- Unbound
- PowerDNS

伯克利網際網路名稱服務 (Berkeley Internet Name Daemon，簡稱 BIND) 是 DNS 協議的一個參考實現。

注意：開發 BIND 的組織在發現安全漏洞之後，會先通知付費客戶，四天以後才會通知 Linux 發行版和大眾。[1]

## 安裝

安裝軟體包 bind包。

要使用 BIND 提供系統 DNS 服務，修改 resolv.conf，將`nameserver 127.0.0.1`放到最前面。

開始/啟用 `named.service` 服務。

## 配置

BIND 的配置文件是 `/etc/named.conf`. `named.conf` man 手冊頁介紹了所有選項。

Reload the `named.service` unit 以應用配置變更.

### 只允許本地訪問

如果希望只允許本地網絡訪問，編輯 `/etc/named.conf` 並將這行配置加入到 options 區域。

    listen-on { 127.0.0.1; };

### DNS 轉發

要將 DNS 請求請求轉發到上游 DNS 伺服器（例如說您的 ISP 的伺服器，或者 Google、OpenNIC 等知名的服務）。將下面欄位加入配置文件的 options 中。.

     forwarders { 8.8.8.8; 8.8.4.4; };

不要忘記重啟 `named.service` 服務。

## 權威 DNS 伺服器

以下為一個設置權威域的簡單教程。在這個示例中，我們的權威域名為 "domain.tld"。

更詳盡的教程參見 Two-in-one DNS server with BIND9.

### 1. 創建一個 zonefile

    # nano /var/named/domain.tld.zone

    $TTL 7200
    ; domain.tld
    @       IN      SOA     ns01.domain.tld. postmaster.domain.tld. (
                                            2007011601 ; Serial
                                            28800      ; Refresh
                                            1800       ; Retry
                                            604800     ; Expire - 1 week
                                            86400 )    ; Minimum
                    IN      NS      ns01
                    IN      NS      ns02
    ns01            IN      A       0.0.0.0
    ns02            IN      A       0.0.0.0
    localhost       IN      A       127.0.0.1
    @               IN      MX 10   mail
    imap            IN      CNAME   mail
    smtp            IN      CNAME   mail
    @               IN      A       0.0.0.0
    www             IN      A       0.0.0.0
    mail            IN      A       0.0.0.0
    @               IN      TXT     "v=spf1 mx"

$TTL 定義了默認的 TTL (time-to-live), 單位為秒。在這個例子中，默認 TTL 為 2 小時。

每次修改 zonefile 的時候，都需要將 Serial (序列號) 加一再重啟 named。只有當新的 Serial 比最後傳輸的域的序列號大的時候，從伺服器才會請求傳輸新的域。

### 2. 配置主伺服器

將您的 zone 文件加到 `/etc/named.conf`:

    zone "domain.tld" IN {
            type master;
            file "domain.tld.zone";
            allow-update { none; };
            notify no;
    };

重新加載 `named.service` 服務。

### 3. 將其設置為默認 DNS 伺服器

如果您自己已經在運行 DNS 伺服器的話，可以考慮同時將其用來處理 DNS 查詢請求。伺服器必須支持 recursive (遞歸) 查詢。為了防止 DNS 放大攻擊，許多 DNS 解析程序都默認禁用了遞歸功能。Arch 的默認 `/etc/named.conf` 配置只允許本機地址使用遞歸：

    allow-recursion { 127.0.0.1; };

resolv.conf 配置文件必須包含 127.0.0.1 地址以使用您的 DNS 伺服器。 參見 Domain name resolution#Overwriting of /etc/resolv.conf 以了解確保這個文件不會被覆蓋的方法。

如果您想為您的區域網提供 DNS 服務的話（例如 192.168.0 IP 段），您必須將對應的 IP 段加入到 `/etc/named.conf` 中：

    allow-recursion { 192.168.0.0/24; 127.0.0.1; };

## 配置 DNSSEC

- https://www.dnssec.net/practical-documents
  - https://www.cymru.com/Documents/secure-bind-template.html (configuration template!)
  - https://www.bind9.net/manuals[失效連結 2021-11-07 ⓘ]
  - https://www.bind9.net/BIND-FAQ[失效連結 2021-11-07 ⓘ]
- https://web.archive.org/web/20100528023716/http://blog.techscrawl.com:80/2009/01/13/enabling-dnssec-on-bind/
- Or use an external mechanisms such as OpenDNSSEC (fully-automatic key rollover)

## 自動監聽新的網絡接口

BIND 會每個每隔幾個小時掃描新的網絡接口並停止在已經不再不存在的上監聽。如果您想修改這個時間的話，可以在 `/etc/named.conf` 中增加這個項：

    interface-interval <扫描间隔>;

最大間隔為 28 天 (40230 分鐘)。

如果需要禁用這個功能的話，可以將時間值設置為 0。

最後，請重啟服務。

## 在 chroot 環境運行 BIND

在 [chroot] 環境運行可以提高安全性。

### 創建 Jail House

首先，我們需要創建一個 jail。我們可以使用 `/srv/named`, 並將相關文件都放到裡面去。

     mkdir -p /srv/named/{dev,etc,usr/lib/engines,var/{run,log,named}}
     # Copy over required system files
     cp -av /etc/{localtime,named.conf} /srv/named/etc/
     cp -av /usr/lib/engines-1.1/* /srv/named/usr/lib/engines/
     cp -dfprv /var/named /srv/named/var/
     # Set up required dev nodes
     mknod /srv/named/dev/null c 1 3
     mknod /srv/named/dev/random c 1 8
     # Set Ownership of the files
     chown -R named:named /srv/named

這些步驟可以配置 jail 的文件系統。

### 服務文件

接下來我們需要創建服務文件 (service file)，以強制 BIND 在 chroot 環境中啟動。

     cp -av /usr/lib/systemd/system/named.service /etc/systemd/system/named-chroot.service

我們需要修改 service 啟動 BIND 的方法。

    /etc/systemd/system/named-chroot.service

      ExecStart=/usr/bin/named -4 -f -u named -t "/srv/named"

}

最後，重新加載 systemd `systemctl daemon-reload`。然後，啟動 `named-chroot.service`。

## 參見

- BIND 9 Administrator Reference Manual
- BIND 9 DNS Administration Reference Book
- DNS and BIND by Cricket Liu and Paul Albitz
- Pro DNS and BIND
- Internet Systems Consortium, Inc. (ISC)
- DNS Glossary[失效連結 2021-11-07 ⓘ]
- Archived mailing list discussion on BIND's future

分類：​

- DNS
- 包含失效連結的頁面

BIND
新增話題