DNS是什么

DNS:Domain Name System,域名系统

DNS作为域名和IP地址相互映射的一个分布式数据库,能够让用户更方便的访问互联网。它的正向映射是把一个主机和IP地址关联起来,它的反向映射则是IP地址到主机名。DNS使用TCP和UDP的53号端口。当前,对于每一级域名长度的限制是63个字符,域名总长度不能超过253个字符。

为什么要用DNS

连接到互联网的主机不计其数。当我要访问www.magedu.com这个网站。由于底层网络只能理解IP地址,而我的电脑不知道www.magedu.com这台主机的IP地址。DNS服务器收到查询请求之后,把查询到的结果(IP:101.200.188.230)再返还给我的电脑。然后我的电脑再通过IP地址进行访问。  

如图所示:

    1、本机向DNS服务器发送查询请求。

    2、DNS服务器将查询的结果返还给本机。

    3、本机通过IP地址访问www.magedu.com。

域名:

    DNS名称空间被组织成一个“树”形结构。每个完成的域名(例如,www.magedu.com)是这颗树的分支上的一个节点。完整限定域名(FQDN,Fully Qualified Domain Name)是到一个DNS对象的完整路径,包括最后一个点。

以上述的域名为例说明,magedu网址是由两部分组成,标号magedu是这个域名的主体,而最后的标号com则是该域名的后缀,代表的这是一个com国际域名,是顶级域名。而前面的www是网络名,为www的域名。DNS规定,域名中的标号由英文字母和数字组成,每个组成部分(标号)不能超过63个字符,整个FQDN(完整域名)全长不超过256个字符。FQDN不区分大小写,但是他们通常都采用小写。RFC2181对域名放开了限制。

域名级别

域名分为:

国际顶级域名:.com, .net, .org, .edu等

国家地区顶级域名:.cn, .de, .jp, .hk, .uk, .us等

除了顶级域名外,还有二级域名,就是靠近顶级域名左侧的字段。如:www.magedu.com中,.magedu就是二级域名。接下来还有三级域名,即靠近二级域名的左侧的字段,以此类推还有四级域名等。

DNS查询类型:

递归查询:客户端向根服务器发送请求,根服务器并不返回真实的答案,而是推荐它下级的服务器,以此类推,直到查询IP地址返回给客户机。

迭代查询:客户机向DNS服务器发送请求,DNS服务器直接回复答案给客户机。

域名解析

正向解析:FQDN到IP地址的解析。

反向解析:IP地址到FQDN的解析。

域名服务器的分类

服务器的类型 说明
主服务器 维护所负责解析的域内解析库的服务器
从服务器 从主DNS服务器或其它从DNS服务器“复制”(区域传送)一份解析库
缓存服务器

缓存以前的查询,通常没有本地的区

转发服务器 负责非本地域名的本地查询

一次完整的查询过程

以上述域名www.magedu.com为例。客户机向最近的远端DNS服务器发送查询请求,DNS服务器首先查看缓存中是否有www.magedu.com这条记录。如果没有就向根服务器发送查询请求,根服务器会告诉你要去请求.com顶级服务器。之后DNS服务器再向顶级域名服务器发送查询请求,得到的回复是向.magedu这个二级域名服务器发送查询请求。最终,DNS服务器向二级域名发送请求并得到正确答案返回给客户机。同时将此次查询的结果写入缓存之中,以便下次的查询。

资源记录

DNS层次结构中的每一个区(zone),都有与之相关的一组资源记录。资源记录的基本格式是:

name [TTL] IN rr_type value

记录的类型

类型 名称 功能
SOA Start Of Authority

定义一个DNS区

NS Name Server 标识服务器,授权子域
A IPv4 Address 名称到地址的转换
AAAA IPv6 Address 名称到IPv6地址的转换
PTR Pointer 地址到名字的转换
MX Mail Exchanger 控制邮件的路由
CNAME Canonical Name 主机的呢称或别名

记录的类型解释

SOA

一个SOA记录标记出一个区,即位于DNS域名空间中相同位置的一组资源记录的开始位置。一个DNS域的数据通常至少包括两个区:一个区用来把主机名转换成IP地址,称为正向区,其他一些区把IP地址反向映射到主机名,称为反向区。

1
2
3
4
5
6
7
8
例如:
magedu.com.    86400    IN  SOA    ns.magedu.com.  admin.magedu.com.    (
               
2018041401    ; 序列号
               
2H    ;刷新时间
               
10M    ;重试时间
               
1W    ;过期时间
               
1D    ;否定答案的TTL值
)

NS

NS(域名服务器)记录标识一个区的权威服务器(主服务器和从服务器),并把子域授权给其他机构。NS记录通常直接放在这个区的SOA记录后面。

注意:一个区域可以有多条NS记录
1
2
3
4
5
6
7
例如:
magedu.com.  IN  NS  ns1.magedu.com.
magedu.com.  IN  NS  ns2.magedu.com.
  
注意:
相邻的两个资源记录的name相同时,后续的可以省略。
对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录。

MX

电子邮件系统使用MX记录来更有效地路由邮件。MX记录优先于邮件发送方所指定的目的地址,在大多数情况下,它将邮件指向接收方网点的邮件主机。

1
2
3
4
5
6
7

一个区域内,MX记录可有多个,但是每个记录的value之前应该有一个数字(0-99)。表示此服务器的优先级,

数字越小优先级越高。

例如:
magedu.com.  IN  MX 10  mx1.magedu.com.
             
IN  MX 20  mx2.magedu.com.
  
注意:
    
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录。

A

A记录是DNS数据库的核心。它们提供了主机名到IP地址的映射,而这以前是在/etc/hosts文件中指定的。一个主机通常给它的每个网络端口都有一条A记录。

1
2
例如:
ns1  IN  A  101.200.188.230

AAAA

AAAA记录提供主机名到IPv6地址的映射。

PTR

PTR记录提供IP地址到主机名的反向映射。反向映射记录存在于in-addr.arpa这个域,并且以IP地址各字节逆序的形式命名。

1
2
例如:
101  IN  PTR  www.magedu.com.

CNAME

CNAME记录为之前多分配几个名字。通常,这些别名要么用来将某项功能与主机关联起来,要么用来缩短一个长主机名。

1
2
例如:
web.magedu.com.  IN  CNAME  www.magedu.com.

BIND

BIND指Berkeley Internet Name Domain(伯克利因特网域名)系统,它是ISC提供的一种开源软件包,为Linux、Unix、Mac OS和Windows系统实现了DNS协议。

BIND安装

1
# yum -y install bind bind-utils

BIND简介

    dns:协议

    bind:dns协议的一种实现

    named:bind程序运行的进程名

    bind-libs:被bind和bind-utils包中的程序共同用到的库文件

    bind-utils:bind客户端程序集,例如:dig,host,nslookup等

    bind:提供的dns server程序,已经几个常用的测试程序

    bind-chroot:选装,让named运行于jail模式下

主配置文件:/etc/named.conf

  或包含进来的其它文件

    /etc/named.iscdly.key

    /etc/named.rfc1912.zones

    /etc/named.root.key

  区域配置文件一般在/etc/named.rfc1912.zones,全局配置在/etc/named.conf中

    1、主配置文件格式:

    全局配置段:

      options { ... }; #注意内容前后有空格,分号结尾

    日志配置段:

      logging { ... };

    区域配置段:

      zone { ... };

      配置那些由本机负责解析的区域,或转发的区域

    注意:每个语句必须以分号结尾

    2、缓存名称服务器的配置:(注意此处的配置应该在使用前操作)

    监听能与外部主机通信的地址:

      listen-on port 53 { 192.168.168.158; };

    一般情况,建议关闭dnssec(基本上用不到,而且很麻烦,反正我是不知道。。)

       dnssec-enable no;

      dnssec-validation no;

      dnssec-lookaside no;   #或者在前面加俩个//;

    修改仅允许本地查询:

      allow-query { any; };  #或者注释掉

解析库文件

    /var/nanmed/目录下:

                一般名字为:ZONE_NAME.zone

                        例如:bjwf.com.zone

                                    192.168.168.zone

                注意:

                        1、一台DNS服务器可同时为多个区域提供解析

                        2、必须要有跟区域解析库文件:named.ca

                        3、还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库

                                正向:named.localhost            

                                反向:named.loopback

检查配置文件语法错误

    named-checkconf [/etc/named.conf]

    named-checkzone ZONE_NAME ZONE_FILE

1
2
3
4
# named-checkconf
# named-checkzone bjwf.com /var/named/bjwf.com.zone 
zone bjwf.com
/IN
: loaded serial 2018041202
OK
测试及管理工具

 dig命令:

        语法:dig [ -t RR_TYPE] name [@SERVER] [query options]

        作用:用于测试DNS系统,因此其不会查询hosts文件

            查询选项:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#正向解析
# dig -t A ns1.bjwf.com @192.168.168.158
 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> -t A ns1.bjwf.com @192.168.168.158
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, 
id
: 5996
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ns1.bjwf.com.          IN  A
 
;; ANSWER SECTION:
ns1.bjwf.com.       86400   IN  A   192.168.168.158
 
;; AUTHORITY SECTION:
bjwf.com.       86400   IN  NS  ns2.bjwf.com.
bjwf.com.       86400   IN  NS  ns1.bjwf.com.
 
;; ADDITIONAL SECTION:
ns2.bjwf.com.       86400   IN  A   192.168.168.158
 
;; Query 
time
: 1 msec
;; SERVER: 192.168.168.158
#53(192.168.168.158)
;; WHEN: 一 4月 13 16:55:05 CST 2018
;; MSG SIZE  rcvd: 105
 
#反向解析
# dig -x 202.106.0.20
 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> -x 202.106.0.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, 
id
: 41309
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;20.0.106.202.
in
-addr.arpa. IN  PTR
 
;; ANSWER SECTION:
20.0.106.202.IN-ADDR.ARPA. 38400 IN   PTR c1-xingfudajie-ns2.
 
;; Query 
time
: 6 msec
;; SERVER: 202.106.0.20
#53(202.106.0.20)
;; WHEN: 一 4月 13 17:31:52 CST 2018
;; MSG SIZE  rcvd: 111
 
#模拟完全区域传送
# dig -t axfr DOMAIN [@server]
# dig -t axfr bjwf.com. @192.168.168.158
 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> -t axfr bjwf.com. @192.168.168.158
;; global options: +cmd
bjwf.com.       86400   IN  SOA ns1.bjwf.com. admin.bjwf.com. 2018041202 3600 300 604800 86400
bjwf.com.       86400   IN  NS  ns1.bjwf.com.
bjwf.com.       86400   IN  NS  ns2.bjwf.com.
ns1.bjwf.com.       86400   IN  A  192.168.168.158
ns2.bjwf.com.       86400   IN  A   192.168.168.158
www.bjwf.com.       86400   IN  A   192.168.168.158
bjwf.com.       86400   IN  SOA ns1.bjwf.com. admin.bjwf.com. 2018041202 3600 300 604800 86400
;; Query 
time
: 1 msec
;; SERVER: 192.168.168.158
#53(192.168.168.158)
;; WHEN: 一 4月 13 17:33:44 CST 2018
;; XFR size: 7 records (messages 1, bytes 192)

 host命令:

        host [ -t RR_TYPE] name SERVER_IP

1
2
3
4
# host 192.168.168.158
158.168.168.192.
in
-addr.arpa domain name pointer bogon.
# host -t A www.bjwf.com
www.bjwf.com has address 192.168.168.158

nslookup命令:

        nslookup [ -options] [name] [server]

1
2
3
4
5
6
# nslookup www.bjwf.com
Server:     127.0.0.1
Address:    127.0.0.1
#53
 
Name:   www.bjwf.com
Address: 192.168.168.158

rndc命令:named服务控制命令 

1
2
3
4
5
6
7
8
9
10
11
12
13
14

[root@localhost ~]# rndc status

version: 9.9.4-RedHat-9.9.4-50.el7 <id:8f9657aa>

CPUs found: 3

worker threads: 3

UDP listeners per interface: 3

number of zones: 101

debug level: 0

xfers running: 0

xfers deferred: 0

soa queries in progress: 0

query logging is OFF

recursive clients: 0/0/1000

tcp clients: 0/100

server is up and running

写的比较乱,参考了其他文档,大家可以看看做个参考,后面还会继续更新的。