天天看點

Linux DNS服務系列之原理介紹及正反向解析配置

前言

我們在通路一個網站的時候,隻要輸入該網站的網址就會跳轉到該網站頁面,而實作這一過程就需要DNS伺服器将域名解析為IP位址,進而實作資料通信。那麼DNS伺服器是如何工作的呢?本系列分為兩部分,本文将詳解DNS服務原理及正反向解析配置。

DNS服務原理詳解

DNS相關知識

DNS:Domain Name Service,域名解析服務

監聽端口:udp/53,tcp/53

應用程式:bind

根域:.

一級域:

            組織域:.com, .org, .net, .mil, .edu, .gov, .info, .cc, .me, .tv

            國家域:.cn, .us, .uk, .jp, .tw, .hk, .iq, .ir

            反向域:.in-addr.arpa

DNS樹狀結構

<a href="http://s3.51cto.com/wyfs02/M02/5D/B5/wKioL1Ujm6DTDAHCAADU75CZLqc087.jpg" target="_blank"></a>

解析方式

正向解析:FQDN --&gt; IP

反向解析:IP --&gt; FQDN

FQDN:(Fully Qualified Domain Name)全稱域名

DNS查詢方式

遞歸:DNS請求被伺服器接受後,如果屬于此伺服器管轄範圍則請求上級伺服器依次傳遞請求,并且依次傳遞結果給送出請求的主機。

1

<code>#用戶端指向的伺服器一定給遞歸服務</code>

疊代: DNS請求被伺服器接受後,如果不是自己管轄範圍,讓用戶端通路根域伺服器,然後跟域通知用戶端去通路下級伺服器,直到最後用戶端通路管轄請求域名的伺服器為止。

<a href="http://s3.51cto.com/wyfs02/M00/5D/BC/wKiom1Ujs6mSGTc8AAHT8A4ZwxU859.jpg" target="_blank"></a>

區域解析庫

資源記錄:rr(resource record)用于此記錄解析的屬性

                SOA: Start Of Authority, 起始授權記錄,一個區域檔案隻能有一個

                 NS:Name Server,域名伺服器

                 MX: Mail eXchange, 郵件交換器,MX記錄有優先級屬性(0-99)

                 A:FQDN --&gt; IP,專用于正向解析庫

                 PTR: IP --&gt; FQDN,專用于反向解析庫

                 AAAA:FQDN --&gt; IPv6,專用于正向解析庫

                 CNAME: Canonical Name,正式名稱

DNS伺服器類型

主DNS伺服器

從DNS伺服器

緩存伺服器

區域傳送

解析庫檔案同步的過程,即輔助DNS伺服器與主DNS伺服器間的區域檔案同步傳輸過程。

完全區域傳送:傳送區域的所有資料,AXFER

增量區域傳送:傳送區域中改變的資料,IXFER

DNS資源記錄格式

格式:

<code>name   [ttl]  IN     RRType    value</code>

SOA記錄:

2

3

4

5

6

7

8

9

10

11

12

<code>name: 區域名稱,通常可以簡寫為@</code>

<code>value: 主DNS伺服器的FQDN,也可以目前區域的區域名稱</code>

<code>注意:任何解析庫檔案的第一個記錄的類型必須是SOA</code>

<code>例如:</code>

<code>@    IN    SOA    ns.scholar.com.    admin.scholar.com.    (</code>

<code>                                     </code><code>serial number ;</code><code>#解析庫版本号,例如2015040701</code>

<code>                                     </code><code>refresh </code><code>time</code>  <code>;</code><code>#重新整理時間,即同步時間</code>

<code>                                     </code><code>retry </code><code>time</code>    <code>;</code><code>#重試時間</code>

<code>                                     </code><code>expire </code><code>time</code>   <code>;</code><code>#過期時間</code>

<code>                                     </code><code>negative answer ttl ;</code><code>#否定答案的統一緩存時長</code>

<code>                                     </code><code>)</code>

NS記錄:

<code>name: 區域名稱</code>

<code>value: DNS伺服器的FQDN</code>

<code>注意:如果有多台NS伺服器,每一個都必須有對應的NS記錄;</code>

<code>      </code><code>對于正向解析檔案來講,每一個NS的FQDN都應該有一個A記錄;</code>

<code>@    IN    NS    ns.scholar.com.</code>

MX記錄:

<code>value: 郵件伺服器的FQDN</code>

<code>優先級:0-99.數字越小,越優先</code>

<code>注意:如果有多台MX伺服器,每一個都必須有對應的MX記錄;但各MX記錄還有優先級屬性</code>

<code>對于正向解析檔案來講,每一個NS的FQDN都應該有一個A記錄;</code>

<code>@    IN    MX 10    mail.scholar.com.</code>

<code>@    IN    MX 20    mail2.scholar.com.</code>

A記錄:

<code>name: FQDN(可簡寫)</code>

<code>value: IP</code>

<code>www    IN    A    172.16.10.10</code>

<code>www    IN    A    172.16.10.100</code>

<code>pop3    IN   A    172.16.10.10</code>

<code>imap    IN   A    172.16.10.10</code>

AAAA記錄:

<code>value: ipv6 IP</code>

CNAME記錄:

<code>name: FQDN</code>

<code>value: FQDN</code>

<code>ftp</code>    <code>IN    CNAME    www</code>

PTR記錄:

<code>name: 逆向的主機IP位址加字尾</code><code>in</code><code>-addr.arpa,例如172.16.10.10</code><code>/16</code><code>, 網絡位址為172.16, </code>

<code>主機位址為10.10,其name為10.10.</code><code>in</code><code>-addr.arpa.(可簡寫)</code>

<code>10    IN    PTR    www.scholar.com.</code>

DNS服務配置之正反向解析

服務程式包介紹

Linux下可提供DNS服務的程式包為bind(bekerley internet name domain)

服務腳本:/etc/rc.d/init.d/named

主配置檔案:/etc/named.conf, /etc/named.rfc1912.zones

區域解析庫檔案:/var/named/zone_name.zone

主配置檔案中通常有三個區域:根、localhost、127.0.0.1的反向區域

域類型:主域(master)、從域(slave)、緩存域(hint)、轉發域(forward)

實戰正反向解析配置

案例要求:

DNS伺服器位址:172.16.10.10

www:172.16.10.10

mail:172.168.10.12

pop:mail别名,指向mail

ftp:www别名,指向www

要求可以實作正反向解析

編輯主配置檔案,添加正向區域和反向區域

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

<code>[root@scholar ~]</code><code># vim /etc/named.conf </code>

<code>options {                                                </code><code>#全局配置</code>

<code>        </code><code>//listen-on</code> <code>port 53 { 127.0.0.1; };              </code><code>#注釋後監聽全部IP的53端口</code>

<code>        </code><code>//listen-on-v6</code> <code>port 53 { ::1; };</code>

<code>        </code><code>directory       </code><code>"/var/named"</code><code>;                    </code><code>#區域檔案目錄</code>

<code>        </code><code>dump-</code><code>file</code>       <code>"/var/named/data/cache_dump.db"</code><code>;</code>

<code>        </code><code>statistics-</code><code>file</code> <code>"/var/named/data/named_stats.txt"</code><code>;</code>

<code>        </code><code>memstatistics-</code><code>file</code> <code>"/var/named/data/named_mem_stats.txt"</code><code>;</code>

<code>        </code><code>//allow-query</code>     <code>{ localhost; };          </code><code>#通路控制,注釋後允許所有IP通路</code>

<code>        </code><code>recursion </code><code>yes</code><code>;                             </code><code>#是否遞歸</code>

<code>        </code><code>//dnssec-enable</code> <code>yes</code><code>;</code>

<code>        </code><code>//dnssec-validation</code> <code>yes</code><code>;</code>

<code>        </code><code>//dnssec-lookaside</code> <code>auto;</code>

<code>        </code><code>/* Path to ISC DLV key */</code>

<code>        </code><code>bindkeys-</code><code>file</code> <code>"/etc/named.iscdlv.key"</code><code>;</code>

<code>        </code><code>managed-keys-directory </code><code>"/var/named/dynamic"</code><code>;</code>

<code>};</code>

<code>logging {                                           </code><code>#定義日志</code>

<code>        </code><code>channel default_debug {</code>

<code>                </code><code>file</code> <code>"data/named.run"</code><code>;</code>

<code>                </code><code>severity dynamic;</code>

<code>        </code><code>};</code>

<code>zone </code><code>"."</code> <code>IN {</code>

<code>        </code><code>type</code> <code>hint;</code>

<code>        </code><code>file</code> <code>"named.ca"</code><code>;</code>

<code>zone </code><code>"scholar.com"</code> <code>IN {                             </code><code>#正向區域</code>

<code>        </code><code>type</code> <code>master;</code>

<code>        </code><code>file</code> <code>"scholar.com.zone"</code><code>;</code>

<code>zone </code><code>"10.16.172.in-addr.arpa"</code> <code>IN {                  </code><code>#反向區域</code>

<code>        </code><code>file</code> <code>"172.16.10.zone"</code><code>;</code>

<code>}; </code>

<code>include </code><code>"/etc/named.rfc1912.zones"</code><code>;                 </code>

<code>//include</code> <code>"/etc/named.root.key"</code><code>;</code>

建立正向區域檔案

<code>[root@scholar named]</code><code># vim scholar.com.zone   #必須與區域檔案名保持一緻</code>

<code>$TTL 3600</code>

<code>@       IN      SOA     dns.scholar.com.        admin.scholar.com. (</code>

<code>                                                        </code><code>2015040701</code>

<code>                                                        </code><code>2H</code>

<code>                                                        </code><code>10M</code>

<code>                                                        </code><code>7D</code>

<code>                                                        </code><code>1D )</code>

<code>@       IN      NS      dns</code>

<code>@       IN      MX 10   mail</code>

<code>dns     IN      A       172.16.10.10</code>

<code>mail    IN      A       172.16.10.12</code>

<code>www     IN      A       172.16.10.10</code>

<code>pop     IN      CNAME   mail</code>

<code>ftp</code>     <code>IN      CNAME   www</code>

建立反向區域檔案

<code>[root@scholar named]</code><code># vim 172.16.10.zone    #必須與區域檔案名保持一緻</code>

<code>@       IN      NS      dns.scholar.com.</code>

<code>10      IN      PTR     dns.scholar.com.</code>

<code>12      IN      PTR     mail.scholar.com.</code>

<code>10      IN      PTR     www.scholar.com.</code>

修改權限及屬組

<a href="http://s3.51cto.com/wyfs02/M02/5D/BE/wKiom1Uj4ASBDahIAAHr6X_dfFs757.jpg" target="_blank"></a>

檢查文法,啟動服務并設定開機自啟

<a href="http://s3.51cto.com/wyfs02/M02/5D/BE/wKiom1Uj4gvh4xDoAAGoCPMKA9o370.jpg" target="_blank"></a>

檢視tcp和upd的53端口是否開啟

<a href="http://s3.51cto.com/wyfs02/M00/5D/BE/wKiom1Uj4rjT2t5GAACM16TTrh4308.jpg" target="_blank"></a>

正向解析測試

<a href="http://s3.51cto.com/wyfs02/M02/5D/BE/wKiom1Uj5XPAAffxAAHtMqEYfRw707.jpg" target="_blank"></a>

反向解析測試

<a href="http://s3.51cto.com/wyfs02/M00/5D/BE/wKiom1Uj5rvxSiMvAAIczjZgdtk946.jpg" target="_blank"></a>

The end

經過以上測試,正向反向都可以成功解析,至此DNS服務的基本服務算是完成了,測試指令除了dig還可使用nslookup等,想了解dig和其它測試指令指令想自行查手冊,這裡不做詳解了。第二部分将會講解主從複制,子域授權和轉發以及view,如有興趣請關注下文。

以上僅為個人學習整理,如有錯漏,大神勿噴~~~

本文轉自 北城書生  51CTO部落格,原文連結:http://blog.51cto.com/scholar/1629834

繼續閱讀