天天看点

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

继续阅读