linux虚拟机玩转DNS

      经历过博客被关闭的风波,思绪不是那么清晰了,昨天研究了一下DNS服务,发现还挺好玩的。

     声明:本文借鉴了下面两位博主的博客:

        http://redking.blog.51cto.com/27212/146708

        http://evolution.blog.51cto.com/3343305/643520


一、DNS的基本工作原理:

    DNS是域名解析服务:domain name service

        正向解析:从域名到IP的解析

        反向解析:从IP到域名的解析

    一次域名解析过程:

       主机发出解析www.mm.com 的请求---->查找主机hosts文件的缓存记录---->查找管理本域的DNS服务器---->查找根服务器---->遍历查找----->找到www.mm.com的ip地址---->根DNS服务器把结果反馈给发出请求的下级DNS服务器---->DNS服务器将结果缓存并返回给主机---->主机把结果缓存并开始链接 

    世界上的十三个根DNS服务器:

    一个位于荷兰负责欧洲的域名解析

    一个位于日本负责亚太地区域名解析

    其余的都位于美国,负责全球其他地方的域名解析

   DNS服务器的多层级域名分类


技术分享

    DNS记录的类型:

         A:Address 域名向ip地址转换的记录;

         PTR:Printer ip地址向域名转换的记录;

         NS:代表域内的dns服务器;

         MX:代表域内的邮件服务器;

         CNAME:域名的别名;

         SOA:start of authority用于标示域内主DNS服务器。

技术分享


配置文件:etc/hosts #当前主机上缓存下来的一些域名对应ip的记录

          etc/named.conf #主配置文件,定义了所有文件存放的位置

          var/named #工作目录

          etc/resolv.conf #DNS服务器的缓存记录

          etc/nsswitch.conf #定义了先读取hosts缓存,还是先读取resolv缓存

DNS类型:type

        master主DNS

        slave从DNS

        forward转发DNS用于子域转发


二、搭建主DNS服务器步骤

    1. 首先将主机名称修改为符合FQDN格式的名字

          (1)hostname NAME

          (2)echo "NAME" > /proc/sysconfig/hostname

           (3)修改/etc/sysconfig/network文件

          (4)修改/etc/hosts文件

    2.安装named服务的rpm包bind,或者编译安装bind

    3.配置主DNS的主配置文件etc/named.conf;

         使用ss -tunl | grep "53" 查看53端口是不是在tcp和udp上监听

         使用named-checkconf 检查主配置文件有没有语法错误

    4.在/etc/named.rfc1912.zones中定义正向解析区域和反向解析区域;

    5.在/var/named/目录下创建正向解析区域文件,反向解析区域文件;

         使用named-checkzone "区域" /var/named/*zone检查区域文件有没有语法错误

    6.启动named服务 service named start


三、主DNS配置文件:

    1.主配置文件的定义

            listen-on port 53 { 172.16.13.100; };主DNS服务器IP地址53端口

            directory  "/var/named";             定义zone的工作目录

            recursion yes;                       定义允许递归查询

            allow-query { any; };                定义白名单(谁可以通过此DNS解析)           

     logging       file "data/named.run";        日志文件

      zone "." IN {

        type hint;                              定义根DNS,必须定义

        file "named.ca";

       };     

      include "/etc/named.rfc1912.zones";       将所有的zone集中在此文件配置

技术分享


    2./etc/named.rfc1912.zones的定义

在此文件里我们只需定义两个解析区域即可

         (1)正向解析区域 wuhf.com

          (2)方向解析区域 13.16.172.in-addr.apra  (此为方向解析区域的固定格式)

技术分享


   3.创建并编辑正向解析区域文件/var/named/wuhf.com.zone

这里我们要注意文件的格式 $TTL 1200 宏定义1200秒更新一次

                         $ORIGIN 定义wuhf.com.字段,下面可以省略以此结尾的名字

            2015042404是版本号,日过此号增加一位,就会通知从服务器过来更新版本

            30M 定义从服务器30分钟过来同步一次数据

            10M 定义如果从服务器同步失败后,多久过来再次尝试连接主服务器

            1W  定义从服务器如果1周内都没有接连到主服务器的话就宣布自己的数据作废

            3H  定义如果解析失败的话,这个失败的结果放在缓存中,3小时候缓存失效

技术分享


    4.创建并编辑反向解析记录区域文件/var/named/172.16.zone

技术分享

    5.检查这些文件有没有语法错误

技术分享

技术分享

  6.开启named的服务  service named start

         重读配置文件  rndc reload

 7.使用dig工具测试正方向解析成不成功

     正向解析 

技术分享

技术分享

     反向解析

技术分享

技术分享

        

          


三、搭建从DNS服务器,实现主从同步

   1.在主服务器的解析区域里添加从服务器的名字和A记录(ip)

 技术分享

   2.在新的虚拟机里装bind工具

   3.新虚拟机,ip地址为172.16.13.101,在此主机上编辑配置文件/etc/named.conf

 技术分享

   4.编辑区域文件/etc/named.rfc1912.zones

 技术分享

   5.使用named-checkconf检查配置文件语法错误

   6.使用service named start,开启named服务

   7.使用rndc reload从主服务器上更新正反向解析文件到本地/var/named/slaves/

 技术分享


四 、搭建子DNS服务器,实现子域查询

   1.在主服务器的解析区域里添加子服务器的名字和A记录(ip)

 技术分享

   2.在新的虚拟机里装bind工具

       yum install bind

   3.新虚拟机,ip地址为172.16.12.20,在此主机上编辑配置文件/etc/named.conf

     技术分享

   4.编辑区域文件/etc/named.rfc1912.zones

 技术分享

   5.创建/var/named/目录下的正反向解析文件

  

技术分享

技术分享


   6.使用named-checkconf检查配置文件语法错误

     使用named-checkzone命令 检查正反向解析文件有没有语法错误

   7.使用service named start,开启named服务

   8.使用dig命令尝试子域解析父域,父域解析子域

技术分享

技术分享

 


说明:子DNS服务器搭建与父DNS服务器搭建是一样的步骤,只不过要在/etc/named.conf下的option选项定义全局转发,或者在/etc/named.rfc1912.zones中添加一个转发区域实现区域转发,这样就可以实现在子域中解析父域的地址不用去寻找根了。

     完全转发:只要DNS server无法解析的请求就统统转发到option中定义的forwarders上

                   option { forward first|only;

                        forwarders { 父域地址;}; };

     部分转发:只转发已经在声明type forward; 所对应域的解析请求,对于其他域的解析请求按常规方法处理

                 zone "wuhf.com" IN { 

                      type forward;

                      forward first|only;

                      forwarders { 父域地址; };  };

    first:先请求递归,若没有予以响应,使用迭代去找根

    only:如果想forwarders转发的请求没有的得到相应,就放弃解析并返回错误结果。

   


、视图VIEW

   将内网与外网分隔开,实现内网用户访问域名www.bai.com 将引导至内网的主机地址,外网用户要访      问 www.bai.com  将被引导至不一样的外网地址

   实现内网用户与外网用户访问同样的域名,被视图解析到不同的地址上。

   在国内,像某宝的网站,每个省得用户访问的域名就是被解析到用户所在省份的服务器上,可能还会细分到联通、电信网段的用户,根据省份网段不同,被分配到不一样的服务器上。如:河南省联通用户输入某宝的域名后,会被解析到河南省联通机房的某宝服务器上。

   实现步骤:

   1.创建具有视图功能的主配置文件

       在/etc/named.conf中定义内外网的区域,使用 val 访问控制定义

定义内网段       acl internal {

                      192.168.0.0/24;

                      127.0.0.1/8;

                    };

定义外网段       acl external {

                    172.16.0.0/16;

                  };

定义工作目录     options {

                 directory "/var/named";

                 recursion yes;

                   };

技术分享   

      在/etc/named.rfc1912zones中创建view视图

定义内网view      view "inter" {

                         match-clients { internal; };

                          recursion yes;

                       zone "." IN {

                             type hint;

                             file "named.ca";

                         };

                        zone "wuhf.com" IN {

                              type master;

                              file "wuhf.inter.zone";

                            };

                      };

定义外网view      

                   view "exter" {

                         match-clients { external; };

                          recursion yes;

                       zone "." IN {

                             type hint;

                             file "named.ca";

                         };

                        zone "wuhf.com" IN {

                              type master;

                              file "wuhf.exter.zone";

                            };

                      };

技术分享


   2.在每个视图中定义相同的区域,在相同的区域中创建不同的区域文件,区域文件中相同的域名,解析     成不同的地址

      vim /var/named/wuhf.inter.zone

          $TTL 1200

          $ORIGIN wuhf.com.

          @           IN   SOA     ns1.wuhf.com.   admin.wuhf.com. (

                                                        2015042701

                                                        30M

                                                        10M

                                                        7D

                                                        1H   )

                      IN   NS        ns1

           ns1        IN   A         192.168.0.103     

           www        IN   A         192.168.0.123

  技术分享      

      vim /var/named/wuhf.exter.zone

          $TTL 1200

          $ORIGIN wuhf.com.

          @           IN   SOA     ns1.wuhf.com.   admin.wuhf.com. (

                                                        2015042701

                                                        30M

                                                        10M

                                                        7D

                                                        1H   )

                      IN   NS        ns1

           ns1        IN   A         172.16.12.12     

           www        IN   A         172.16.12.123   

  技术分享

   3.测试,在一台属于内网的主机和一台属于外网的主机上使用dig测试能不能正向解析

     还有另一个测试办法,一台虚拟机配置两块网卡,一个设置为192.168.0.0/24网段地址,一个设置为172.16.0.0/16网段地址

先在虚拟机上添加一块网卡,然后再/etc/sysconfig/network-scripts/目录下,cp ifcfg-eth0 ifcfg-eth1,修改eth1里面的配置文件,设定eth0地址为172.16.12.20,设定eth1地址为192.168.13.13

(1)使用ip link set eth1 down,关闭eth1,使用dig www.wuhf.com @172.16.12.12测试,结果被视图解析到外网网段172.16.0.0

技术分享

(2)使用ip link set eth0 down,关闭eth1,使用ip link set eth1 up,开启eth1;使用dig www.wuhf.com @172.16.12.12测试,结果被视图解析到内网网段192.168.0.0
    注意:这里测试内网的dig命令却指向172.16.12.12,没有使用 dig www.wuhf.com @192.168.0.103,是因为我们的测试服务器没有陪双网卡,只有一个外网的地址,所以......将就一下吧。

技术分享



六、DNS配置所需其他知识

关于DNS的安全访问控制指令:

         将它们写在配置文件的options中实现访问控制:

                        allow-query {}: 允许查询的主机;白名单;

allow-transfer {}:允许区域传送的主机;白名单;

allow-recursion {}: 允许递归的主机;

allow-update {}: 允许更新区域数据库中的内容;


关于测试命令dig、nslookup、host:

(1)dig命令

   dig [-t type] name [@SERVER] [query options]

dig用于测试dns系统,因此,不会查询hosts文件进行解析;

查询选项:

+[no]trace:跟踪解析过程

+[no]recurse:进行递归解析

测试反向解析:

dig -x IP @SERVER

模拟区域传送:

       dig -t axfr ZONE_NAME @SERVER

例如:dig -t axfr magedu.com @172.16.100.11

(2)host命令:

host [-t type] name [SERVER]

(3)nslookup命令:

nslookup [-option] [name | -] [server]

交互式模式:

nslookup>

server IP: 指明使用哪个DNS server进行查询;

set q=RR_TYPE: 指明查询的资源记录类型;

NAME: 要查询的名称;

关于数据同步命令rndc

rndc:

rndc --> rndc (953/tcp)

rndc COMMAND

COMMAND:

reload: 重载主配置文件和区域解析库文件

reload zone: 重载区域解析库文件

retransfer zone: 手动启动区域传送过程,而不管序列号是否增加;

notify zone: 重新对区域传送发通知;

reconfig: 重载主配置文件

querylog: 开启或关闭查询日志;

trace: 递增debug级别;

trace LEVEL: 指定使用的级别;

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。