BIND
伯克利互聯網名稱服務 (Berkeley Internet Name Daemon,簡稱 BIND) 是 DNS 協議的一個參考實現。
安裝[編輯 | 編輯原始碼]
要使用 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
。