Linux下DNS服務器搭建詳解

 Linux下DNS服務器搭建詳解

 DNS  即Domain Name System(域名系統)的縮寫,它是一種將ip地址轉換成對應的主機名或將主機名轉換成與之相對應ip地址的一種機制。其中通過域名解析出ip地址的叫做正向解析,通過ip地址解析出域名的叫做反向解析。

下面對DNS的工作流程及原理進行簡要說明

DNS的查詢流程:需要解析服務的Client先查看本機的/etc/hosts;若無結果,則client查看本地的DNS緩存服務器;若無結果,則查找所屬域的首選DNS服務器;若此時本地首選DNS服務器仍無法解析,則會想根域名服務器進行查詢或選擇轉發解析請求。  

DNS的查詢規則:遞歸式查詢,即client向支持遞歸查詢的DNS Server發出解析請求,則自DNS服務器不論是自身直接解析還是無法解析想根發出請求,總會由其向client返回一個結果;迭代式查詢,即接收client解析請求的DNS Server,若其能夠解析則直接返回結果,若其不能解析將把解析請求交給其他DNS服務器,而不是自己親自將解析過程完成。 

 所謂的“根”服務器:根服務器主要用來管理互聯網的主目錄,全世界只有13臺。1個爲主根服務器,放置在美國。其餘12個均爲輔根服務器,其中9個放置在美國,歐洲2個,位於英國和瑞典,亞洲1個,位於日本。所有根服務器均由美國政府授權的互聯網域名與號碼分配機構ICANN統一管理,負責全球互聯網域名根服務器、域名體系和IP地址等的管理。

DNS記錄的類型:

A:Address 域名向ip地址轉換的記錄;

PTR:Printer ip地址向域名轉換的記錄;

NS:代表域內的dns服務器;

MX:代表域內的郵件服務器;

CNAME:域名的別名;

SOA:start of authority用於標示域內主DNS服務器。

提供DNS服務的軟件:BIND即Berkeley Internet Name Domain有加州大學伯克利分校研發是當今提供dns服務應用最廣的軟件

下面讓我們進入正題,以下內容包括:DNS的緩存服務器、主/從服務器、子域授權、轉發以及視圖的配置步驟

 

DNS緩存服務器

Ps:爲了更好的體會和理解dns的配置文件和域解析文件,作者在此只安裝bind包,以手動編輯的方式生成這幾個必須的文件。

1.安裝bind包

  1. yum install bind 

2.創建住配置文件/etc/named.conf

  1. options { 
  2.     directory "/var/named";         #告知工作目錄 
  3. }; 
  4.          
  5. zone “.” IN  { 
  6. type hint;                           #聲明根域 
  7. file "named.ca";                     #根信息存放文件 
  8. };       
  9.          
  10. zone "localhost" IN {  #本地正解定義
  11. type master;  #類型爲master
  12. file "localhost.zone"#正解文件名
  13. };   
  14.          
  15. zone "0.0.127.in-addr.arpa" IN {  #本地反解定義
  16. type master; 
  17. file "named.local";  #反解文件名
  18. };       
  19.          
  20. chown :named /etc/named.conf 
  21. #修改屬組給named 

3.創建3個解析文件

named.ca

  1. dig -t NS . > /var/named/named.ca 
  2. #向跟服務器發起查詢並重定向到目標文件      

localhost.zone

  1. vim localhost. zone 
  2. $TTL 86400              
  3. #默認的ttl值 
  4. @               IN      SOA     localhost.  admin.localhost.     (
  5. #主DNS服務器localhost.  
  6.                                                                         2011081601  
  7.  #時間+序列號01
  8.                                                                         1H                  
  9. #刷新時間:每隔多久來master查詢更新 
  10.                                                                         10M                 
  11. #重試時間間隔                                      
  12.                                                                         7D                  
  13. #過期時間,如果7天仍找不到master,slave停止服務                                   
  14.                                                                         1D                  
  15. #否定答案ttl值,表示查詢不到再次查詢需要時間 
  16.                                                                            )                               
  17. @                   IN          NS          localhost.                                      
  18. #當前域的DNS服務器是localhost.                                               
  19. localhost.          IN          A           127.0.0.1 

named.local

  1. vim named.local 
  2. $TTL 86400              
  3. @             IN      SOA     localhost.  admin.localhost.      ( 
  4.                                                                         2011081601   
  5.                                                                         1H                   
  6.                                                                         10M                                              
  7.                                                                         7D                                                       
  8.                                                                         1D                   
  9.                                                                         )                                
  10. @                    IN          NS          localhost. 
  11. 1                    IN          PTR         localhost

4.檢測配置文件語法

  1. named-checkconf  
  2. named-checkzone “localhost” /var/named/localhost.zone 
  3. named-checkzone “0.0.127.in-addr.arpa” /var/named/named.local 

5.開啓服務並測試

  1. service named start
  2. dig -t A  域名 #測試正解
  3. dig -x ip地址 #測試反解

 

主DNS服務器配置

1.修改主配置文件

  1. vim /etc/name.conf 
  2. zone "a.org" IN { 
  3. type master; 
  4. file "a.org.zone"
  5. };   
  6. zone "0.168.192.in-addr.arpa" IN { 
  7. type master; 
  8. file "192.168.zone"
  9. };   

2.生成解析文件

/var/named/a.org.zone

  1. $TTL    1200 
  2. @               IN      SOA     ns1.a.org.      admin.a.org.    ( 
  3.                                                         2011081601 
  4.                                                         1H 
  5.                                                         10M 
  6.                                                         7D                                                        
  7.                  IN      NS      ns1.a.org.     #NS包括主從兩臺服務器 
  8.                  IN      NS      ns2.a.org. 
  9.                  IN      MX  10  mail.a.org. 
  10. ns1.a.org.       IN      A       192.168.0.72      #兩臺服務器的ip的ip地址,否則主服務器無法向從服務器同步數據 
  11. ns2.a.org.       IN      A       192.168.0.71 
  12. www.a.org.       IN      A       192.168.0.73 
  13. bbs.a.org.       IN      CNAME   www.a.org. 
  14. ftp.a.org.       IN      A       192.168.0.74 

/var/named/192.168.zone

  1. $TTL 1200 
  2. @               IN      SOA     ns1.a.org.      admin.a.org. ( 
  3.                                                         2011081601 
  4.                                                         1H 
  5.                                                         10M 
  6.                                                         7D 
  7.                                                         1D 
  8. @               IN      NS      ns1.a.org.           
  9.                 IN      NS      ns2.a.org. 
  10. 72              IN      PTR     ns1.a.org. 
  11. 71              IN      PTR     ns2.a.org. 
  12. 73              IN      PTR     www.a.org. 
  13. 74              IN      PTR     ftp.a.org. 

 

從DNS服務器配置

1.安裝bind包

  1. yum install bind 

2.複製named.conf、localhost.zone和named.local到本地對應目錄

  1. scp 192.168.0.72:/etc/named.conf /etc/named.conf 
  2. scp 192.168.0.72:/var/bind/localhost.zone /var/bind/localhost.zone 
  3. scp 192.168.0.72:/var/bind/named.local /var/bind/named.local

3.修改主配置文件/etc/named.conf

  1. options { 
  2.     directory "/var/named";          
  3. }; 
  4.          
  5. zone “.” IN  { 
  6. type hint;                                     
  7. file "named.ca";                            
  8. };       
  9.          
  10. zone "localhost" IN { 
  11. type master; 
  12. file "localhost.zone"
  13. };   
  14.          
  15. zone "0.0.127.in-addr.arpa" IN { 
  16. type master; 
  17. file "named.local"
  18. }; 
  19.  
  20. zone "a.org." IN { 
  21. type slave;  #聲明從服務器
  22. file "slaves/a.org.zone";  #同步文件保存路徑
  23. masters { 192.168.0.72; };  #主服務器ip
  24. };                       
  25.  
  26. zone "168.192.in-addr.arpa"  IN { 
  27. type slave; 
  28. file "slaves/192.168.zone"
  29. master { 192.168.0.72; }; 
  30. }; 

4.啓動服務

  1. service named start 

ps:服務正常啓動,且同步成功後/var/named/slaves/下會生成從主服務器同步過來的兩個解析文件

 

子域授權

所謂子域授權就是在原有域下聲明子域DNS。

當前位置:Master DNS Server

在a.org這個域中加入子域DNS服務器,tech.a.org.com

修改/var/named/a.org.zone內容

  1. $TTL    1200 
  2. $ORIGIN     .a.org. 
  3. @               IN      SOA     ns1.a.org.      admin.a.org.    (           #在父域中聲明 
  4.                                                         2011081701 
  5.                                                         1H 
  6.                                                         10M 
  7.                                                         7D 
  8.                                                         1D 
  9.                     IN          NS              ns1.a.org. 
  10.                     IN          NS              ns2.a.org. 
  11.                     IN          MX  10       mail.a.org.      
  12. ns1                 IN          A               192.168.0.72 
  13. ns2                 IN          A               192.168.0.71 
  14. www                 IN          A               192.168.0.73 
  15. bbs                 IN          CNAME    www.a.org. 
  16. ftp                 IN          A               192.168.0.74         
  17. tech.a.org.         IN          NS           ns1.tech.a.org.     #聲明子域DNS server的域名 
  18. ns1.tech.a.org.     IN          A               192.168.0.71        #聲明子域DNS server的ip 

創建子域DNS

1.先創建一個緩存DNS服務器,具體步驟見上文

2.創建/var/named/tech.a.org

  1. $TTL    1200 
  2. $ORIGIN tech.a.org. 
  3. @               IN      SOA     ns1.tech.a.org.      admin.a.org.    ( 
  4.                                                         2011081701 
  5.                                                         1H 
  6.                                                         10M 
  7.                                                         7D 
  8.                                                         1D 
  9. )        
  10.                 IN          NS              ns1.tech.a.org. 
  11.                 IN          NS              ns2.tech.a.org. 
  12.                 IN          MX  10       mail.tech.a.org.     
  13. ns1             IN          A               192.168.0.71 
  14. ns2             IN          A               192.168.0.73  
  15. mail            IN          A               192.168.0.74 
  16. www             IN          A               192.168.1.75 
  17. ftp             IN          A               192.168.1.76         

3.測試

  1. dig -t A ns1.tech.a.org @192.168.0.72 
  2. #通過父域解析子域是可以實現的 
  3. dig -t A ns1.tech.a.org @192.168.0.71 
  4. #通過子域解析自己的也可以實現 
  5. dig -t A ns1.a.org  @192.168.0.71 
  6. #此時通過子域解析父域就解析不到了 

要實現此功能就要依賴轉發實現了。

 

DNS轉發

完全轉發:只要DNS server無法解析的請求就統統轉發到option中定義的forwarders上。

部分轉發:只轉發已經在聲明type forward; 所對應域的解析請求,對於其他域的解析請求按常規方法處理。

forward {only|first} 選項only:如果不能完成解析請求就向forwarder進行轉發,且進行遞歸式轉發(即不成功不停止);選項first:先請求遞歸,若沒有予以響應,使用迭代去找根;

配置完全轉發

  1. vim /etc/named.conf 
  2. options {                       #定義在option則是完全轉發 
  3. directory "/var/named";         
  4. forward first;                  #轉發模式使用first 
  5. forwarders { 192.168.0.72; };   #轉發到192.168.0.72(轉發至父域DNS server) 
  6. }; 

 

配置部分轉發

  1. vim /etc/named.conf 
  2. zone "a.org" IN {                #聲明一個區域 
  3. type forward;                    #定義此區域是一個轉發域,即域名匹配a.org就果斷轉發至192.168.0.72的forwarders上 
  4. forwarders { 192.168.0.72; }; 
  5. }; 

 

視圖View

實現:內網用戶一套地址解析,外網訪問一套地址解析;來自不同的網絡的用戶,根據我們的部署返回不同網絡的主機。

目的:實現內網用戶與外網用戶通過視圖DNS對應兩套不同的解析策略

1.創建具有視圖功能DNS服務器的主配置文件/etc/named.conf

  1. acl internal {                          #聲明內網網段 
  2.         192.168.0.0/24; 
  3.         127.0.0.0/8; 
  4. }; 
  5. acl external {                          #聲明外網網段 
  6.         172.16.0.0/16; 
  7. }; 
  8.  
  9. options { 
  10.     directory "/var/named"
  11.     recursion yes; 
  12. };       
  13.          
  14. view "INNET" {                          #在試圖中定義內網 
  15.     match-clients { internal; };     #定義匹配的client     
  16.     recursion yes;                      #是否遞歸(默認是允許) 
  17.          
  18.         zone "." IN {                   
  19.                     type hint; 
  20.                     file "named.ca"
  21.         }; 
  22.  
  23.  
  24.         zone "a.org"
  25.                     type master; 
  26.                     file "a.org.internal";  #使用解析內網的文件 
  27.         }; 
  28. };     
  29.          
  30. view "EXNET" {                          #在試圖中定義外網 
  31.     match-clients { external; };     #定義匹配的client     
  32.     recursion yes;                      #是否遞歸(默認是允許) 
  33.          
  34.         zone "." IN {                        
  35.                     type hint; 
  36.                     file "named.ca"
  37.         }; 
  38.  
  39.         zone "a.org"
  40.                     type master; 
  41.                     file "a.org.external"#使用解析外網的文件 
  42.         }; 
  43. };       

 

2.編輯兩套不同的解析文件

內網:

  1. vim /var/named/a.org.internal 
  2. $TTL    1200 
  3. $ORIGIN     .a.org. 
  4. @               IN      SOA     ns1.a.org.      admin.a.org.    (            
  5.                                                         2011081701 
  6.                                                         1H 
  7.                                                         10M 
  8.                                                         7D 
  9.                                                         1D 
  10.                         IN          NS              ns1.a.org. 
  11.                         IN          NS              ns2.a.org. 
  12.                         IN          MX  10       mail.a.org.      
  13. ns1                     IN          A               192.168.0.72 
  14. ns2                     IN          A               192.168.0.71 
  15. www                     IN          A               192.168.0.73 
  16. bbs                     IN          CNAME    www.a.org. 
  17. ftp                     IN          A               192.168.0.74 

外網:

  1. vim /var/named/a.org.external 
  2. $TTL    1200 
  3. $ORIGIN     .a.org. 
  4. @               IN      SOA     ns1.a.org.      admin.a.org.    (            
  5.                                                         2011081701 
  6.                                                         1H 
  7.                                                         10M 
  8.                                                         7D 
  9.                                                         1D 
  10.                         IN          NS              ns1.a.org. 
  11.                         IN          NS              ns2.a.org. 
  12.                         IN          MX  10       mail.a.org.      
  13. ns1                     IN          A               172.16.100.72 
  14. ns2                     IN          A               172.16.100.71 
  15. www                     IN          A               172.16.100.73 
  16. bbs                     IN          CNAME    www.a.org. 
  17. ftp                     IN          A               172.16.100.74 

反解文件編輯與主從DNS反解文件相同,在此不再贅述。

3.測試

作者使用VMware虛擬機,在另一臺虛擬機中配置兩塊虛擬網卡分別是192.168.0.0和172.16.100.0網段。

 

  1. dig -t A www.a.org @192.168.0.71 
  2. dig -t A www.a.org @172.16.100.71 
  3. #分別測試兩網段的DNS解析 

 

能夠返回兩套不同的解析結果,說明配置成功。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章