DNS实战--1

DNS(Domain Name System,域名系统)
因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户方便的访问互联网,而不用去记住能够被机器读取的IP数串。
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析),DNS协议运行在UDP协议之上,使用端口号53
DNS的分布式数据库是以域名为索引的,每个域名实际上就是一颗很大的逆向数中路径,这棵逆向树成为域名空间(domain name space)
树的最大深度不超过127层,树种每个节点都有一个可以长达63个字符的文本符号。

 

简单地说就是一个IP地址和域名之间的转换系统,方便用户通过域名访问正确的服务地址,而不用记住不易区分的具体IP。DNS协议运行在UDP协议之上,使用端口53。

以访问www.qq.com为例,当用户在浏览器中输入网址点击回车以后,会经过以下查找IP过程,也就是DNS解析过程:
1)本地计算机host文件
2)如果本地没有解析记录,则开始递归查询本地域名服务器LOCAL DNS(也就是你网络中配置的首选和备选DNS)
3)LDNS也没有则会去查询根服务器,并开始迭代查询顶级域下的二级域或者三级域,直到查找到想要解析的域名
4)找到www.qq.com对应的ns域名地址后开始返回给LDNS,LDNS缓存一份记录后返回给计算机
5)计算机拿到地址直接对该地址发起访问请求,完成本次DNS解析过程。

 

常见的DNS服务软件
DNSMASQ
DNSmasq是一款小巧且方便的DNS和DHCP配置工具,适用于本地小型网络本地DNS解析,很多公司会在每台服务器上起着dnsmasq,来充当本地dns缓存服务,来提高dns解析性能同时减轻dnsserver压力
BIND
BIND是目前为止应用最为广泛的DNS部署服务开源软件,特点就是稳定、高效
HTTPDNS
移动解析,基于Http协议向云DNS服务器发送域名解析请求,替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式,可以避免Local DNS造成的域名劫持和跨网访问问题,解决移动互联网服务中域名解析异常带来的困扰
这几年HTTPDNS开始兴起,目前最主要的应用领域还是移动app上解决切换流量数据时,造成新旧数据不一致的情况

 

DNS在企业服务集群中的作用
DNS作为整个集群中的基础服务性质存在,即可以完全独立服务于本地集群的IP解析,也可以部署位于外网环境中供公网解析使用;在集群部署环境配置中使用域名解析的好处就是当服务器迁移或者IP变更时,使用相同的主机域名,就不需要更改大量的应用配置。

 

DNS的分类
主DNS服务器:就是一台存储着原始资料的DNS服务器
从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器,也称辅助DNS服务器
缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器,同时缓存查询回来的结果,也叫递归服务器。
转发器:这台DNS发现非本机负责的请求后,不再向根发起请求,而是直接转发给指定的一台或多台服务器,自身并不保存查询结果

 

大中型网络DNS集群

 

实验环境

10.0.1.161 m01 主DNS(Master DNS)
10.0.1.162 m02 从DNS(Slave DNS)

系统版本号

[root@linux-node1 ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@linux-node1 ~]# uname -rm
2.6.32-504.el6.x86_64 x86_64
[root@linux-node1 ~]# 

[root@linux-node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.1.161    linux-node1.example.com   linux-node1
10.0.1.162    linux-node2.example.com   linux-node2
[root@linux-node1 ~]# 

 

DIG、NSLOOKUP、HOST介绍
 
host 命令,它通过网卡里配置的dns查询百度的域名解析
[root@linux-node1 ~]# host baidu.com
baidu.com has address 180.149.132.47
baidu.com has address 220.181.57.217
baidu.com has address 111.13.101.208
baidu.com has address 123.125.114.144
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 10 mx.n.shifen.com.
baidu.com mail is handled by 20 mx1.baidu.com.
[root@linux-node1 ~]# 

  

nslookup显示的更多,会把nameserver也显示出来

[root@linux-node1 ~]# nslookup baidu.com
Server:		10.0.2.15
Address:	10.0.2.15#53

Non-authoritative answer:
Name:	baidu.com
Address: 111.13.101.208
Name:	baidu.com
Address: 123.125.114.144
Name:	baidu.com
Address: 180.149.132.47
Name:	baidu.com
Address: 220.181.57.217

[root@linux-node1 ~]# 

  

dig命令

[root@linux-node1 ~]# dig baidu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22215
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;baidu.com.			IN	A

;; ANSWER SECTION:
baidu.com.		59	IN	A	123.125.114.144
baidu.com.		59	IN	A	180.149.132.47
baidu.com.		59	IN	A	220.181.57.217
baidu.com.		59	IN	A	111.13.101.208

;; Query time: 1 msec
;; SERVER: 10.0.2.15#53(10.0.2.15)
;; WHEN: Sat May 13 21:41:26 2017
;; MSG SIZE  rcvd: 91

[root@linux-node1 ~]# 

  

主dns上安装bind

[root@linux-node1 yum.repos.d]#  yum install -y bind-utils bind bind-devel bind-chroot
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.163.com
 * updates: mirrors.aliyun.com
Package 32:bind-utils-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Package 32:bind-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Package 32:bind-devel-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Package 32:bind-chroot-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Nothing to do
[root@linux-node1 yum.repos.d]# 

  

bind 9.8版本有个dns漏洞。放公网慎用。
 
检查安装的bind
[root@linux-node1 yum.repos.d]# rpm -qa | grep "^bind"
bind-chroot-9.8.2-0.62.rc1.el6_9.2.x86_64
bind-9.8.2-0.62.rc1.el6_9.2.x86_64
bind-libs-9.8.2-0.62.rc1.el6_9.2.x86_64
bind-devel-9.8.2-0.62.rc1.el6_9.2.x86_64
bind-utils-9.8.2-0.62.rc1.el6_9.2.x86_64
[root@linux-node1 yum.repos.d]# 

  

编辑dns主配置文件,清空原先的内容。新的内容写如下

[root@linux-node1 ~]# vim /etc/named.conf 
[root@linux-node1 ~]# cat /etc/named.conf 
 options {
  version "1.1.1";
  listen-on port 53 {any;};
  directory "/var/named/chroot/etc/";
  pid-file "/var/named/chroot/var/run/named/named.pid";
  allow-query { any; };
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";
  zone-statistics yes;
  memstatistics-file "log/mem_stats";
  empty-zones-enable no;
  forwarders {202.106.196.115;8.8.8.8; };
};
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {
  channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};
include "/var/named/chroot/etc/view.conf";
[root@linux-node1 ~]# 

  

 

上面主配置文件详解

options {
  version "1.1.1";
  listen-on port 53 {any;};     #监控端口
  directory "/var/named/chroot/etc/";   #A记录等配置文件所在的目录
  pid-file "/var/named/chroot/var/run/named/named.pid";  服务器来的进程号
  allow-query { any; };      #允许谁访问{}可以写IP
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";  #可以看到DNS解析记录的数量,成功率有多少域(可以做监控)DNS状态等
  zone-statistics yes;        #配成yes之后上面才会写入
  memstatistics-file "log/mem_stats";     #内存状态
  empty-zones-enable no;         
  forwarders {202.106.196.115;8.8.8.8; };  转发(如果我这没有域名就转发)
};
key "rndc-key" {     认证的密钥
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {                      
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {                    日志  警告路径 (日志分2种)
  channel warning {           日志的相关信息
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {   访问日志相关信息
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {     #默认日志警告级别
    warning;
  };
  category queries {    #访问日志级别
    general_dns;
  };
};
include "/var/named/chroot/etc/view.conf";  其他域的配置文件目录(view.conf可以实现简单的只能DNS的功能,为以后的只能DNS做准备)

  

 

除了这个文件的配置,dns的一些其他的配置,比如zone的配置。你可以使用rndc reload生效,这个就是rndc的作用

logging是关于日志设置项
versions 10 size 10m 表示一共保存10个日志,每个日志10MB
file "/var/named/chroot/var/log/dns_log" versions 10 size 10m;

 

下面default记录在warning上面
queries保存在了general上面
下面2个category调用了上面2个channel,类似于函数的作用
  channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 10m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };

  

 

这个文件可以看到dns当前解析的数量和成功率
Statistics-file "/var/named/chroot/var/log/named_stats";

  

创建rndc.key和rndc.conf文件

它首先调用rndc-key,下面链接953端口
[root@linux-node1 ~]# cat /etc/rndc.key 
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
[root@linux-node1 ~]# 

[root@linux-node1 ~]# cat /etc/rndc.conf 
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
options {
   default-key "rndc-key";
   default-server 127.0.0.1;
   default-port 953;
};
[root@linux-node1 ~]# 

  

编辑view.conf文件

引号内的View就是个标记说明,你可以自己改,搞智能dns的时候。你可以改成dianxin liantong等
type master 主从dns,这里是主dns

下面的allow-transfer表示允许下面主机来取数据,注意不是请求dns解析,而是用于从dns请求配置文件里的数据

also-notify表示文件更新时,执行rndc reload时通知哪个从dns来取数据。这样就达到了主从同步的效果

[root@linux-node1 ~]# cat /var/named/chroot/etc/view.conf 
view "View" {
  zone "lnh.com" {
       type master;
       file "lnh.com.zone";
       allow-transfer {
           10.0.1.162;
       };
       notify yes;
       also-notify {
           10.0.1.162;
       };
  };
};
[root@linux-node1 ~]# 

  

 
编辑lnh.com.zone
 
这个zone文件是和上面的view里面对应的,和view文件在同一个目录下
SOA 可以理解为一段自己dns做备注说明的文本,一般与ns一致 
$ORIGIN 表示配置生效的域
TTL的话,内网用的话可以调整时间短点,外网用的话,调整时间长一点
[root@linux-node1 ~]# vim /var/named/chroot/etc/lnh.com.zone
[root@linux-node1 ~]# cat /var/named/chroot/etc/lnh.com.zone 
$ORIGIN .
$TTL 3600     ; 1 hour
lnh.com            IN SOA op.lnh.com. dns.lnh.com. (
                        2003    ; serial
                        900     ; refresh (15 minutes)
                        600     ; retry (10 minutes)
                        86400   ; expire (1 day)
                        3600    ; minimum (1 hour)
                        )
       NS   op.lnh.com.
$ORIGIN lnh.com.
shanks  A 1.2.3.4
op      A 1.2.3.4
a       A 1.2.3.4
a       A 192.168.122.101
[root@linux-node1 ~]# 

  

上面关于zone文件解释说明

1、Serial:只是一个序号,但这个序号可被用来作为slave与master更新的依据。举例来说。
master序号100 但salve序号为90时,那么这个zonefile的资料就会被传送到slave来更新了
由于序号代表新旧资料,通常我们建议可以利用日期来设定!举例来说,在2006/10/20
所更新文件,可以用2006102001作为序号代表!(yyyymmddnn,nn代表这一天第几次修改)
2、Refresh:除了根据Serial来判断新旧之外,我们可以利用这个refresh(更新)命令,slave多久进行一次主动更新。
3、Retry:如果到了Refresh的时间,但是slave却无法连接到master时,那么在多久之后,slave会再次的主动尝试与主机连线
4、Expire:如果slave一直无法与master连接上,那么经过多久的时间之后,则命令slave不要再连接master了!也就是说,此时我们假设master DNS
可能遇到重大问题而无法上线,则等待系统管理员处理完毕后,再重新来到slave DNS重新启动bind吧
5、Minimun:这个就有点像是TTL!

区域解析库文件的简要说明:
常见的正解文件 RR 相关信息
[domain]        IN           [[RR type]            [RR data]]
主机名.         IN            A                    IPv4 的 IP 地址
主机名.         IN            AAAA                 IPv6 的 IP 地址
区域名.         IN            NS                   管理这个领域名的服务器主机名字.
区域名.         IN            SOA                  管理这个领域名的七个重要参数(如上说明)
区域名.         IN            MX     顺序数字      接收邮件的服务器主机名字
主机别名.       IN            CNAME                实际代表这个主机别名的主机名字.
单位:W=周、D=日、H=小时、M=分钟。
  
$TTL   86400             宏定义全局TTL时间
@      IN     SOA    ns.chinasoft.com.  root ( # ns.chinasoft.com. 是DNS服务器的名称
                         0               ; serial (d. adams) 仅作为序列号而已
                        1D               ;refresh          服务器的更新时间
                        15M              ; retry           重新更新时间间隔
                        1W               ; expiry          多久之后宣布失败
                        1H )             ;minimum          相当于缓存记忆时间
@      IN              NS                ns.chinasoft.com.
@      IN              MX      5         mail.chinasoft.com.(5为优先级别)
ns     IN              A                 1.2.3.4
www    IN              A                 1.2.3.4
www    IN              A                 1.2.3.4
mail   IN              A                 1.2.3.4

  

 

修改目录权限,并启动服务
[root@linux-node1 var]# cd /var && chown -R named.named named/
[root@linux-node1 var]# /etc/init.d/named start
Starting named:                                            [  OK  ]
[root@linux-node1 var]# chkconfig named on
[root@linux-node1 var]# 

  

检查端口

[root@linux-node1 var]# netstat -lntup | grep 53
tcp        0      0 10.0.1.161:53               0.0.0.0:*                   LISTEN      7060/named          
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      7060/named          
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      7060/named          
udp        0      0 10.0.1.161:53               0.0.0.0:*                               7060/named          
udp        0      0 127.0.0.1:53                0.0.0.0:*                               7060/named          
[root@linux-node1 var]# 

  

如果对zone文件更改,可以使用rndc reload让其生效

[root@linux-node1 var]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 var]# 

  

使用dig命令测试

[root@linux-node1 var]# dig @127.0.0.1 a.lnh.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> @127.0.0.1 a.lnh.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57403
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;a.lnh.com.			IN	A

;; ANSWER SECTION:
a.lnh.com.		3600	IN	A	192.168.122.101
a.lnh.com.		3600	IN	A	1.2.3.4

;; AUTHORITY SECTION:
lnh.com.		3600	IN	NS	op.lnh.com.

;; ADDITIONAL SECTION:
op.lnh.com.		3600	IN	A	1.2.3.4

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon May 15 22:20:39 2017
;; MSG SIZE  rcvd: 92

[root@linux-node1 var]# 

  

 

从DNS服务器安装
下面来配置一台从DNS服务器
安装软件(同主服务器)
[root@linux-node2 yum.repos.d]# yum install bind-utils bind bind-devel bind-chroot  -y
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.ustc.edu.cn
 * extras: mirrors.zju.edu.cn
 * updates: mirrors.aliyun.com
Package 32:bind-utils-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Package 32:bind-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Package 32:bind-devel-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Package 32:bind-chroot-9.8.2-0.62.rc1.el6_9.2.x86_64 already installed and latest version
Nothing to do
[root@linux-node2 yum.repos.d]# 
编辑named.conf(同主服务器)
编辑rndc-key(同主服务器)
编辑rndc.cnf(同主服务器)
[root@linux-node1 var]# scp /etc/named.conf 10.0.1.162:/etc/
root@10.0.1.162's password: 
named.conf                                                     100% 1121     1.1KB/s   00:00    
[root@linux-node1 var]# scp /etc/rndc.key 10.0.1.162:/etc/
root@10.0.1.162's password: 
rndc.key                                                       100%   91     0.1KB/s   00:00    
[root@linux-node1 var]# scp /etc/rndc.conf 10.0.1.162:/etc/
root@10.0.1.162's password: 
rndc.conf                                                      100%  181     0.2KB/s   00:00    
[root@linux-node1 var]# 

  

从dns编辑view.conf,这里和主的dns服务器配置不一样
[root@linux-node2 ~]# vim /var/named/chroot/etc/view.conf
[root@linux-node2 ~]# cat /var/named/chroot/etc/view.conf
view "SlaveView" {
  zone "lnh.com" {
       type slave;
       masters {10.0.1.161;};
       file "slave.lnh.com.zone";
  };
};
[root@linux-node2 ~]# 

  

一个master可以跟多少个slave呢。其实没太严格限制。部署了20多个slave都没问题
 
更改属主并启动
[root@linux-node2 ~]# cd /var && chown -R named.named named/
[root@linux-node2 var]# /etc/init.d/named start
Starting named:                                            [  OK  ]
[root@linux-node2 var]# 
[root@linux-node2 var]# chkconfig named on
[root@linux-node2 var]# 

  

它自动生成从的zone文件

[root@linux-node2 var]# ll /var/named/chroot/etc/
total 676
-rw-r--r--  1 root  root     388 Sep 17  2014 localtime
drwxr-x---  2 root  named   4096 May  9 21:43 named
-rw-r-----  1 root  named   1891 May 14 19:05 named.conf
-rw-r--r--  1 root  named   2389 May  9 21:43 named.iscdlv.key
-rw-r-----  1 root  named    931 Jun 21  2007 named.rfc1912.zones
-rw-r--r--  1 root  named    487 Jul 19  2010 named.root.key
drwxr-x---  3 named named   4096 May 14 19:03 pki
-rw-r--r--. 1 root  root    6455 Jan 12  2010 protocols
-rw-r--r--  1 root  root      90 May 14 19:06 rndc.conf
-rw-r--r--. 1 root  root  641020 Oct  2  2013 services
-rw-r--r--  1 named named    326 May 14 20:00 slave.lnh.com.zone
-rw-r--r--  1 named named    129 May 14 20:00 view.conf

  

当你的目录下面有这个文件的时候,说明你的主从同步已经生效了
从服务器本来没这个文件,它是从master同步过来的
[root@linux-node2 var]# cat /var/named/chroot/etc/slave.lnh.com.zone 
$ORIGIN .
$TTL 3600	; 1 hour
lnh.com			IN SOA	op.lnh.com. dns.lnh.com. (
				2000       ; serial
				900        ; refresh (15 minutes)
				600        ; retry (10 minutes)
				86400      ; expire (1 day)
				3600       ; minimum (1 hour)
				)
			NS	op.lnh.com.
$ORIGIN lnh.com.
a			A	1.2.3.4
op			A	1.2.3.4
shanks			A	1.2.3.4
[root@linux-node2 var]# 

  

修改rndc文件和view文件,改完后不用重启,rdnc reload就行了
除了改named.conf这个主配置文件,其它文件修改,都用rndc reload就行了

 

 测试主从

主dns服务器把zone文件序号改成2004

[root@linux-node1 var]# cd /var/named/chroot/etc/
[root@linux-node1 etc]# vim lnh.com.zone 
[root@linux-node1 etc]# cat lnh.com.zone 
$ORIGIN .
$TTL 3600     ; 1 hour
lnh.com            IN SOA op.lnh.com. dns.lnh.com. (
                        2004    ; serial
                        900     ; refresh (15 minutes)
                        600     ; retry (10 minutes)
                        86400   ; expire (1 day)
                        3600    ; minimum (1 hour)
                        )
       NS   op.lnh.com.
$ORIGIN lnh.com.
shanks  A 1.2.3.4
op      A 1.2.3.4
a       A 1.2.3.4
a       A 192.168.122.101
[root@linux-node1 etc]# 

  

执行rndc reload
[root@linux-node1 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 etc]# 
 
从dns查看,也跟着变化了,说明主从同步没问题
[root@linux-node2 etc]# cat slave.lnh.com.zone 
$ORIGIN .
$TTL 3600	; 1 hour
lnh.com			IN SOA	op.lnh.com. dns.lnh.com. (
				2004       ; serial
				900        ; refresh (15 minutes)
				600        ; retry (10 minutes)
				86400      ; expire (1 day)
				3600       ; minimum (1 hour)
				)
			NS	op.lnh.com.
$ORIGIN lnh.com.
a			A	1.2.3.4
			A	192.168.122.101
op			A	1.2.3.4
shanks			A	1.2.3.4
[root@linux-node2 etc]# 

  

 
接下来在master上做。增加一条A记录
a    A   192.168.122.101
同时记得更新序列号
 
关于zone文件,a对应多个IP
它解析多个IP
A记录这里可以1对多
一个域名对应多个IP,解析的时候是轮询的。可以简单当成负载均衡
缺点如下
1、后端的服务器是否存活不知道
2、只有简单的轮询
[root@linux-node1 etc]# vim lnh.com.zone 
[root@linux-node1 etc]# cat lnh.com.zone 
$ORIGIN .
$TTL 3600     ; 1 hour
lnh.com            IN SOA op.lnh.com. dns.lnh.com. (
                        2004    ; serial
                        900     ; refresh (15 minutes)
                        600     ; retry (10 minutes)
                        86400   ; expire (1 day)
                        3600    ; minimum (1 hour)
                        )
       NS   op.lnh.com.
$ORIGIN lnh.com.
shanks  A 1.2.3.4
op      A 1.2.3.4
a       A 1.2.3.4
a       A 192.168.122.101
[root@linux-node1 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 etc]# 

  

主dns上执行rndc  reload
从dns查看zone文件
[root@linux-node2 etc]# cat slave.lnh.com.zone 
$ORIGIN .
$TTL 3600	; 1 hour
lnh.com			IN SOA	op.lnh.com. dns.lnh.com. (
				2004       ; serial
				900        ; refresh (15 minutes)
				600        ; retry (10 minutes)
				86400      ; expire (1 day)
				3600       ; minimum (1 hour)
				)
			NS	op.lnh.com.
$ORIGIN lnh.com.
a			A	1.2.3.4
			A	192.168.122.101
op			A	1.2.3.4
shanks			A	1.2.3.4
[root@linux-node2 etc]# 

  

 

加一条cname记录测试下,同时把序列号+1
[root@linux-node1 etc]# cat lnh.com.zone 
$ORIGIN .
$TTL 3600     ; 1 hour
lnh.com            IN SOA op.lnh.com. dns.lnh.com. (
                        2005    ; serial
                        900     ; refresh (15 minutes)
                        600     ; retry (10 minutes)
                        86400   ; expire (1 day)
                        3600    ; minimum (1 hour)
                        )
       NS   op.lnh.com.
$ORIGIN lnh.com.
shanks  A 1.2.3.4
op      A 1.2.3.4
a       A 1.2.3.4
a       A 192.168.122.101
cname  CNAME  a.lnh.com.
[root@linux-node1 etc]# 
[root@linux-node1 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 etc]# 

  

检查slave dns
可以看到这个cname
[root@linux-node2 etc]# cat slave.lnh.com.zone 
$ORIGIN .
$TTL 3600	; 1 hour
lnh.com			IN SOA	op.lnh.com. dns.lnh.com. (
				2005       ; serial
				900        ; refresh (15 minutes)
				600        ; retry (10 minutes)
				86400      ; expire (1 day)
				3600       ; minimum (1 hour)
				)
			NS	op.lnh.com.
$ORIGIN lnh.com.
a			A	1.2.3.4
			A	192.168.122.101
cname			CNAME	a
op			A	1.2.3.4
shanks			A	1.2.3.4
[root@linux-node2 etc]# 

  

dig解析下
可以看到先得到cname为a.lnh.com,然后解析a.lnh.com
[root@linux-node1 etc]# dig @10.0.1.161 cname.lnh.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> @10.0.1.161 cname.lnh.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53265
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;cname.lnh.com.			IN	A

;; ANSWER SECTION:
cname.lnh.com.		3600	IN	CNAME	a.lnh.com.
a.lnh.com.		3600	IN	A	192.168.122.101
a.lnh.com.		3600	IN	A	1.2.3.4

;; AUTHORITY SECTION:
lnh.com.		3600	IN	NS	op.lnh.com.

;; ADDITIONAL SECTION:
op.lnh.com.		3600	IN	A	1.2.3.4

;; Query time: 1 msec
;; SERVER: 10.0.1.161#53(10.0.1.161)
;; WHEN: Mon May 15 23:09:22 2017
;; MSG SIZE  rcvd: 112

[root@linux-node1 etc]# 

  

通过从dns解析,正常情况下结果一致
[root@linux-node1 etc]# dig @10.0.1.162 cname.lnh.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> @10.0.1.162 cname.lnh.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6767
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;cname.lnh.com.			IN	A

;; ANSWER SECTION:
cname.lnh.com.		3600	IN	CNAME	a.lnh.com.
a.lnh.com.		3600	IN	A	192.168.122.101
a.lnh.com.		3600	IN	A	1.2.3.4

;; AUTHORITY SECTION:
lnh.com.		3600	IN	NS	op.lnh.com.

;; ADDITIONAL SECTION:
op.lnh.com.		3600	IN	A	1.2.3.4

;; Query time: 2 msec
;; SERVER: 10.0.1.162#53(10.0.1.162)
;; WHEN: Mon May 15 23:10:43 2017
;; MSG SIZE  rcvd: 112

[root@linux-node1 etc]# 

  

MX记录学习

MX记录和A记录差不多,MX是关于邮件服务的解析的

MX    5 表示优先级,数值是越小越高
[root@linux-node1 etc]# vim lnh.com.zone 
[root@linux-node1 etc]# cat lnh.com.zone 
$ORIGIN .
$TTL 3600     ; 1 hour
lnh.com            IN SOA op.lnh.com. dns.lnh.com. (
                        2006    ; serial
                        900     ; refresh (15 minutes)
                        600     ; retry (10 minutes)
                        86400   ; expire (1 day)
                        3600    ; minimum (1 hour)
                        )
       NS   op.lnh.com.
$ORIGIN lnh.com.
shanks  A 1.2.3.4
op      A 1.2.3.4
a       A 1.2.3.4
a       A 192.168.122.101
cname  CNAME  a.lnh.com.
mx      MX 5 192.168.122.101
[root@linux-node1 etc]# 

  

记得序列号更新下,可以+1

[root@linux-node1 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 etc]# 

  

从dns查看
[root@linux-node2 etc]# cat slave.lnh.com.zone 
$ORIGIN .
$TTL 3600	; 1 hour
lnh.com			IN SOA	op.lnh.com. dns.lnh.com. (
				2006       ; serial
				900        ; refresh (15 minutes)
				600        ; retry (10 minutes)
				86400      ; expire (1 day)
				3600       ; minimum (1 hour)
				)
			NS	op.lnh.com.
$ORIGIN lnh.com.
a			A	1.2.3.4
			A	192.168.122.101
cname			CNAME	a
mx			MX	5 192.168.122.101
op			A	1.2.3.4
shanks			A	1.2.3.4
[root@linux-node2 etc]# 

  

主dns上测试解析下mx.lnh.com
[root@linux-node1 etc]# dig @10.0.1.162 mx.lnh.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> @10.0.1.162 mx.lnh.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31263
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mx.lnh.com.			IN	A

;; AUTHORITY SECTION:
lnh.com.		3600	IN	SOA	op.lnh.com. dns.lnh.com. 2006 900 600 86400 3600

;; Query time: 1 msec
;; SERVER: 10.0.1.162#53(10.0.1.162)
;; WHEN: Mon May 15 23:17:57 2017
;; MSG SIZE  rcvd: 71

[root@linux-node1 etc]# 

  

上面dig没显示mx.lnh.com的IP
采用下面host方式解析
[root@linux-node1 etc]# host mx.lnh.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 

mx.lnh.com mail is handled by 5 192.168.122.101.lnh.com.
[root@linux-node1 etc]#

[root@linux-node1 etc]# host mx.lnh.com 10.0.1.162
Using domain server:
Name: 10.0.1.162
Address: 10.0.1.162#53
Aliases: 

mx.lnh.com mail is handled by 5 192.168.122.101.lnh.com.
[root@linux-node1 etc]#

  

PTR记录

添加RTP记录(反向解析)
作用:可以让人根据IP获取到主机名,从而判断主机用途

编辑maste节点/var/named/chroot/etc/view.conf,加入ptr的zone配置
in-addr.arpa已经成为业界共识了,作为ptr用的
168.192是IP地址反过来

主dns服务器上如下编辑view文件,添加新的zone

[root@linux-node1 ~]# vim /var/named/chroot/etc/view.conf 
[root@linux-node1 ~]# cat /var/named/chroot/etc/view.conf 
view "View" {
  zone "lnh.com" {
       type master;
       file "lnh.com.zone";
       allow-transfer {
           10.0.1.162;
       };
       notify yes;
       also-notify {
           10.0.1.162;
       };
  };
  zone "168.192.in-addr.arpa" {
       type master;
       file "168.192.zone";
       allow-transfer {
           10.0.1.162;
       };
       notify yes;
       also-notify {
           10.0.1.162;
       };
  };
};
[root@linux-node1 ~]# 

  

新建并编辑下面文件
[root@linux-node1 ~]# vim /var/named/chroot/etc/168.192.zone
[root@linux-node1 ~]# cat /var/named/chroot/etc/168.192.zone
$TTL 3600       ; 1 hour
@                 IN SOA  op.lnh.com. dns.lnh.com. (
                                2004       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.lnh.com.
102.122         IN      PTR     a.lnh.com.
[root@linux-node1 ~]# 

  

@ 表示继承 zone "168.192.in-addr.arpa"
没有@的话,前面就得用
$ORIGIN .

IN SOA后面的 op.lnh.com. dns.lnh.com是一段说明

 

 文件授权,并重新加载

[root@linux-node1 ~]# cd /var/named/chroot/etc/
[root@linux-node1 etc]# ll
total 684
-rw-r--r--  1 root  root     503 May 15 23:43 168.192.zone
-rw-r--r--  1 named named    536 May 15 23:14 lnh.com.zone
-rw-r--r--  1 root  root     388 Sep 17  2014 localtime
drwxr-x---  2 named named   4096 May  9 21:43 named
-rw-r--r--  1 named named   1121 May 14 21:16 named.conf
-rw-r--r--  1 named named   2389 May  9 21:43 named.iscdlv.key
-rw-r-----  1 named named    931 Jun 21  2007 named.rfc1912.zones
-rw-r--r--  1 named named    487 Jul 19  2010 named.root.key
drwxr-x---  3 named named   4096 May 13 21:53 pki
-rw-r--r--. 1 named named   6455 Jan 12  2010 protocols
-rw-r--r--  1 named named    181 May 14 20:45 rndc.conf
-rw-r--r--  1 named named     91 May 14 20:53 rndc.key
-rw-r--r--. 1 named named 641020 Oct  2  2013 services
-rw-r--r--  1 named named    434 May 15 23:39 view.conf
[root@linux-node1 etc]# chown named:named 168.192.zone 
[root@linux-node1 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 etc]# 

  

因为这是个新加的域,从上得编辑它
编辑slave节点/var/named/chroot/etc/view.conf加入ptr的zone配置
[root@linux-node2 etc]# vim /var/named/chroot/etc/view.conf
[root@linux-node2 etc]# cat /var/named/chroot/etc/view.conf
view "SlaveView" {
  zone "lnh.com" {
       type slave;
       masters {10.0.1.161;};
       file "slave.lnh.com.zone";
  };
   zone "168.192.in-addr.arpa" {
       type slave;
       masters {10.0.1.161; };
       file "slave.168.192.zone";
  };
};
[root@linux-node2 etc]# 

 从上更改权限并重新加载配置

[root@linux-node2 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node2 etc]# 

[root@linux-node2 etc]# cd /var/named/chroot/etc/
[root@linux-node2 etc]# ll
total 684
-rw-r--r--  1 root  root     388 Sep 17  2014 localtime
drwxr-x---  2 root  named   4096 May  9 21:43 named
-rw-r-----  1 root  named   1121 May 15 22:36 named.conf
-rw-r--r--  1 root  named   2389 May  9 21:43 named.iscdlv.key
-rw-r-----  1 root  named    931 Jun 21  2007 named.rfc1912.zones
-rw-r--r--  1 root  named    487 Jul 19  2010 named.root.key
drwxr-x---  3 named named   4096 May 14 19:03 pki
-rw-r--r--. 1 root  root    6455 Jan 12  2010 protocols
-rw-r--r--  1 root  root     181 May 15 22:37 rndc.conf
-rw-r--r--  1 root  root      91 May 15 22:37 rndc.key
-rw-r--r--. 1 root  root  641020 Oct  2  2013 services
-rw-r--r--  1 named named    327 May 15 23:58 slave.168.192.zone
-rw-r--r--  1 named named    389 May 15 23:54 slave.lnh.com.zone
-rw-r--r--  1 named named    251 May 15 23:50 view.conf
[root@linux-node2 etc]# 

  

从上新的zone文件出现了
[root@linux-node2 etc]# cat slave.168.192.zone 
$ORIGIN .
$TTL 3600	; 1 hour
168.192.in-addr.arpa	IN SOA	op.lnh.com. dns.lnh.com. (
				2004       ; serial
				900        ; refresh (15 minutes)
				600        ; retry (10 minutes)
				86400      ; expire (1 day)
				3600       ; minimum (1 hour)
				)
			NS	op.lnh.com.
$ORIGIN 168.192.in-addr.arpa.
102.122			PTR	a.lnh.com.
[root@linux-node2 etc]# 

  

测试
[root@linux-node1 etc]# host 192.168.122.102 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 

102.122.168.192.in-addr.arpa domain name pointer a.lnh.com.
[root@linux-node1 etc]# host 192.168.122.102 10.0.1.162
Using domain server:
Name: 10.0.1.162
Address: 10.0.1.162#53
Aliases: 

102.122.168.192.in-addr.arpa domain name pointer a.lnh.com.
[root@linux-node1 etc]# 
 
默认直接host 192.168.122.102 它会去找系统默认的dns服务器

 

测试dns解析的轮询功能

加一条记录,再更改下序列号+1,这样a能解析到3个IP了。测试下解析是否是轮询的

 

冲新加载服务

[root@linux-node1 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 etc]# 
 
执行3次,排在第一位的IP不同,这个是轮询的结果,默认它会把第一个作为请求的返回给客户端
[root@linux-node1 etc]# nslookup a.lnh.com 127.0.0.1
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	a.lnh.com
Address: 192.168.122.101
Name:	a.lnh.com
Address: 192.168.122.102
Name:	a.lnh.com
Address: 1.2.3.4

[root@linux-node1 etc]# nslookup a.lnh.com 127.0.0.1
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	a.lnh.com
Address: 192.168.122.102
Name:	a.lnh.com
Address: 1.2.3.4
Name:	a.lnh.com
Address: 192.168.122.101

[root@linux-node1 etc]# nslookup a.lnh.com 127.0.0.1
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	a.lnh.com
Address: 1.2.3.4
Name:	a.lnh.com
Address: 192.168.122.101
Name:	a.lnh.com
Address: 192.168.122.102

[root@linux-node1 etc]# 

  

测试智能dns,根据源IP不同解析到对应的IP 

编辑master节点/var/named/chroot/etc/view.conf
把原先的内容清理了
[root@linux-node1 etc]# vim /var/named/chroot/etc/view.conf
[root@linux-node1 etc]# cat /var/named/chroot/etc/view.conf
view "GROUP1" {
  match-clients { group1; };
  zone "viewlnh.com" {
     type master;
     file "group1.viewlnh.com.zone";
  };
};
  
view "GROUP2" {
  match-clients { group2; };
  zone "viewlnh.com" {
     type master;
     file "group2.viewlnh.com.zone";
  };
};
[root@linux-node1 etc]# 

  

编辑maste节点新的/var/named/chroot/etc/group1.viewlnh.com.zone文件
[root@linux-node1 etc]# vim group1.viewlnh.com.zone
[root@linux-node1 etc]# cat /var/named/chroot/etc/group1.viewlnh.com.zone 
$ORIGIN .
$TTL 3600       ; 1 hour
viewlnh.com                 IN SOA  op.viewlnh.com. dns.viewlnh.com. (
                                2009       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.viewlnh.com.
$ORIGIN viewlnh.com.
op                      A       192.168.122.1
view                    A       192.168.122.1
[root@linux-node1 etc]# 
group不同的地方只是IP不同
编辑maste节点新的/var/named/chroot/etc/group2.viewlnh.com.zone文件
[root@linux-node1 etc]# vim /var/named/chroot/etc/group2.viewlnh.com.zone
[root@linux-node1 etc]# cat /var/named/chroot/etc/group2.viewlnh.com.zone
$ORIGIN .
$TTL 3600       ; 1 hour
viewlnh.com                 IN SOA  op.viewlnh.com. dns.viewlnh.com. (
                                2009       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.viewlnh.com.
$ORIGIN viewlnh.com.
op                      A       192.168.122.2
view                    A       192.168.122.2
[root@linux-node1 etc]# 

[root@linux-node1 etc]# chown named.named group*
[root@linux-node1 etc]# rndc reload
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
server reload successful
[root@linux-node1 etc]# 

  

因为编辑的view.conf 现在从dns和主dns已经脱离了主从关系,不用理会主从
测试从两台机器上去请求dns。模拟作为不同客户端的IP去请求同一个dns服务器
在node1上去解析,客户端是10.0.1.161
[root@linux-node1 etc]# host view.viewlnh.com 10.0.1.161
Using domain server:
Name: 10.0.1.161
Address: 10.0.1.161#53
Aliases: 

view.viewlnh.com has address 192.168.122.1
[root@linux-node1 etc]#
 
在node2上去解析,客户端是10.0.1.162
[root@linux-node2 etc]# host view.viewlnh.com 10.0.1.161
Using domain server:
Name: 10.0.1.161
Address: 10.0.1.161#53
Aliases: 

view.viewlnh.com has address 192.168.122.2
[root@linux-node2 etc]# 
这就是智能dns
 
 
公网可以买IP库
cdn什么的就是靠IP库
添加 acl groupall,肯定有部分客户端IP不在group中,但是还得让其可以使用dns服务,这里添加个groupall,匹配所有
[root@linux-node1 etc]# vim /etc/named.conf 
[root@linux-node1 etc]# cat /etc/named.conf 
 options {
  version "1.1.1";
  listen-on port 53 {any;};
  directory "/var/named/chroot/etc/";
  pid-file "/var/named/chroot/var/run/named/named.pid";
  allow-query { any; };
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";
  zone-statistics yes;
  memstatistics-file "log/mem_stats";
  empty-zones-enable no;
  forwarders {202.106.196.115;8.8.8.8; };
};
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {
  channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};
  acl group1 {
    10.0.1.161;
};
  acl group2 {
    10.0.1.162;
};
  acl groupall {
    *;
};

include "/var/named/chroot/etc/view.conf";
[root@linux-node1 etc]# 

  

 

posted on 2019-03-01 21:27  nmap  阅读(762)  评论(0编辑  收藏  举报

导航