前提:
學過網絡的朋友都知道,如果要實現兩臺主機的通信都需要由相應的IP地址來實現。在互聯網中,衆多的IP地址不僅提升我們記憶的難度,而且使用起來非常的不方便,這就需要來提供一中機制,來實現IP到域名的解析。這樣當我們需要訪問百度的時候就不需要在地址欄輸入百度的IP地址,直接輸入百度的域名就可以進行訪問了。那我們是如何實現地址和域名之間的映射呢?這就需要一個DNS服務器來實現。
一、DNS工作原理
DNS全名爲 Domain Name System.能夠實現域名到IP的解析。主要原理圖如下:
如果本地PC訪問百度的站點:
1.當我們將www.baidu.com輸入地址欄時,主機會到我們本地設置的DNS上去查詢。這個過程一般被稱爲遞歸。
2.當DNS(這裏我們假設爲電信的),收到主機的查詢請求時,會在本服務器的緩存中進行查詢,如果查詢到了就會將結果返回給PC,如果查詢不到就會幫該PC去別的主機查詢。
3.默認每臺DNS服務器中都內置了全球13臺根域服務器的IP地址,電信的DNS會將PC機的查詢請求發送到根域以查詢com域的地址。
4.接着該DNS主機會去com域中查詢baidu.com域的IP地址。
5.當電信DNS主機獲取到baidu.com域的地址之後,就會去這臺服務器上查詢www這臺主機的地址。
6.當獲取到www.baidu.com這臺主機的地址之後,電信的DNS就會將IP地址返回給PC,這樣PC就可以拿着這個IP來訪問百度了。
二、DNS服務器的類型
1.緩存DNS服務器
緩存服務器會對查詢的結果進行緩存,包括錯誤的相關結果,這些查詢結果都會有一個默認的生存時間 ( time to live ),當時間過了之後,會從當前緩存中清除。但是緩存服務器給出的查詢結果是非權威的答案。
2.主DNS服務器(master)
主服務器中的數據庫更新都是由管理員手動完成
3.輔助DNS服務器(slave)
輔助DNS服務器中的數據庫更新是從主服務器或其它輔助DNS服務器那裏完成的。這樣實現了當前DNS環境的冗餘。
三、linux系統中的DNS服務器
在linux服務器中用於搭建DNS服務器的軟件主要有兩種,bind和powerdns,而bind更佔據了DNS服務器的半壁江山,本篇博文實現的功能將完全在RHEL6.4上使用bind來實現。
當我們配置好yum源之後查詢bind軟件組成和功能如下:
bind-utils | 提供客戶端使用的工具,可以使用 rpm 命令查詢詳細信息 |
bind | DNS服務主程序,提供DNS服務 |
bind-libs | 爲bind和bind-utils提供庫 |
bind-chroot | 裝上之後能限制服務的相關活動目錄(這裏我們並不安裝) |
四、利用bind在linux上實現相關的DNS服務
1.簡單安裝
[root@station1 ~]# yum install bind -y
2.安裝完成查看配置文件
/etc/named.rfc1912.zones 設置需要解析的相關zone
data 該目錄用於存放相關的日誌信息
name.ca 用於根域的解析,如果丟失可以用 "dig -t NS . @DNS_IP" 重定向
slave 該目錄用於輔助服務器從主服務器同步的信息
3.啓動服務並查看監聽端口
[root@station1 ~]# service named start Starting named: [ OK ] [root@station1 ~]# ss -atuln4 | grep :53 udp UNCONN 0 0 172.16.21.100:53 *:* udp UNCONN 0 0 127.0.0.1:53 *:* tcp LISTEN 0 3 172.16.21.100:53 *:* tcp LISTEN 0 3 127.0.0.1:53 *:* [root@station1 ~]# chkconfig named on
4.緩存服務器配置
有的時候我們需要提供一個僅緩存服務器來提高我們解析互聯網站域名的速度,相關的配置如下:
[root@station1 ~]# vim /etc/named.conf options { directory "/var/named"; forward only; forwarders { 172.16.0.1; }; bindkeys-file "/etc/named.iscdlv.key"; }; [root@station1 ~]# named-checkconf [root@station1 ~]# rndc reload
簡單測試:
dig -t NS .
注意:也可以爭取某個特定的zone做轉發:
zone "xiong.com" IN { type forward; forward only; forwarders { 172.16.0.1; }; };
5.主服務器的實現(master)
實現對xiong.com域的正反向解析如下:
首先編輯配置文件 vim /etc/named.conf
然後編輯/etc/named.rfc1912.zones,添加如下zone:
編輯資源記錄文件named.xiong和xiong.name實現正反向解析:
修改文件權限並檢查配置文件的正確性,然後重啓服務:
修改本機的DNS指向並進行測試如下:
vim /etc/resolv.conf nameserver 172.16.21.100 dig -t axfr xiong.com @172.16.21.100 測試並注意其中列出的內容含義
6.輔助DNS的實現
需要首先在主服務器上添加該從服務器的NS資源記錄,這樣才能及時的通知主服務器上的資源記錄更新
修改區域配置文件:
重啓服務,並使用dig命令測試:
dig-t axfr xiong.com @172.16.21.100
7.子域授權
爲域xiong.com完成子域kun1.xiong.com的授權,並實現kun1.xiong.com子域的正向查詢。
編輯域xiong.com 的 master 配置文件 vim /var/named/named.xiong 添加如下行:
保存以完成子域的授權。
結果:
父域能解析子域的資源記錄:子域不能解析父域的資源記錄:
dig -t A www.kun1.xiong.com @172.16.21.100
子域不能解析父域的資源記錄,可以爭對父域創建一個forward轉發:
這樣子域就能正常的對父域中的資源記錄進行解析了。這就完成了子域的授權。