域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。 简而言之,DNS的出现是为了解决人们访问各个网站时的困难,因为如果每一个web服务器都是一个固定的外网IP的话,那么我们访问时必须要在浏览器中输入如http://8.8.8.8的,这对于人类来说太难于记忆了(虽然计算机很喜欢数字),所以我们想了一种方法将一个网站的名称和ip地址关联起来这样使用起来就方便多了。比如访问www.google.com其实就是访问的8.8.8.8这个ip地址,这样我们只要知道google这个公司就可以轻易的记住它的web网站了。其中www.google.com叫做一个FQDN(Fully qualified domain name)即完全资格域名,在互联网上唯一标识一台服务器(在访问者看来),而FQDNàIP的转换叫做正向解析,IPàFQDN的转换叫做反向解析。反向解析的作用主要是解决邮件服务器拒绝垃圾邮件的,因为在互联网中多个FQDN可以指向同一个IP所以通过IP去找FQDN在互联网上是不现实的,这样就可以使用一个随意的IP地址来伪装成特定的FQDN,如果某IP发来的邮件与其注册的域名正、反向解析并不相匹配,那么邮件服务器会把此邮件定义为垃圾邮件处理。
DNS进行解析时默认使用的是UDP的53号端口,使用的查询方式分为两种:递归查询和迭代查询。递归查询查询是客户端与DNS服务器之间的方式,迭代查询时DNS服务器之间的方式。
在一个完整的FQDN当中,一共分为四个部分:主机名.二级域名.一级域名.,最后的一个点代表根域名服务器,全球一共有13组,从A-M编号,其中有些组在世界各地有多组镜像,根域名服务器顾名思义就是以它为起始进行查询,它知道每一个顶级域名服务器的地址,每一个顶级域名服务器知道其所管辖的二级域名服务器的地址,每一个二级域名服务器知道其管辖的每一个主机的地址,这个样经过层层迭代就可以确定一个FQDN的IP地址,然后前段DNS服务器将查询后的最终结果一次返回给客户端这就叫做递归查询。举个例子:
查询 www.czcedu.org
客户端发送查询报文" www.czcedu.org "至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。
如果记录老化或不存在,则
DNS服务器向根域名服务器发送查询报文" www.czcedu.org ",根域名服务器返回 .org 域的权威域名服务器地址,这一级首先会返回的是顶级域名的权威域名服务器。
DNS服务器向 .org 域的权威域名服务器发送查询报文" www.czcedu.org ",得到 .czcedu.org 域的权威域名服务器地址。
DNS服务器向 .czcedu.org 域的权威域名服务器发送查询报文" www.czcedu.org ",得到主机 www 的A记录,存入自身缓存并返回给客户端。
我们看到了DNS服务器的作用,但是如果我们全网内的解析工作都交给一台DNS服务器的话那么一旦它宕机将无法通过FQDN访问互联网,所以我们要对DNS服务器进行备份,接下来我们就说一下DNS服务器的类型:
- 主DNS服务器
- 维护所负责解析的域内解析库服务器;解析库由管理维护
- 从DNS服务器
序列号:解析库的版本号;前提:主服务器解析库内容发生变化,其序列递增; 刷新时间间隔:从服务器从主服务器请求同步解析库的时间间隔; 重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔; 过期时长:从服务器始终联系不到主服务器时,多久之后放弃从服务器角色,停止提供服务; 通知机制:主服务器在发生改变时会立即通知从服务器来同步解析库
- 从主DNS服务器或其它的从DNS服务器那里"复制"(区域传递)一份解析库;这时使用的是TCP的53端口。
- 缓存DNS服务器
解析答案: 肯定答案:解析到的确定结果 否定答案:请求的条目不存在等原因导致无法返回结果; 权威答案:直属服务器提供的答案 非权威答案:缓存或者非直属服务器提供的答案
- 及上图中的与client直接联系的DNS服务器,用于缓存已经确定的查询结果以加快DNS解析速度。
- 转发DNS服务器
- 将客户端的查询请求全部或部分转发给某特定的DNS服务器
DNS服务器能够解析域名靠的是区域解析库,而区域解析库是由众多的资源记录(RR,Resource Record)组成的,RR由多种类型:
OA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;
A:internet Address,作用,FQDN --> IP
AAAA: FQDN --> IPv6
PTR: PoinTeR,IP --> FQDN
NS: Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX: Mail eXchanger,邮件交换器
每种资源记录定义的格式:
语法:name[TTL]IN rr_type value
注意:
(1) TTL即客户端的到解析结果的缓存时长,可从全局继承;
(2) @可用于引用当前区域的名字;
(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已;
SOA:
name: 当前区域的名字,例如"magedu.com.";
value: 有多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2) 录前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com;
(3) (主从服务协调属性的定义以及否定的答案的统一的TTL)
例如:
magedu.com. 86400 IN SOA ns.magedu.com. nsadmin.magedu.com. (
2015042201 ;序列号
2H ;刷新时间
10M;重试时间
1W;过期时间
1D;否定答案的TTL值
)
NS:
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.;
注意:一个区域可以有多个NS记录;
例如:
magedu.com.IN NS ns1.magedu.com.
magedu.com.IN NS ns2.magedu.com.
注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略;
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;
MX:
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名;
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;
例如:
magedu.com.IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
注意:
(1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;
A:
name: 某主机的FQDN,例如www.magedu.com.
value: 主机名对应主机的IP地址;
例如:
www.magedu.com.IN A 1.1.1.1
www.magedu.com.IN A 1.1.1.2
mx1.magedu.com. IN A 1.1.1.3
mx2.magedu.com. IN A 1.1.1.3
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;
AAAA:
name:FQDN
value:IPv6
PTR:
name:IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.
value:FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com
简写成:
4 IN PTR www.magedu.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写;
CNAME:
name:别名的FQDN
value:正工名字的FQDN;
例如:
web.magedu.com. IN CNAME www.magedu.com
OK,DNS协议我们已经大致讲清楚了,接下来我们看一下DNS服务到的实现,使用最广泛的的开源实现方式是使用BIND软件包。BIND(Berkeley Internet Name Daemon)是现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(InternetSystems Consortium)负责开发与维护。BIND(Berkeley Internet Name Daemon)是现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(InternetSystems Consortium)负责开发与维护。 安装bind包有很多个组件,我们这里就安装bind.x86_64、bind-libs.x86_64、bind-utils.x86_64这三个包,至于其它包的功能大家自行查看吧,篇幅原因就不详细解释了。使用简单的yum安装就可以了默认base源中就有。安装好之后会生成一些关键性的文件: 服务脚本:/etc/rc.d/init.d/named
主配置文件:/etc/named.conf,/etc/named.rfc1912.zones, /etc/rndc.key
解析库文件:/var/named/ZONE_NAME.ZONE
根区域文件:/var/named/named.ca
rndc:remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1:953/tcp来连接named进程;提供辅助性的管理功能;
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
| [iyunv@bogon ~]# vim /etc/named.conf
10 options {
11 listen-on port 53 { 192.168.19.135;127.0.0.1; 192.168.80.129; }; #配置监听的端口和ip
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file"/var/named/data/named_stats.txt";
16 memstatistics-file"/var/named/data/named_mem_stats.txt";
17 allow-query { any; }; #允许查询请求的主机
18 recursion yes; #是否允许递归查询
19 //forward first;
20 //forwarders { 192.168.19.134; };
21
22 dnssec-enable no;
23 dnssec-validation no;
24 // dnssec-lookaside auto;
25
26 /* Path to ISC DLV key */
27 // bindkeys-file"/etc/named.iscdlv.key";
28
29 // managed-keys-directory"/var/named/dynamic";
30 };
31
32 logging {
33 channel default_debug {
34 file"data/named.run";
35 severity dynamic;
36 };
37 };
38
39 zone "." IN { #定义根区域
40 type hint; #根提示,就是找不到了就从根开始找
41 file "named.ca";
42 };
43
44 include"/etc/named.rfc1912.zones"; #包含区域文件
45 include"/etc/named.root.key";
#到此处如果我们没有自定义named.rfc1912.zones中的任何内容那么启动named进程这台服务器就是一台缓存服务器,它如果可以访问物联网就可以解析任何互联网上的域名了,因为它能找到根。
[iyunv@bogon ~]# vim /etc/named.rfc1912.zones
13 zone"localhost.localdomain" IN {
14 type master;
15 file "named.localhost";
16 allow-update { none; };
17 };
18
19 zone "localhost"IN {
20 type master;
21 file "named.localhost";
22 allow-update { none; };
23 };
24
25 zone"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"IN {
26 type master;
27 file "named.loopback";
28 allow-update { none; };
29 };
30
31 zone"1.0.0.127.in-addr.arpa" IN {
32 type master;
33 file "named.loopback";
34 allow-update { none; };
35 };
36
37 zone"0.in-addr.arpa" IN {
38 type master;
39 file "named.empty";
40 allow-update { none; };
41 };
42 #以上定义的都是本地回环地址的正向和反向区域
48 zone "czcedu.com." IN {
49 type master;
51 file "czcedu.com.zone";
52 }; #定义主DNS服务器、正向区域,指定区域解析库文件
[iyunv@bogon ~]# vim /var/named/czcedu.com.zone #编写区域解析库文件
1 $TTL 86400 #缓存值
2 $ORIGIN czcedu.com. #区域名称变量
3 @ IN SOA ns1.czcedu.com.admin.czcedu.com. ( #@表示使用ORIGIN变量,如果没有定义则使用区域名称
4 2015071601
5 1H
6 10M
7 1W
8 1D )
9 @ IN NS ns1.czcedu.com. #这里可以写全区域名称,但结尾必须加“.”
10 IN NS ns2 #也可以省略但不能加“.”
11 IN MX 10 mail
12 IN MX 20 mx
13 ns1 IN A 172.16.10.1
14 ns2 IN A 172.16.10.2
15 mail IN A 172.16.10.3
16 mx IN A 172.16.10.4
17 www IN A 172.16.10.5
18 ftp IN CNAME www
19 * IN A 172.16.10.5 #泛域名解析
20 czcedu.com IN A 172.16.10.5 #缺省域名解析
[iyunv@bogon ~]# named-checkconf #检查配置文件
[iyunv@bogon ~]# named-checkzone "czcedu.com"/var/named/czcedu.com.zone #检查区域解析库文件
zone czcedu.com/IN: loaded serial 2015071601
OK
[iyunv@bogon named]# chown :named czcedu.com.zone #修改区域文件属组
[iyunv@bogon named]# chmod 640 czcedu.com.zone #修改权限
[iyunv@bogon named]# dig -t A www.czcedu.com 192.168.1.106 #测试DNS服务器工作是否正常
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6<<>> -t A www.czcedu.com 192.168.1.106
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:28588
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2,ADDITIONAL: 2
;; QUESTION SECTION:
;www.czcedu.com. IN A
;; ANSWER SECTION:
www.czcedu.com. 86400 IN A 172.16.10.5 #与我们服务器中定义的相同
;; AUTHORITY SECTION:
czcedu.com. 86400 IN NS ns1.czcedu.com.
czcedu.com. 86400 IN NS ns2.czcedu.com.
;; ADDITIONAL SECTION:
ns1.czcedu.com. 86400 IN A 172.16.10.1
ns2.czcedu.com. 86400 IN A 172.16.10.2
;; Query time: 4 msec
;; SERVER: 192.168.1.106#53(192.168.1.106)
;; WHEN: Sun Apr 26 11:11:12 2015
;; MSG SIZE rcvd: 116
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id:41184
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;192.168.1.106. IN A
;; AUTHORITY SECTION:
. 10784 IN SOA a.root-servers.net. nstld.verisign-grs.com.2015071600 1800 900 604800 86400
;; Query time: 4 msec
;; SERVER: 192.168.1.106#53(192.168.1.106)
;; WHEN: Sun Apr 26 11:11:12 2015
;; MSG SIZE rcvd: 106
[iyunv@bogon named]# vim /etc/named.rfc1912.zones #定义反向区域
48 zone "10.16.172.in-addr.arpa." IN {
49 type master;
50 file "172.16.10.in-addr.arpa.zone";
51 };
[iyunv@bogon named]# vim 172.16.10.in-addr.arpa.zone #定义反向区域解析库文件
1 $TTL 86400
2 @ IN SOA ns1.czcedu.comadmin.czcedu.com (
3 2015071601
4 1H
5 5M
6 1W
7 1D )
8 IN NS ns1.czcedu.com.
9 IN NS ns2.czcedu.com.
10 IN MX 10 mail.czcedu.com.
11 IN MX 20 mx.czcedu.com.
12 1 IN PTR ns1.czcedu.com.
13 2 IN PTR ns2.czcedu.com.
14 3 IN PTR mail.czcedu.com.
15 4 IN PTR mx.czcedu.com.
16 5 IN PTR www.czcedu.com.
[iyunv@bogon named]# dig -x 172.16.10.5 #检测反向区域解析是否正常
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6<<>> -x 172.16.10.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:18889
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2,ADDITIONAL: 2
;; QUESTION SECTION:
;5.10.16.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
5.10.16.172.in-addr.arpa. 86400 IN PTR www.czcedu.com.
;; AUTHORITY SECTION:
10.16.172.in-addr.arpa. 86400 IN NS ns1.czcedu.com.
10.16.172.in-addr.arpa. 86400 IN NS ns2.czcedu.com.
;; ADDITIONAL SECTION:
ns1.czcedu.com. 86400 IN A 172.16.10.1
ns2.czcedu.com. 86400 IN A 172.16.10.2
;; Query time: 3 msec
;; SERVER: 192.168.1.106#53(192.168.1.106)
;; WHEN: Sun Apr 26 11:37:57 2015
;; MSG SIZE rcvd: 138
#建立主从服务器及区域传送,主IP:192.168.1.106;从IP:192.168.1.107
[iyunv@bogon named]# vim /etc/named.rfc1912.zones #定义从服务器
48 zone "10.16.172.in-addr.arpa." IN { #反向区域
49 type slave; #类型为slave
50 masters { 192.168.1.106; }; #指定主服务器地址
51 file"slaves/172.16.1.in-addr.arpa.zone"; #区域传输文件放置到slaves目录下
52 };
53
54 zone"czcedu.com." IN { #正向区域
55 type slave;
56 masters { 192.168.1.106; };
57 file"slaves/czcedu.com.zone";
58 };
#不过在主服务区域解析库其中必须定义从服务器为一个DNS服务器
[iyunv@bogon named]# vim czcedu.com.zone
13 ns IN A 192.168.1.107
|
好了,这里DNS的基本配置就完成了,还有子域授权及view我们下次再介绍。
|