Bind 8 - 建立 DNS Server

1、前言

DNS,Domain Name Service 主要目地為解決 Domain Name 與 IP Address 之間相互的對應問題,在網路世界間中的溝通其實就是使用 IP Address 來溝通 (就像是人類使用的身份證),但一連串的數字這樣對人類來說太過於麻煩,因此便出現 Domain Name Service 服務來將 IP Address 轉換成人類可方便閱讀的 Domain Name,簡單來說就是例如: 您輸入的 Yahoo 網址 http://tw.yahoo.com 轉成 IP Address 以便連結到 Yahoo 的網頁伺服器,關於網域名稱服務可參考站內文章 DNS 伺服器的原理與運作流程






文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.建立本機反解範例檔案 (localhost.rev)
          步驟2.修改 DNS 設定檔 (named.conf)
          步驟3.建立正解檔案 (named.freebsd.for)
          步驟4.修改服務設定檔 (rc.conf)
          步驟5.修改本機 DNS 查詢設定檔 (resolv.conf)
          步驟6.啟動 DNS 服務
4、補充1.檢查名稱解析是否正確 (nslookup)
5、補充2.安全性設定 (Zone Transfer 限制)
6、補充3.安全性設定 (隱藏 BIND DNS 版本)
7、參考
8、Me FAQ
          Q1.A records for B.ROOT-SERVERS.NET class 1 do not match hint records?





2、實作環境

  • FreeBSD 5.2-RELEASE
  • named 8.3.7 





3、安裝及設定

步驟 1. 建立本機反解範例檔案 (localhost.rev)

執行下列指令產生本機反解範例檔案 localhost.rev。
cd /etc/namedb           //切換路徑
sh ./make-localhost     //產生範例檔(localhost.rev) 




步驟 2. 修改 DNS 設定檔 (named.conf)

修改 DNS 設定檔 named.conf。
vi /etc/namedb/named.conf
 zone "weithenn.org"  {
      type master;
      file "named.weithenn.for";                                                
      allow-transfer { 168.95.1.1; };    //安全性設定
 };




步驟 3. 建立正解檔案 (named.freebsd.for)

建議您可複製剛才建立的反解範例檔案 localhost.rev 再進行修改可避免 keyin 錯誤。

SOA: 為標準區域中的第一筆記錄,之後括號 () 內為與次要 DNS 溝通的相關資訊,其數值單位為 (秒)
  • Serial: 區域版本編號
  • Refresh: 同步更新時間
  • Retry: 重試同步時間
  • Expire: 同步到期時間
  • Minimum: 最小快取存活時間
vi /etc/namedb/named.freebsd.for   //修改 DNS 正解檔案內容如下
 $TTL      86400
 @   IN   SOA  user.weithenn.org. hostmaster.weithenn.org. (
                   2003091101 ; Serial
                   28800      ; Refresh
                   14400      ; Retry
                   3600000    ; Expire
                   86400 )    ; Minimum
          IN      NS      gateway
          IN      A       61.60.59.58
 gateway  IN      A       61.60.59.58
 www      IN      A       61.60.59.58
 mail     IN      A       61.60.59.58
 @        IN     MX  10   mail 




步驟 4. 修改服務設定檔 (rc.conf)

修改 /etc/rc.conf 中加入下列的設定以便在系統重新開機時時會啟動 DNS 服務。
vi /etc/rc.conf            
 named_enable="YES"             //啟動 named 服務
 named_flags="-u bind -g bind"  //以 bind 啟動 DNS 服務 (安全性設定) 




步驟 5. 修改本機 DNS 查詢設定檔 (resolv.conf)

修改本機 DNS 查詢設定檔 /etc/resolv.conf 加上 Domain Name 及本機 IP Address,關於此設定檔詳細內容可參考站內文章 resolv.conf
vi /etc/resolv.conf      //修改設定檔加入如下三行
 domain weithenn.org
 nameserver 127.0.0.1                    
 nameserver 61.60.59.58 




步驟 6. 啟動 DNS 服務

請鍵入如下指令啟動 DNS 服務。
/usr/sbin/named      //啟動 DNS 服務





4、補充 1. 檢查名稱解析是否正確 (nslookup)

設定好 DNS 相關主機記錄後,可透過 nslookup 指令來查詢剛才設定是否正確,以下為常用參數:
  •  server 168.95.1.1: 將 DNS 查詢工作交給 168.95.1.1。
  •  set type=soa: 設定查詢 SOA 記錄 (輸入網域名稱後自行判斷是否 DNS 有設定錯誤)。
  •  set type=ns: 設定查詢 NS 記錄 (Name Server)。
  •  set type=a: 設定查詢 A 記錄 (Host)。
  •  set type=mx: 設定查詢 MX 記錄 (Mail)。





5、補充 2. 安全性設定 (Zone Transfer 限制)

DNS 架構下常需透過更新 Zone File 動作來更新 DNS Master 及DNS Slave 間 Zone File 的資料,在信任網域下將 Zone File 資料列出是 OK 的,但若是能由外界進行查詢您 Zone 資料時將會演變為具有危險的行為,想想若有人知道您 Zone File 設定都一清二楚那他即可針對特定主機進行攻擊行為,因此限制您的 Zone Transfer 將更顯重要。

Zone Transfer 限制檢測方式 (以 nslookup 指令為例)
# nslookup                        //進入 nslookup 交談模式
 >server weithenn.org          //指定以 weithenn.org 為 NS 做查詢
 Default Server: weithenn.org
 Address: 61.60.59.58  
 > ls -d weitenn.org            //檢查是否限制無法查尋 Zone File
 weithenn.org ***
  Can't list domain weitenn.org: Unspecified error


改善方法,修改 named.conf 中填入允許的 IP Address (通常為 DNS Slave) 代表只有這個 IP Address 能進行 Zone Transfer 您的 DNS Zone File。
 zone "weithenn.org" {
 type master;
 file "named.weithenn.for";
 allow-transfer { 61.60.59.57; };     //關鍵就是加入此行
 };






6、補充 3. 安全性設定 (隱藏 BIND DNS 版本)

為何要隱藏您的 BIND DNS 版本呢? 原因在於有心人士可以透過先瞭解您 DNS 主機所運作的 BIND 版本來尋找相關漏洞攻擊程式,因此在 ISC BIND 建議下可透過設定來隱藏 BIND 系統版本。

測試探測 BIND DNS 版本 (以 dig 指令為例)
dig -t txt -c chaos VERSION.BIND dns.weithenn.org
 VERSION.BIND. 0S CHAOS TXT "8.3.7-REL"   //表示此台 DNS 主機目前運作的 BIND 版本為 8.3.7-REL      

改善方法,修改 named.conf 在 Options 內加入 version 及文字說明,當有人使用上述方式探測您的 BIND 版本時則會顯示您剛才設定的文字說明部份。
 options {
 ... version "Bind 1.2.3-REL";
 };






7、參考






8、Me FAQ

Q1. A records for B.ROOT-SERVERS.NET class 1 do not match hint records?

Error Message:
啟動 DNS 服務後 Log 出現如下錯誤訊息
tail /var/log/message
 Feb 6 13:01:59 gateway named585: check_hints: A records for  B.ROOT-SERVERS.NET class 1 do not match hint records


Ans:
表示 /etc/named/named.root 檔案內容太舊了,請更新 named.root 下載 named.root
cd /etc/named
fetch ftp://ftp.internic.net/domain/named.root