一、什么是DNS服务

  DNS全称(Domain Name System)域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串;DNS通过软件来进行实现域名对IP的解析;这里是通过BIND开源软件实现;BIND是开放源码软件,它允许在Internet上发布域名系统(DNS)信息,并为用户解析DNS查询;该名称绑定代表是"Berkeley Internet Name Domain"BIND是迄今为止使用最广泛的DNS软件在互联网上,提供了一个强大的和稳定的平台之上的组织可以建立分布式计算系统与知识,这些系统完全符合发布的DNS标准;BIND实现DNS协议,而DNS协议是核心互联网标准的一部分。


二、用户的基本上网流程

如下图:

wKioL1kFvK6gvcnVAAEc0WJZWI8326.png


三、DNS工作机制

如下图:

wKiom1kFvbuCjvaHAAiI8tH1sRg388.jpg


四、实践互联网DNS解析

1、实践前的规划

(a)配置流程图:

wKioL1kFv2awvLvFAAG4cCfQE5M143.png


(b)配置主机规划:

编号      主机名   角色  IP地址
 1 linux-node1-root   root 192.168.10.10
 2 linux-node2-com   com 192.168.10.11
 3 linux-node3-icescn-com01 icescn.com 192.168.10.12
 4 linux-node4-icescn-com02 icescn.com 192.168.10.13
 5 dns-proxy   proxy 192.168.10.16
 6 client   client 192.168.10.26


(c)操作系统信息:

系统版本:CentOS6.7  内核版本:2.6.32  系统架构:X86_64  安装状态:Minimal


2、预基础配置

 (a)关闭防火墙及SELINUX安全选项;

   /etc/init.d/iptables stop|status

   sed -i.bak 's@SELINUX=enforcing@SELINUX=disabled@g' /etc/sysconfig/selinux 

   grep '\<SELINUX\>' /etc/sysconfig/selinux

   setenforce 0

   getenforce


 (b)配置HOSTS解析(每个主机都配置);

  cat /etc/hosts

    # DNS service for hosts

    192.168.10.10 linux-node1-root linux-node1

    192.168.10.11 linux-node2-com linux-node2

    192.168.10.12 linux-node3-icescn-com01 linux-node3

    192.168.10.13 linux-node4-icescn-com02 linux-node4

    192.168.10.16 dns-proxy

    192.168.10.85 client


 (c)安装BIND服务软件(每个主机都安装);

   yum install bind -y


 (d)基础选项配置(每个主机都配置);

   cat /etc/named.conf

    options {

      # 监听本地所有网卡IP;

      listen-on port 53 { localhost; };


      # 是否允许其他主机来查询;也可以允许特定的主机来查询;

      allow-query     { any; };


      # 是否允许其他主机来本机抓取记录;"none"为不允许;

      allow-transfer {none;};


      # 关闭相关安全选项;

      dnssec-enable no;

      dnssec-validation no;

    };

   注意:参数"allow-transfer"在主从同步的服务器上需要进行授权从服务器来抓取记录,其他的则禁止;


 (e)配置解析的根文件(每个主机都配置):

   cat /var/named/named.ca

    .                  3600000      NS    A.ROOT-SERVERS.NET.

    A.ROOT-SERVERS.NET.      3600000      A     192.168.10.10

   注意:"根"服务器不需要配置,它需要单独进行配置区域;该文件在生产环境意味着服务器是否能上网解析;


 (f)服务加入开机自启动(每个主机都配置);

   cat /etc/rc.local

    # Bind service start by icescn at 20170430

    /etc/init.d/named start &>/dev/null  


 (g)配置流程:5个配置步骤

   (1)icescn.com --> (2)com --> (3)根 <---> (4)proxy授权代理 <--- (5)client解析


3、配置主从解析记录同步:二级域

MASTER上:

 (a)允许指定主机来同步:

   cat /etc/named.conf

    options {

       allow-transfer {192.168.10.13;};

    };

   named-checkconf # 检查主配置文件是否有语法错误;


 (b)配置区域解析文件:

   cat /etc/named.rfc1912.zones

    zone "icescn.com" IN {

      type master;  # 指定类型为主;

       file "icescn.com.zone";  # 指定区域解析记录文件路径;

    };

   cat /var/named/icescn.com.zone

    $TTL 1D

    @ IN      SOA dns1 admins.icescn.com. ( 2017043000 1D 1w 2w 3w )

    @        NS  dns1

    @        NS  dns2

    dns1      A      192.168.10.12

    dns2      A      192.168.10.13

    www       CNAME   webservers

    webservers  A      192.168.10.27

    bbs       A      192.168.10.28

    blog      A      192.168.10.29

    @        MX 10   mailservers

    mail      CNAME   mailservers

    mailservers A        192.168.10.30

   named-checkzone "icescn.com.zone" /var/named/icescn.com.zone # 检查区域解析文件是否语法错误;

   

   文件语法格式选项:

    $TTL: 表示这条资源记录可以在客户端缓存多久的时间周期;

    @: 表示当前域的名称;

    SOA: 主从同步相关信息;

    NS: 当前的DNS服务器;

    A: 正向解析记录;

    MX: 邮件解析记录;   

    CNAME: 别名解析记录;


  主从同步相关选项:

    2017043000: 解析库版本号;

    1D: 刷新时间;

    1w: 重试时间;多久进行重试,此选项一般是主从同步失败时的重试时间;

    2w: 过期时间;

    3w: 服务不可用时间;


 (c)重新启动服务:

   /etc/init.d/named restart

   ss -tanl | grep "53"


SLAVE上:

 (a)禁止其他主机来本机抓取区域解析记录:

   cat /etc/named.conf

    options {

       allow-transfer {none;};

    };

   named-checkconf


 (b)建立同步区域文件配置:

   cat /etc/named.rfc1912.zones

    zone "icescn.com" IN {

       type slave;  # 指定类型为从;

       masters {192.168.10.12;};  # 指定主服务器地址;

       file "slaves/icescn.com.zone.slave";  # 指定同步的区域记录文件路径;

    };


 (c)重新启动服务:

   /etc/init.d/named restart

   ss -tanl | grep "53"

   ls -l /var/named/slaves/

   注意:"slaves"必须要有写权限,这意味着"named"用户要对此目录有写权限;


DNS-PROXY上:

 测试主从同步的区域解析文件是否正常:

   wKioL1kGvNqhmeANAADrJ936o0E877.png

   for n in {12,13};do echo "# DNS SERVER: $n";for i in "www" "bbs" "blog" "mail";do dig ${i}.icescn.com @192.168.10.${n} | egrep "^(w|b|m)";done;done;


 到此DNS主从同步配置成功!


4、配置COM委派:一级域

COM上:

 (a)建立com的委派区域文件:

   cat /etc/named.rfc1912.zones 

    zone "com" IN {

       type master;  # 指定类型为主;

       file "com.zone";  # 指定区域解析记录文件路径;

    };

   cat /var/named/com.zone

    $TTL 1D

    @ IN      SOA com1 admins.com1.com. ( 2017043000 1D 1w 2w 3w )

     @        NS com1

     icescn.com.  NS icescndns1

    com1      A     192.168.10.11

    icescndns1  A     192.168.10.12


   注意:这里委派是给"icescn.com"二级域;


 (b)检查语法并且启动服务:

   named-checkconf

   named-checkzone "com" /var/named/com.zone

   /etc/init.d/named restart

   ss -tanl | grep "53"


DNS-PROXY上:

 测试COM是否委派成功:

   wKiom1kGw16ikVEqAABYM2lKStc403.png

   dig www.icescn.com @192.168.10.11

   dig bbs.icescn.com @192.168.10.11


5、配置ROOT委派:根

ROOT上:

 (a)建立根的委派区域文件:

   cat /etc/named.conf

     zone "." IN {

      type master;  # 指定根的类型为主(自己为主);

       file "root.zone";  # 指定区域解析记录文件路径;

    };

   cat /var/named/root.zone 

    $TTL 1D

    @ IN     SOA root1 admins.root1.com. ( 2017043000 1D 1w 2w 3w )

    @       NS  root1

    com.     NS  comdns1

    root1    A      192.168.10.10

    comdns1   A      192.168.10.11

   注意:这里委派是给"com"一级域;


 (b)检查语法并且启动服务:

  named-checkconf

  named-checkzone "." /var/named/root.zone 

  /etc/init.d/named restart 

  ss -tanl | grep "53"


DNS-PROXY上:

 测试根是否委派成功:

  wKioL1kGvwPCQC4NAABmxHOlyPc211.png

  dig blog.icescn.com @192.168.10.10

  dig mail.icescn.com @192.168.10.10

  注意:最好清空下上次测试的缓存记录;rndc flush:清空本地解析缓存;


6、ProxyDNS代理配置:解析的根文件(前面配置过了)

 cat /var/named/named.ca

   .                  3600000      NS    A.ROOT-SERVERS.NET.

   A.ROOT-SERVERS.NET.      3600000      A     192.168.10.10

 /etc/init.d/named restart

 ss -tanl | grep "53"


7、客户端访问互联网域名解析

 (a)客户端配置DNS地址

  wKiom1kGwMCiJ53dAAA_RJC24ek808.png

 

 (b)客户端测试解析结果:

  wKioL1kGwRTxLKU_AAChrMvsqtk991.png


 到此,客户端请求互联网DNS解析就配置成功 !


8、命令使用扩展项

 dig命令:

  dig只用于测试dns系统,但不会查询本地hosts文件进行解析;

     使用语法:dig [-t type] name [@SERVER] [query options]

       参数说明:

           @: 指定要解析的DNS主机;

           -t: 指定解析类型;

           -x: 进行反向解析;即IP解析成域名;

       注意:更多使用参数请查询"man"帮助,这里只是列出几个常用的参数;