首页 > 代码库 > 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 AIN AAAA对应行的ip就是这13.服务器的。这13.提供下一级域名服务器的ip地址,比如提供com这个域名的ipcom服务器中提供下一级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服务器后期我们也只是最简单的使用,也就是建一个masterslave服务器,并且网上教程一堆。


本文出自 “老王linux旅程” 博客,请务必保留此出处http://oldking.blog.51cto.com/10402759/1883015

DNS