既然說它是查號台,那到底是要查些什麼呢?
舉例來說吧,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 位址間的對應關係。
事前準備
請參照 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 或網段。
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 - 自訂的區域設定檔名稱。
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 端的測試方式。
架好後與samba server的port 53衝到, 導致samba的AD功能開不起來
回覆刪除改了port後還是listen 53, 請問該如何解決?
這是因為:
刪除1. listen on port 不能改到小於 1024 的 Port。
2. 必須打開 SELinux 的限制,例如我要把 Port 轉到 12345,
semanage port -a -t dns_port_t -p tcp 12345