一、DNS簡介及域名空間
1.1、DNS簡介
DNS(Domain Name System)域名系統,在TCP/IP網絡中有非常重要的地位,能夠提供域名與IP地址的解析服務。
1.2、域名空間
DNS是一個分佈式數據庫,命名系統採用層次的邏輯結構,如同一棵倒置的樹,這個邏輯的樹形結構稱爲域名空間。
DNS樹的每個節點代表一個域,通過這些節點,對整個域名空間進行劃分,成爲一個層次結構。Internet域名空間的最頂層是根域(root),其記錄着Internet的重要DNS信息,由Internet域名註冊授權機構管理,該機構把域名空間各部分的管理責任分配給連接到Internet的各個組織。
DNS根域下面是頂級域(Top Level Domain),也由Internet域名註冊授權機構管理。共有3種類型的頂級域。
組織域:採用3個字符的代號,比如com爲商業機構組織,edu爲教育機構組織,gov爲政府機構組織,mil爲軍事機構組織,net爲網絡機構組織,org爲非營利機構組織,int爲國際機構組織。
地址域:採用兩個字符的國家或地區代號。如cn爲中國,kr爲韓國,us爲美國。
反向域:這是個特殊域,名字爲in-addr.arpa,用於將IP地址映射到名字(反向查詢)。
二、DNS服務器的類型
2.1、主DNS服務器 維護所負責解析的域內解析庫服務器;“通知”機制:主服務器發生改變,會通知從服務器來同步數據,避免從服務器落後主服務器。 |
2.2、輔助DNS服務 從主DNS服務器或其他的輔助DNS服務器那裏"複製"(區域傳遞)一份解析庫;具有容錯的能力。 區域傳送分類: 全量傳送(完全傳送):傳送整個解析庫 增量傳送---只傳送解析庫變化的那部分內容 |
2.3、緩存DNS服務器 不負責解析任何域,不用註冊任何域名,但可以幫助本地用戶來解析互聯網上對某些域名的請求結果;緩存有多級的概念,客戶端緩存和服務器緩存。 |
2.4、轉發服務器 轉發服務器(forwarding server)接收查詢請求,但不直接提供DNS解析,而是將所有查詢請求發送到另外的DNS服務器,查詢結果返回後保存到緩存。如果沒有指定轉發服務器,則DNS服務器會使用根區域記錄,向根服務器發送查詢,這樣許多非常重要的DNS信息會暴露在Internet上。除了該安全和隱私問題,直接解析會導致大量外部通信,對於慢速接入Internet的網絡或Internet服務成本很高的公司,提高通信效率來說非常不利,而轉發服務器可以存儲DNS緩存,內部的客戶端能夠直接從緩存中獲取信息,不必向外部DNS服務器發送請求。這樣可以減少網絡流量並加速查詢速度。 注意:被轉發的服務器需要能夠爲請求者做遞歸,否則,轉發請求不予進行 (1) 全部轉發: 凡是對非本機所有負責解析的區域的請求,統統轉發給指定的服務器; Options { forward {first|only}; forwarders{指向的dns服務器地址; }; } (2) 區域轉發:僅轉發對特定的區域的請求至某服務器; zone "ZONE_NAME" IN { type forward; forward {first|only}; #定義轉發模式 forwarders {指向的dns服務器地址;}; } 注意:關閉dnssec功能:rpm包安裝的,默認是啓動的! dnssec-enable no; dnssec-validation no; |
三、DNS查詢原理及流程
1)DNS相關概念
(1)DNS緩存
DNS服務器在解析客戶機請求時,如果本地沒有該DNS信息,則可以會詢問其他DNS服務器,當其他域名服務器返回查詢結果時,該DNS服務器會將結果記錄在本地的緩存中,成爲DNS緩存。當下一次客戶機提交相同請求時,DNS服務器能夠直接使用緩存中的DNS信息進行解析。
(2)資源記錄
DNS服務器的信息數據,按照分類進行存儲,能夠解析客戶端的DNS請求。
(3)區域文件
包含區資源記錄的文件,選擇DNS服務器爲授權服務器,管理該區域。在大部分DNS實現中,用文本文件實現區。
2)遞歸查詢和迭代查詢
(1)遞歸查詢
遞歸查詢是一種DNS服務器的查詢模式,在該模式下DNS服務器接收到客戶端請求,必須使用一個準確的查詢結果回覆客戶端。如果DNS服務器本地沒有存儲查詢DNS信息,那麼該服務器會詢問其他服務器,並將返回的查詢結果提交給客戶端。
(2)迭代查詢
迭代查詢是另一種DNS服務器的查詢模式,在該模式下DNS服務器接收到客戶端請求,並不直接回復客戶端的查詢結果,而是提供其他能夠解析查詢該請求的另一臺DNS服務器地址,客戶端再向這臺DNS服務器提交請求,依次循環直到返回查詢的結果爲止。
3)DNS查詢流程
本地域名服務器給所管理的客戶端提供DNS域名解析的遞歸查詢
<1>客戶端提交域名解析請求,並將該請求發送給本地域名服務器
<2>本地域名服務器收到請求後,會先查詢本地的緩存,如果有查詢的DNS信息記錄,則直接將查詢結果返回給客戶端;如果沒有該記錄,那麼本地域名服務器就會將該請求發送給根域名服務器
<3>根域名服務器會返回給本地域名服務器一個所查詢域的頂級域名服務器地址
<4>本地域名服務器再向返回的這個頂級域名服務器地址發送客戶端的請求
<5>接收到該查詢請求的域名服務器查詢其緩存和記錄,如果有相關的信息則會返回本地域名服務器的查詢結果(即可返回給客戶端),否則會通知本地域名服務器下一級的域名服務器地址
<6>本地域名服務器將查詢請求發送給返回的下一級DNS服務器地址
<7>域名服務器返回本地服務器查詢結果(如果該域名服務器不包含查詢的DNS信息,查詢過程將重複<6>、<7>步驟,直到返回解析信息或解析失敗的迴應)
<8>本地域名服務器將最終的結果保存到緩存,並將此結果返回給客戶端
四、正向解析和反向解析
1)正向解析
正向解析是指域名到ip地址的解析過程
2)反向解析
反向解析是指ip地址到域名的解析過程,反向解析的作用爲服務器的身份驗證
五、資源記錄(RR-Resource Record)
某些資源記錄不僅包括DNS域中服務器的信息,還可以用於定義域,即指定每臺服務器授權了哪些域,這些資源記錄就是SOA和NS資源記錄。
1)SOA資源記錄
每個區在區的開始處都包含了一個起始授權記錄(Start of Authority Record),簡稱SOA記錄。SOA定義了域的全局參數,進行整個域的管理設置。一個區域文件只允許存在唯一的SOA記錄。
name:當前區域的名字 value: (1)當前區域的主dns服務器的FQDN,也可以使用當前的區域名字 (2)當前區域管理員的郵箱地址,但地址中不能使用@符號,一般用.替換 (3) (主從服務器協調屬性的定義以及否定答案統一的TTL值) |
2)NS資源記錄
名稱服務器(NS)資源記錄表示該區的授權服務器,它們表示SOA資源記錄中指定的該區的主和輔助服務器,也表示了任何授權區的服務器。每個區在區根處至少包含一個NS記錄,每個NS在後續都應該有一個A記錄
name : 當前區域的名字 value:當前區域的某dns服務器的名字,一個區域可以有多個ns記錄(dns服務器不止1個) |
3)A或AAAA資源記錄
地址(A)資源記錄把FQDN映射到IP地址,因而解析器能查詢FQDN對應的IP地址。
AAAA資源記錄是IPV6
name:某主機的FQDN value:主機名對應主機的ip地址 避免用戶寫錯名稱時給錯誤答案,可以使用泛域名*來解析至特定地址 |
4)PTR資源記錄
相對於A資源記錄,指針(PTR)記錄把IP地址映射到FQDN。
name:ip,有特定格式,把ip地址反過來寫,有特定後綴:in-addr.arpa value:FQDN |
5)CNAME資源記錄
規範名字(CNAME)資源記錄創建特定FQDN的別名。用戶可以使用CNAME記錄來隱藏用戶網絡的實現細節,使連接的客戶端無法知道。
name: 別名的FQDN value:正式名字的FQDN web.bengbengtu.com IN CANME www.bengbengtu.com |
6)MX資源記錄
郵件交換(MX)資源記錄爲DNS域名指定郵件交換服務器。郵件交換服務器是爲DNS域名處理或轉發郵件的主機,多個MX服務器之間有優先級之分。
name:當前區域的名字 value:當前區域的某郵件服務器(smtp服務器)的主機名 一個區域內,MX記錄可以有多個;但每個記錄的value之前應該有一個數字(0-99),表示此服務器的優先級,數字越小優先級越高 |
六、DNS服務器安裝
6.1、bind
BIND全稱爲Berkeley Internet Name Domain(伯克利因特網名稱域系統)。BIND8融合了許多提高效率、穩定性和安全性的技術,而BIND9增加了一些超前的理念:IPv6支持、公開密鑰加密、多處理器支持、線程安全操作、增量區傳送等等。
6.2、bind安裝包
bind-9.8.2-0.30.rc1.el6.x86_64
bind-utils-9.8.2-0.30.rc1.el6.x86_64
6.3、安裝--主從DNS搭建過程
測試環境:
主DNS服務器:ip-192.168.1.20,CentOS 6
從DNS服務器:ip-192.168.1.21,CentOS 6
主DNS服務器相關配置
#vim /etc/named.conf
/etc/named.conf options { listen-on port 53 { 192.168.1.20; }; directory "/var/named"; allow-query {192.168.1.0/24;10.0.0.0/24;}; recursion yes;} logging { channel default_debug { file "data/named.log"; severity dynamic; }; }; zone "bengbengtu.com" IN { type master; file "bengbengtu.zone"; allow-transfer {192.168.1.21;}; }; zone "1.168.192.in-addr.arpa" IN { type master; file "1.168.192.apra"; allow-transfer {192.168.1.21;}; };
需要將正解和反解文件的權限定義爲640;屬主和 屬組爲root:named
bengbengtu.zone ===正解區域文件
$TTL 1D @ IN SOA bengbengtu.com. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. IN NS ns2.bengbengtu.com. IN MX 10 mail.bengbengtu.com. ns1 IN A 192.168.1.20 ns2 IN A 192.168.1.21 mail IN A 192.168.1.20 www IN A 192.168.1.20 web IN CNAME www ftp IN A 192.168.1.30
1.168.192.arpa === 反解區域文件
$TTL 1D @ IN SOA 1.168.192.in-addr.arpa. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. 20 IN PTR ns1.bengbengtu.com. 20 IN PTR www.bengbengtu.com. 20 IN PTR mail.bengbengtu.com.
測試:
dig -t a www.bengbengtu.com @192.168.1.20
dig -x 192.168.1.20 @192.168.1.20
dig axfr bengbengtu.com @192.168.1.20
從DNS服務器相關配置
#vim /etc/named.conf
listen-on port 53 { 192.168.1.21; }; directory "/var/named"; allow-query { 192.168.1.0/24; }; recursion yes; zone "bengbengtu.com." IN { type slave; file "slaves/bengbengtu.zone"; masters {192.168.1.20;}; }; zone "1.168.192.in-addr.arpa" IN { type slave; file "slaves/1.168.192.arpa"; masters {192.168.1.20;}; };
至此主從DNS服務器配置完成!!
七、DNS的view視圖
分離解析(Split DNS)域名服務器:來自不同地址的客戶端請求解析同一個域名時,爲其提供不同的解析結果,使用view視圖來定義!
(1)一旦啓用了view,所有的zone都只能定義在view中
(2)僅有必要再匹配到允許遞歸請求的客戶所在view中定義根區域
(3)客戶端請求到達時,是自上而下檢查每個view所服務器的客戶端列表;所以優先被匹配的view要放在最上面
2個不同的view,分別匹配不同的客戶端,分別爲每一個相同的zone提供了2個不同的解析庫文件,而且解析庫文件中的同一個主機名解析的ip地址不一樣,來自不同的客戶端請求時,他們一旦被匹配到view後,view中定義的zone將會爲此用戶進行解析,而這些zone使用了不同的解析庫文件,而不同的解析庫裏面同一個主機使用了不同的解析地址,所以解析的結果是不一樣的
這裏只測試正向解析,過程如下:
view 視圖 :192.168.1.20 /etc/named.conf view "local" { match-clients {192.168.1.20;}; zone "." IN { type hint; file "named.ca"; }; zone "bengbengtu.com" IN { type master; file "bengbengtu.com.local"; }; }; view "other" { match-clients {192.168.1.21;}; zone "." IN { type hint; file "named.ca"; }; zone "bengbengtu.com" IN { type master; file "bengbengtu.com.other"; }; }; bengbengtu.com.local $TTL 1D @ IN SOA bengbengtu.com. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. IN NS ns2.bengbengtu.com. ns1 IN A 192.168.1.20 ns2 IN A 192.168.1.21 mail IN A 192.168.1.20 www IN A 200.200.200.200 #web IN CNAME www ftp IN A 192.168.1.30 root@localhost ~]# vim /var/named/bengbengtu.com.other $TTL 1D @ IN SOA bengbengtu.com. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. IN NS ns2.bengbengtu.com. IN MX 10 mail.bengbengtu.com. ns1 IN A 192.168.1.20 ns2 IN A 192.168.1.21 mail IN A 192.168.1.20 www IN A 100.100.100.100 ftp IN A 192.168.1.30
測試結果如下:
至此DNS服務器的view視圖介紹完畢!