[CentOS 7] 網際網路裡的 104 查號台 - DNS Server

by 2月 04, 2016 2 意見        

既然說它是查號台,那到底是要查些什麼呢?
舉例來說吧,168.95.192.1、8.8.8.8、139.175.55.244 這幾個 IP,有多少人知道它們代表什麼?
對 IT 業界的朋友們或許不成問題,可是其他人呢?

如果換成 dns.hine.net.、google-public-dns-a.google.com.、dns.seed.net.tw.,是不是比較容易明瞭,因為它們不再是一串毫無關聯的數字,而是一組有邏輯的字串。

這就是 DNS 最重要的工作:負責記錄網域名稱 (Domain Name) 與 IP 位址間的對應關係。

最後更新日期 - 2016/02/05

事前準備


請參照 CentOS 7.0 不完全安裝手冊 系列文章,完成作業系統的安裝。

我們會以下面的網路環境來實作:
  • 網域:itist.local.
  • 網段:192.168.88.0 / 24,Class C
  • DNS 伺服器:192.168.88.155
  • PC 用戶端:192.168.88.65
  • Mac 用戶端:192.168.88.62

安裝 DNS 套件


直接從 CentOS 官方套件庫安裝。
sudo yum -y install bind

就醬子,沒了 ...... XDDD


主要設定與區域宣告


編輯主設定檔。
sudo vi /etc/named.conf

修改這幾個參數:
  • listen-on port 53 - 提供 DNS 服務的 IP。
  • allow-quqry - 允許進行查詢的 Client 端 IP 或網段。
  • allow-recursion - 允許遞迴查詢的 Client 端 IP 或網段。
listen-on port 53 { 127.0.0.1; 192.168.88.155; };
allow-query       { localhost; 192.168.88.0/24; };
allow-recursion   { 127.0.0.1; 192.168.88.0/24; }; 


新增正 / 反解區域的宣告,正解 (正向解析,forward resolution) 指的是將網域名稱轉換成 IP 位址,而反解 (反向解析,reverse resolution) 當然就是將 IP 位址轉換成網域名稱。
  • master - 代表這是該網域的第一台 DNS 伺服器。
  • file - 自訂的區域設定檔名稱。
zone "itist.local" IN {
    type master;
    file "zone-itist.local";
};

zone "88.168.192.in-addr.arpa" IN {
    type master;
    file "zone-192.168.88.0";
};


檢查一下語法是否正確,沒有任何訊息就代表 OK;出現錯誤訊息的話,就檢查一下有問題的行號。
sudo named-checkconf /etc/named.conf


正解區域


新增正解區域設定檔,檔案名稱必須跟主設定檔裡自訂的名稱相同。
sudo vi /var/named/zone-itist.local

輸入下列設定值。
$TTL    86400
itist.local.      IN SOA    ns1.itist.local. webmaster.itist.local. ( 2016020301 14400 900 604800 86400 )

itist.local.      IN NS     ns1.itist.local.
ns1.itist.local.  IN A      192.168.88.155

itist.local.      IN MX 10  ms1.itist.local.
ms1.itist.local.  IN A      192.168.88.201


itist.local.      IN MX 20  ms2.itist.local.
ms2.itist.local.  IN A      192.168.88.202

www.itist.local.  IN A      192.168.88.111
wiki.itist.local. IN CNAME  www.itist.local.

ftp.itist.local.  IN A      192.168.88.121
file.itist.local. IN CNAME  ftp.itist.local.


這邊是模擬網路環境裡 DNS Server * 2、Mail Server * 2、Web Server *1 (上面跑 2 個網站),及 FTP Server 兼 File Server * 1。

反解區域


新增反解區域設定檔,檔案名稱同樣要跟主設定檔裡自訂的名稱相同。
sudo vi /var/named/zone-192.168.88.0

輸入下列設定值。
$TTL     86400
88.168.192.in-addr.arpa.  IN SOA  ns1.itist.local. webmaster.itist.local. ( 2016020301 14400 900 604800 86400 )

88.168.192.in-addr.arpa.      IN NS   ns1.itist.local.
155.88.168.192.in-addr.arpa.  IN PTR  ns1.itist.local.

201.88.168.192.in-addr.arpa.  IN PTR  mx1.itist.local.
202.88.168.192.in-addr.arpa.  IN PTR  mx2.itist.local.

111.88.168.192.in-addr.arpa.  IN PTR  www.itist.local.
121.88.168.192.in-addr.arpa.  IN PTR  ftp.itist.local.


檢查一下正反解記錄是否正確。
sudo named-checkzone itist.local /var/named/zone-itist.local
sudo named-checkzone 88.168.192.in-addr.arpa /var/named/zone-192.168.88.0


重新啟動服務,並讓它在開機後自動啟動。
sudo systemctl restart named
sudo systemctl enable named

開啟防火牆的 DNS 通訊埠。
sudo firewall-cmd --permanent --zone=public --add-port=53/tcp
sudo firewall-cmd --permanent --zone=public --add-port=53/udp
sudo firewall-cmd --reload


調整 SELinux 權限。
sudo restorecon /etc/named.conf
sudo restorecon -r /var/named



本機測試


正解紀錄

先用常見的 nslookup 指令來測試。
nslookup

再用 dig 指令來試試看。
dig -t soa itist.local @localhost

反解紀錄

比照正解來測試正確性。




Client 端驗證


PC (Windows 10)

在「控制台」-「網路和共用中心」裡,選擇「區域連線」。


點選「內容」。

先點擇「IPv4」,再點選「內容」。

在「慣用 DNS 伺服器」輸入 DNS Server 的 IP 位址。

設定完畢之後,再到「所有應用程式」-「W」開頭 - 「Windows 系統」裡,執行「命令提示字元」。

我們就可以用 nslookup 指令來測試了。



Mac (OS X 10.11.3)

在「系統偏好設定」-「網路」裡。

將 DNS Server 改成 CentOS 7 的 IP。

打開終端機。

查詢 DNS 正反解記錄是否正確。
dig www.itist.local @192.168.88.155

nslookup


異常處理


如果在查詢時出現「connection timed out; no servers could be reached.」之類的錯誤訊息。


可能的原因有:
  • DNS 服務沒啟動。
  • 網路不通、IP 輸入錯誤。 
  • 沒有開放正確的 IP 或網段。
  • 忘了允許防火牆的 Port 53、開 Port 之後沒重啟服務。
  • 沒有這筆記錄 (record)、記錄的類型 (type) 錯誤。

另外,
Bind 服務一直無法正常啟動,卻打死都找不到錯誤的地方嗎?
想一下是不是犯了這些錯誤:

主設定檔

  • 主設定檔裡的每一行指令,最後都要加上「 ; 」
  • 主設定檔裡,用 { } 在宣告多個 IP 位址時,每個 IP 或網段後面都要加上「 ; 」。

區域設定檔

  • 正解的部份,所有的紀錄後面別忘了加上「 . 」,如 www.itist.local.、ns1.itist.local.
  • 反解的部份,紀錄的宣告方式是固定的,不能亂改,例如 192.168.88.155,就一定要宣告成 155.88.168.192.in-addr.arpa

參考資料


圖片來源

  • https://pixabay.com

更新紀錄

  • 2016/02/04 撰文 。
  • 2016/02/05 加入 Windows 10 Cleint 端的測試方式。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

2 則留言 :

  1. 架好後與samba server的port 53衝到, 導致samba的AD功能開不起來
    改了port後還是listen 53, 請問該如何解決?

    回覆刪除
    回覆
    1. 這是因為:
      1. listen on port 不能改到小於 1024 的 Port。
      2. 必須打開 SELinux 的限制,例如我要把 Port 轉到 12345,
      semanage port -a -t dns_port_t -p tcp 12345

      刪除