计算机通信使用的是ip和端口的方式,但是我们平时分为访问网站却是使用的网站名字,计算机是如何识别我们的主机的。是互联网中的网站那么多,难到我们需要把所有主机的ip和对应的名字记录在本地。世界那么多主机都记录这显然不合理,既然自己的主机不能把所有主机的信息记录,那么我们需要借助其他工具帮助我们翻译,DNS应运而生。
一 DNS解析原理
DNS是一个集群,他们是多个DNS服务器联合起来一起解析域名和ip的关系,因为主机名和ip的对应关系的数据量特别大,一台计算机完不成这个工作。所有把主机的名字分为三段。这里以一个例子介绍一下。www.baidu.com.
百度这域名的第一段是最后的.,这个.我们一般都是省略不写的,这个.的功能有全球的13个服务器提供服务,详细情况可以使用下面这个命令查看(假如没有这个文件,需要安装bind包,假如主机可以连接互联网我们就使用yum install bind -y安装,没有的话就只好使用其它主机下载安装包,然后使用rpm -ivh PECKAGE)
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
|
[root@centos6 ~]
# vim /var/named/named.ca
; <<>> DiG9.9.4-P2-RedHat-9.9.4-12.P2 <<>> +norec NS . @a.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY,status: NOERROR,
id
: 26229
;; flags: qr aa; QUERY: 1, ANSWER: 13,AUTHORITY: 0, ADDITIONAL: 24
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS c.root-servers.net.
. 518400 IN NS d.root-servers.net.
. 518400 IN NS e.root-servers.net.
. 518400 IN NS f.root-servers.net.
. 518400 IN NS g.root-servers.net.
. 518400 IN NS h.root-servers.net.
. 518400 IN NS i.root-servers.net.
. 518400 IN NS j.root-servers.net.
. 518400 IN NS k.root-servers.net.
. 518400 IN NS l.root-servers.net.
. 518400 IN NS m.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net. 518400 IN A 198.41.0.4
b.root-servers.net. 518400 IN A 192.228.79.201
c.root-servers.net. 518400 IN A 192.33.4.12
d.root-servers.net. 518400 IN A 199.7.91.13
e.root-servers.net. 518400 IN A 192.203.230.10
f.root-servers.net. 518400 IN A 192.5.5.241
g.root-servers.net. 518400 IN A 192.112.36.4
h.root-servers.net. 518400 IN A 128.63.2.53
i.root-servers.net. 518400 IN A 192.36.148.17
j.root-servers.net. 518400 IN A 192.58.128.30
k.root-servers.net. 518400 IN A 193.0.14.129
l.root-servers.net. 518400 IN A 199.7.83.42
m.root-servers.net. 518400 IN A 202.12.27.33
a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30
c.root-servers.net. 518400 IN AAAA 2001:500:2::c
d.root-servers.net. 518400 IN AAAA 2001:500:2d::d
f.root-servers.net. 518400 IN AAAA 2001:500:2f::f
h.root-servers.net. 518400 IN AAAA 2001:500:1::803f:235
i.root-servers.net. 518400 IN AAAA 2001:7fe::53
j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30
k.root-servers.net. 518400 IN AAAA 2001:7fd::1
l.root-servers.net. 518400 IN AAAA 2001:500:3::42
m.root-servers.net. 518400 IN AAAA 2001:dc3::35
;; Query
time
: 58 msec
;; SERVER: 198.41.0.4
#53(198.41.0.4)
;; WHEN: Wed Apr 23 14:52:37 CEST 2014
;; MSG SIZE rcvd: 727
|
其中包含IN A和IN AAAA对应行的ip就是这13个.服务器的。这13.提供下一级域名服务器的ip地址,比如提供com这个域名的ip,com服务器中提供下一级baidu域名的解析,www就是对应的主机。具体怎么提高域名解析服务器的,接下来说。
二DNS配置文件和作用
DNS的配置文件大致分为两个部分。
1 第一部分
位于/etc/目录下的文件,主要的文件时named.conf
打开named.conf,这里我们只捡几个重要的配置内容介绍,这个配置文件分为四段。
-
第一段是options,这里定义的是对整个DNS服务器生效的内容
1
2
3
4
5
6
7
8
9
10
|
//
listen-on port 53 {127.0.0.1; };
#这一行定义的ipv4监听的端口
listen-on-v6 port 53 {::1; };
#监听ipv6监听的端口
directory
"/var/named"
;
#域配置文件的路径和数据存储路径,后面配置的相对路径都是相对这个路径的
dump-
file
"/var/named/data/cache_dump.db"
;
#缓存文件位置
//
allow-query { localhost; };
#定义为哪些主机提供DNS服务
recursion
yes
;
#自己没有的域名是否去其它DNS查找,以后称为递归,这很重要
forward only;
#刚安装的bind,没有这一行需要自己写,意思是是否把DNS请求转移到其它主机,only也可以换成first,first的意思是先转发,假如转发的请求没有得到回复,就自己去查找
forwarders {172.16.29.8;};
#和上一条一起使用,转动哪个DNS服务器
dnssec-
enable
no;
dnssec-validation no;
#和上一条一起定义是否启用安全功能
|
-
第二段是logging记录日志
1
|
file
"data/named.run"
;
#日志存储位置
|
-
第三段是zone “.” IN定义.服务器的地址的内容
1
2
|
type
hint;
#hint代表.的类型,还有其它类型下一部分解释
file
"named.ca"
;
#13个.服务器的ip
|
-
第四段定义额外的配置文件
1
2
|
include
"/etc/named.rfc1912.zones"
;
#定义域的文件
include
"/etc/named.root.key"
;
#安全通信的key
|
2 第二部分
/etc/named.rfc1912.zones内的配置内容和第三段的类似,在第一部分定义了directory "/var/named",这一行代表以后我们所有的数据放在这个目录。
这里以一个例子介绍,在这个例子中我们创建一个DNS服务器。
首先编辑/etc/named.rfc1912.zones文件,添加如下内容,为DNS服务器添加一个域oldking.org
1
2
3
4
5
|
[root@centos7 ~]
# vim/etc/named.rfc1912.zones
zone
"oldking.org"
{
type
master;
file
"oldking.org.zone"
;
};
|
然后编辑oldking.org域的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@centos7 ~]
# vim /var/named/oldking.org.zone
$TTL 86400
#它表示一条域名解析记录在DNS服务器上缓存时间
@ IN SOA ns1 oldking (
#@是引用这个配置文件对应域名,SOA代表域名配置信息,ns1主DNS解析服务器,oldking邮箱
2016120601
#版本好
1H
#刷新时间
3M
#刷新失败后,等等多长时间重试
7D
#几天后失效
1D)
#失效时间过了后,几天这条记录不再有作用
@ IN NS ns1
@ IN NS ns2
ns1 IN A 172.16.29.6
ns2 IN A 172.16.29.7
www IN A 172.16.29.6
|
以上这几条我不一条一条解释只解释第三个字段
NS 对应域的DNS服务器有哪几个
A 主机名对应的ipv4地址
AAAA 主机名对应的ipv6地址
MX 对应域的邮件服务器有哪几个
PTR ip对应的主机
三 DNS的功能
1 hint对应的是.服务器的类型
2 master主域,负责解析域名的服务器
3 slave从域,当主服务器挂掉后提供服务
4 forward转发域,对应域的解析直接转发其它DNS服务器
5 子域,实现方式在父域定义一个NS记录,ip指向子域ip就可以了
6 反向域,区域名称:网络地址反写.in-addr.arpa.
172.16.100.--> 100.16.172.in-addr.arpa.
7 acl,定义访问列表
8 访问控制
allow-query {}: 允许查询的主机;白名单;
allow-transfer {}:允许区域传送的主机;白名单
allow-recursion {}: 允许递归的主机,建议全局使用
allow-update {}: 允许更新区域数据库中的内容
总结
DNS服务器后期我们也只是最简单的使用,也就是建一个master和slave服务器,并且网上教程一堆。