首页 > 代码库 > DNS
DNS
计算机通信使用的是ip和端口的方式,但是我们平时分为访问网站却是使用的网站名字,计算机是如何识别我们的主机的。是互联网中的网站那么多,难到我们需要把所有主机的ip和对应的名字记录在本地。世界那么多主机都记录这显然不合理,既然自己的主机不能把所有主机的信息记录,那么我们需要借助其他工具帮助我们翻译,DNS应运而生。
一 DNS解析原理
DNS是一个集群,他们是多个DNS服务器联合起来一起解析域名和ip的关系,因为主机名和ip的对应关系的数据量特别大,一台计算机完不成这个工作。所有把主机的名字分为三段。这里以一个例子介绍一下。www.baidu.com.
百度这域名的第一段是最后的.,这个.我们一般都是省略不写的,这个.的功能有全球的13个服务器提供服务,详细情况可以使用下面这个命令查看(假如没有这个文件,需要安装bind包,假如主机可以连接互联网我们就使用yum install bind -y安装,没有的话就只好使用其它主机下载安装包,然后使用rpm -ivh PECKAGE)
[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服务器生效的内容
// 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记录日志
file "data/named.run"; #日志存储位置
第三段是zone “.” IN定义.服务器的地址的内容
type hint; #hint代表.的类型,还有其它类型下一部分解释 file "named.ca"; #13个.服务器的ip
第四段定义额外的配置文件
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
[root@centos7 ~]# vim/etc/named.rfc1912.zones zone "oldking.org" { type master; file "oldking.org.zone"; };
然后编辑oldking.org域的配置文件
[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服务器,并且网上教程一堆。
本文出自 “老王linux旅程” 博客,请务必保留此出处http://oldking.blog.51cto.com/10402759/1883015
DNS