c4rt1y

DNS配置

0x01 DNS的出现及演化

网络出现的早起是使用IP地址通讯的,那是就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和Windows也继承保留了这个文件)。这个文件中记录着主机名称和IP地址的对应表,这样只要输入主机名称,系统就会加载hosts文件并查找对应关系,找到对应的IP,就可以访问这个IP的主机了。
但是后来主机太多了,无法保证所有人都能拿到统一的最新的hosts文件,就出现了在文件服务器上集中存放hosts文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪重负,而且把所有地址解析记录形成的文件都同步到所有的客户机似乎也不是一个好办法。这时DNS系统出现了,随着解析规模的继续扩大,DNS系统也在不断的烟花,直到现今的多层架构体系。

0x02 DNS概述入门

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

dns

0x03 DNS域名解析过程

首先,客户端现在本地缓存查找有没有域名缓存,如果没有,客户端发送DNS请求翻译IP地址或主机名,DNS服务器在收到客户机的请求后: 
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息 
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户端发出应答信息。 
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级域查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在的网络的DNS服务器发出应答信息,DNS服务器收到应该后先在缓存中存储,并解析结果发给客户及 
(4)若没有找到,返回错误信息 

DNS-resolve

0x04 DNS的分类

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

0x05 DNS配置讲解

SOA 可以理解为一段自己dns做备注说明的文本,一般与ns一致 
比如:dns.abcdocker.com sa.abcdocker.com 
示例:

a.shifen.com .    579    IN    SOA   dns.baidu.com.
sa.baidu.com.    (
              1408010001 ; serial number
              5 ; refresh 5s
              5;  retry 5s
           86400 ; expire 1d
           3600 ;min TTL 1h
)

相关解释: 
1、Serial:只是一个序号,但这个序号可被用来作为slave与master更新的依据。举例来说,master序号为100但slave序号为90时,那么这个zone file的资料就会被传送到slave来更新了。由于这个序号代表新旧资料,通常我们建立你可以利用日期来设定! 
举例来说,上面的资料是在2016/01/01所修改的第一次,所以用2016010101作为序号代表!(yyymmddnn,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

NS 域的授权名称服务器

    NSDName:DNS的FQDN
    a.shifen.com.       611 IN  NS  ns4.a.shifen.com.
    a.shifen.com.       611 IN  NS  ns3.a.shifen.com.
    a.shifen.com.       611 IN  NS  ns2.a.shifen.com.
    a.shifen.com.       611 IN  NS  ns1.a.shifen.com.
    a.shifen.com.       611 IN  NS  ns5.a.shifen.com.

MX 域的邮件交换器,要跟这一个优先级值,越小越高

    baidu.com.      7200    IN  MX      20    jpmx.baidu.com.
    baidu.com.      7200    IN  MX      20    mx50.baidu.com.
    baidu.com.      7200    IN  MX      10    mx.n.shifen.com.
    baidu.com.      7200    IN  MX      20    mx1.baidu.com.

A记录: 
将域名指向一个IPv4地址(例如:10.10.10.10),需要增加A记录 
CNAME记录: 
如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录 
MX记录: 
建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录 
NS记录: 
域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录 
TXT记录: 
可任意填写(可为空),通常用做SPF记录(反垃圾邮件)使用 
AAAA记录: 
将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录 
SRV记录: 
记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp) 
显性URL: 
将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址(例如:将www.net.cn显性转发到www.hichina.com后,访问www.net.cn时,地址栏显示的地址为:www.hichina.com)。 
隐性URL: 
与显性URL类似,但隐性转发会隐藏真实的目标地址(例如:将www.net.cn隐性转发到www.hichina.com后,访问www.net.cn时,地址栏显示的地址仍然为:www.net.cn)。

0x06 DNS命名规范

1、26个英文字母 
2、“0.1.2.3.4.5.6.7.8.9”十个数字 
3、“-”(英文中的连词号) 
4、最多63字节长度

0x07 DIG、NSLOOKUP、HOST的介绍

#首先安装环境
yum install bind-utils -y

#使用dig获取host信息
[root@master ~]# dig baidu.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46028
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;baidu.com.                     IN      A

;; ANSWER SECTION:
baidu.com.              529     IN      A       111.13.101.208

;; AUTHORITY SECTION:
.                       159805  IN      NS      b.root-servers.net.
.                       159805  IN      NS      a.root-servers.net.
.                       159805  IN      NS      m.root-servers.net.
.                       159805  IN      NS      i.root-servers.net.
.                       159805  IN      NS      l.root-servers.net.
.                       159805  IN      NS      f.root-servers.net.
.                       159805  IN      NS      e.root-servers.net.
.                       159805  IN      NS      d.root-servers.net.
.                       159805  IN      NS      g.root-servers.net.
.                       159805  IN      NS      k.root-servers.net.
.                       159805  IN      NS      c.root-servers.net.
.                       159805  IN      NS      j.root-servers.net.
.                       159805  IN      NS      h.root-servers.net.

;; Query time: 0 msec
;; SERVER: 10.10.10.20#53(10.10.10.20)
;; WHEN: Fri Sep 22 09:57:54 EDT 2017
;; MSG SIZE  rcvd: 265

#使用nslookup获取host信息
[root@master ~]# nslookup baidu.com
Server:         10.10.10.20
Address:        10.10.10.20#53

Non-authoritative answer:
Name:   baidu.com
Address: 111.13.101.208

#使用host获取host信息
[root@master ~]# host baidu.com
baidu.com has address 111.13.101.208
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.

0x08 DNS安装单机

#一台主机
10.10.10.20  master

#在master上安装bind
[root@master ~]# yum install bind-utils bind bind-devel bind-chroot -y

#查看named.conf文件[记得删除注释]
[root@master ~]# grep '^[a-Z]' /etc/named.conf
options {
  listen-on port 53 { any; };		#监控端口
  listen-on-v6 port 53 { ::1; }; 	#监控端口
  directory "/var/named";			#配置文件目录
  dump-file "/var/named/data/cache_dump.db"; 	#当执行rndc dumpdb 命令时,服务器存放数据库文件的路径名
  statistics-file "/var/named/data/named_stats.txt";	#可以看到DNS解析记录状态等
  memstatistics-file "/var/named/data/named_mem_stats.txt";		#内存状态
  allow-query     { any; };		#允许谁访问{}可以写IP
  recursion yes;
  dnssec-enable yes;
  dnssec-validation yes;
  dnssec-lookaside auto; 
  empty-zones-enable no;
  zone-statistics yes;
  bindkeys-file "/etc/named.iscdlv.key"; 
  managed-keys-directory "/var/named/dynamic";
  forwarders {202.106.196.115;8.8.8.8; };	#转发
}; 

key "rndc-key" {	#认证的密钥
        algorithm hmac-md5;
        secret "Eqw4hC1GExUWeDkKBX/pBg==";
  
};

controls {
        inet 127.0.0.1 port 53
        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 10m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {	#默认日志警告级别
    warning;
  };
  category queries {	#访问日志级别
    general_dns;
  };
};

acl group1 {   10.10.10.20;};
acl group2 {   10.10.10.30;};

include "/var/named/view.conf";
include "/etc/named.root.key"; 


#查看rndc.conf文件,主要是密钥文件
[root@master ~]# grep '^[a-Z]' /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;
};

#查看rndc.key文件,主要是密钥文件
grep '^[a-Z]' /etc/rndc.key
key "rndc-key" {
	algorithm hmac-md5;
	secret "jUqD+c56bRHEoYHcqJA+0Q==";
};

#查看view.conf文件,配置文件
[root@master ~]# grep '^[a-Z]' /var/named/view.conf
view "View" {
  zone "40.40.in-addr.arpa" {
       type master;
       file "40.40.zone";
       allow-transfer {
           10.10.10.20;
       };
       notify yes;
       also-notify {
           10.10.10.20;
       };
  };
  zone "c4rt1y.com" {
       type master;
       file "c4rt1y.com.zone";
       allow-transfer {
           10.10.10.20;
       };
       notify yes;
       also-notify {
           10.10.10.20;
       };
  };
};

#查看c4rt1y.com.zone文件,正向DNS
[root@master ~]# grep '^[a-Z]' /var/named/c4rt1y.com.zone
$TTL 	86400
@       IN      SOA     c4rt1y.com. root (
       	2014101901      ; Serial
       	43200      ; Refresh
       	3600       ; Retry
       	3600000    ; Expire
       	2592000 )  ; Minimum
		NS       c4rt1y.com.
@ 		IN 		A 		40.40.40.40
ns    	IN 		A       40.40.40.40
test  	IN      A       40.40.40.40
bbs  	IN      A       40.40.40.40

#查看40.40.zone文件,反向DNS
[root@master ~]# grep '^[a-Z]' /var/named/40.40.zone
$TTL 3600       ; 1 hour
@     IN SOA  ns.c4rt1y.com. dns.c4rt1y.com. (
      2004       ; serial
      900        ; refresh (15 minutes)
      600        ; retry (10 minutes)
      86400      ; expire (1 day)
      3600       ; minimum (1 hour)
      )
                         NS      ns.c4rt1y.com.
40.40            IN      PTR     test.c4rt1y.com.
40.40            IN      PTR     bbs.c4rt1y.com.


#权限
[root@master ~]# chown -R named.named /vat/named/

#设置启动项和启动
[root@master ~]# systemctl start named.service
[root@master ~]# systemctl enable named.service

#重启验证
[root@master ~]# rndc reload

#查看端口
[root@master ~]#  ss -tunlp|grep named

#验证正向DNS
[root@master ~]# host bbs.c4rt1y.com
bbs.noobs.com has address 40.40.40.40 

#验证逆向DNS
[root@master ~]# host 40.40.40.40 10.10.10.20
Using domain server:
Name: 10.10.10.20
Address: 10.10.10.20#53
Aliases: 

40.40.40.40.in-addr.arpa domain name pointer test.c4rt1y.com.
40.40.40.40.in-addr.arpa domain name pointer bbs.c4rt1y.com.

0x09 DNS主从

#两台主机
10.10.10.20  master
10.10.10.30  node01

#在node01上安装bind
[root@node01 ~]# yum install bind-utils bind bind-devel bind-chroot -y

#直接从master上复制
[root@master ~]# scp /etc/named.conf 10.10.10.30:/etc/named.conf
[root@master ~]# scp /etc/rndc.conf 10.10.10.30:/etc/rndc.conf
[root@master ~]# scp /etc/rndc.key 10.10.10.30:/etc/rndc.key
[root@master ~]# scp /var/named/view.conf 10.10.10.30:/var/named/view.conf
[root@master ~]# scp /var/named/c4rt1y.com.zone 10.10.10.30:/var/named/c4rt1y.com.zone
[root@master ~]# scp /var/named/40.40.zone 10.10.10.30:/var/named/40.40.zone

##在node01上修改配置如下
[root@node01 ~]# grep '^[a-Z]' /var/named/view.conf
view "View" {
  zone "40.40.in-addr.arpa" {
       type slave;
       masters {10.10.10.20; };
       file "40.40.zone";
       allow-transfer {
           10.10.10.20;
       };
       notify yes;
       also-notify {
           10.10.10.20;
       };
  };
  zone "c4rt1y.com" {
       type slave;
       masters {10.10.10.20; };
       file "c4rt1y.com.zone";
       allow-transfer {
           10.10.10.20;
       };
       notify yes;
       also-notify {
           10.10.10.20;
       };
  };
};

#权限
[root@node01 ~]# chown -R named.named /vat/named/

#设置启动项和启动
[root@node01 ~]# systemctl enable named.service

#重启验证
[root@node01 ~]# rndc reload

#查看端口
[root@node01 ~]# systemctl start named.service
[root@node01 ~]#  ss -tunlp|grep named

0x09 智能DNS

##在master上

#查看named.conf文件,在最下面添加如下内容,可以进行查询
[root@master ~]# vi /etc/named.conf
acl group1 {  10.10.10.20;};
acl group2 {  10.10.10.30;};

#查看view.conf文件,配置文件
[root@master ~]# vi /var/named/view.conf
view "group1" {
  match-clients { group1; };
  zone "noobs.com" {
     type master;
     file "group1.noobs.com.zone";
  };
};
view "group2" {
  match-clients { group2; };
  zone "noobs.com" {
     type master;
     file "group2.noobs.com.zone";
  };
};

#查看group1.noobs.com.zone文件
[root@master ~]# vi /var/named/group1.noobs.com.zone
$ORIGIN .
$TTL 3600       ; 1 hour
noobs.com                 IN SOA  op.noobs.com. dns.noobs.com. (
                                2005       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.noobs.com.
$ORIGIN noobs.com.
op                      A       20.20.20.20
bbs                     A       20.20.20.20

#查看group2.noobs.com.zone文件
[root@master ~]# vi /var/named/group2.noobs.com.zone
$ORIGIN .
$TTL 3600       ; 1 hour
noobs.com                 IN SOA  op.noobs.com. dns.noobs.com. (
                                2005       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.noobs.com.
$ORIGIN noobs.com.
op                      A       20.20.20.30
bbs                     A       20.20.20.30


#权限
[root@master ~]# chown -R named.named /vat/named/

#设置启动项和启动
[root@master ~]# systemctl restart named.service

#重启验证
[root@master ~]# rndc reload

#在master上测试
[root@master ~]# host bbs.noobs.com  10.10.10.20
Using domain server:
Name: 10.10.10.20
Address: 10.10.10.20#53
Aliases: 

bbs.noobs.com has address 20.20.20.20

#在node01上测试
[root@node01 ~]# host bbs.noobs.com  10.10.10.20
Using domain server:
Name: 10.10.10.20
Address: 10.10.10.20#53
Aliases: 

bbs.noobs.com has address 20.20.20.30

0x10 心得总结

和openstack一样,测试了几天(老样子,直接拿别人的demo过来不成),于是乎,对每个参数进行了研究和测试,发现上述应该是我配置的比较不错的内容了,其中各种坎,写错一个就报错,也是醉了

0x11 资料来源

http://lilongzi.blog.51cto.com/5519072/1853606
http://blog.csdn.net/linuxlsq/article/details/52606477
GoTop