DNS是什么

DNS Domain Name System  域名系统,实现域名与ip地址的相互解析;

不论是ipv4还是ipv6,都可以通过域名访问,对用户而言并不关心复杂的ip地址;


DNS域名结构

DNS_dns

红色部分表示根域,全球共有13组,用 . 标识;

蓝色部分是顶级域名,如下表:


名称
含义
com
公司、企业
org
组织、机构
edu
教育单位
gov
政府单位
net
网络、通信
mil
军事单位

橙色部分是二级域名,即顶级域名的子域,以此类推


DNS查询主机名的流程

当我们在浏览器输入http://www.baidu.com时,dns的工作流程是这样的:

1、向主机中配置的DNS服务器查询www.baidu.com对应的ip地址,此DNS服务器称为权威DNS服务器;

2、此DNS服务器缓存中如果有记录则返回给客户端ip地址,如果缓存中没有记录,则服务器向根( . )服务器请求,这样才有下述步骤;

3、根DNS服务器收到请求,它也不知道www.baidu.com是哪台主机,只知道com域的地址,于是将com域服务器地址告诉权威DNS服务器,根DNS服务器工作结束;

4、权威DNS服务器向com域服务器请求www.baidu.com对应的ip地址,com域服务器也不知道具体ip,于是将baidu.com域服务器地址告诉给权威DNS服务器;

5、权威DNS服务器找到baidu.com域服务器,而此与www.baidu.com正好是本域内的主机,于是将ip地址告诉给权威DNS服务器;

6、权威DNS服务器将最终找到的ip地址返回给用户,并在本机缓存,整个查询过程结束;


DNS的端口

DNS监听tcp/udp的53端口,可以使用 ss -nutpl 查看DNS监听的端口

如果企业中配置了防火墙,记得将传输层协议的53端口放行


DNS的资源记录

区域数据库是由资源记录(RR,Resource Record)组成,而资源记录包含以下几种类型:

SOA   起始授权记录,一个解析库只有一个,必须置于首部

NS   名称服务器,记录的是DNS服务器

A   地址的意思,记录与域名对应的ip地址,ipv4版本
正向解析
AAAA   ipv6版本的A记录
PTR   记录ip地址对应的域名
反向解析
CNAME   记录别名


DNS的主备架构

试想一下,一台提供DNS服务的机器突然down掉,而且又没有备用机器,会出现什么情况?上不了网对不对,当然如果有人记得要访问的ip地址也是没问题的,就是太麻烦。

主备架构的解决方案就是解决服务器单点故障的,这样当Master故障无法提供服务时Slave依然可以正常工作,从而保证服务端的服务正常提供。请记住,这种避免单点故障的解决方法在很多服务部署中都是类似的;

DNS采用Master/Slave的方式提供DNS解析服务,虽然称为主备模式,但实际工作时还是二者分担工作,而且二者服务器的数据库必须一致;

Slave从Master数据库同步数据;


DNS服务器的详细配置

下面以配置DNS正向解析为例进行说明:

首先安装DNS程序服务包,centos6版本对应的程序包是bind-9.8.2-0.62.rc1.el6.x86_64 ;

开启DNS服务,service named start

配置DNS服务大致有下述三个步骤:

1、修改主配置文件/etc/named.conf

2、修改区域文件/etc/named.rfc1912.zones

3、在/var/named/下编辑数据库文件

以www.kali.com域名为例进行配置

步骤1:

vim /etc/named.conf

options {
        listen-on port 53 { localhost; }; 
        #监听本机所有ip地址的tcp和udp的53端口,每一行都必须以分号";"结尾
        directory       "/var/named";
        #解析数据库存放的路径
        allow-query     { any; };
        #允许任何主机以本机为DNS服务器进行查询
        recursion yes;
        #允许递归查询,即可以向根DNS发起查询请求
        dnssec-enable yes;
        dnssec-validation yes;
        #dns安全策略,有时候配置了DNS服务却不生效,此时可以将yes改成no试一试
};

zone "." IN {
        type hint;
        file "named.ca";
};
#以上是对根域的定义,13组DNS根的地址近存放在/var/named/named.ca文件中
include "/etc/named.rfc1912.zones";
#此文件专门存放配置的解析数据库文件,也建议在此文件配置


步骤2、

修改区域文件,此文件存放

vim /etc/named.rfc1912.zones

zone "kali.com" IN {
#子域kali.com,IN可以省略,每个子域以花括号隔开,每行以分号结尾
        type master;
        #主类型
        file "kali.com.zone";
        #解析数据库的文件名称,可以随意定义,建议与服务相关
};
#在named.rfc1912.zones文件中有很多区域,可以参考这些例子进行配置


步骤3、

在/var/named/下编辑数据库文件

cd /var/named

vim kali.com.zone #此文件名称必须与步骤2中的file名称一致

$TTL 1D
#首部定义缓存周期,其后的资源记录就可以省略TTL
@       IN SOA  dns1 panoangao.163.com. (
                                        0       ; serial #版本号,更新库文件后需要手动更改此版本号
                                        1D      ; refresh #Slave向Master请求更新的时间
                                        1H      ; retry #Slave请求更新失败的重试时间
                                        1W      ; expire #Slave请求失败的保持时间,过了此时间DNS记录失效
                                        3H )    ; minimum #缓存错误DNS记录的时间
                        NS      dns1
                        #NS记录,指定DNS服务器名,此名称可以任意,但要有对应的A记录
dns1            A       192.168.1.100
#本DNS服务器的A记录
websrv          A       192.168.1.100
#本DNS服务器又充当最终的目的主机(实验环境)
www             CNAME   websrv
#当访问www.kali.com时其实是访问websrv.kali.com,www只是别名而已

资源记录的语法如下:

名称    TTL    IN    资源记录类型    值

名称:

@表示本域名,如kali.com.,注意com后有个 . ,名称处为空表示继承上一条记录名称,若名称不全则会自动补全域名,如dns1实际是dns1.kali.com.

TTL:

DNS服务器缓存时间,默认单位是秒,可以省略

IN:可以省略

资源类型:A、PTR、NS等

值:依据不同资源类型而异

注意:

编辑kali.com.zone文件时,可以参考已有文件,但是要记得修改文件权限为640,其目的是确保named用户能够读此文件

-rw-r----- 1 root named 205 Sep 22 21:24 kali.com.zone


步骤4、

重启DNS服务

rndc reload


步骤5、

测试

dig www.kali.com @192.168.1.100 

@是指定DNS服务器,免去手动修改网卡的麻烦;

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.kali.com @192.168.1.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27537
#NOERROR,解析成功
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.kali.com.                  IN      A
#上述是我们请求的域名
;; ANSWER SECTION:
www.kali.com.           86400   IN      CNAME   websrv.kali.com.
websrv.kali.com.        86400   IN      A       192.168.1.100
#结果找到域名对应的ip地址,还能看到别名的信息
;; AUTHORITY SECTION:
kali.com.               86400   IN      NS      dns1.kali.com.
;; ADDITIONAL SECTION:
dns1.kali.com.          86400   IN      A       192.168.1.100
;; Query time: 1 msec
;; SERVER: 192.168.1.100#53(192.168.1.100)
;; WHEN: Fri Sep 22 21:23:51 CST 2017
;; MSG SIZE  rcvd: 113

DNS解析成功

接下来就可以开启web服务,编辑html文件,然后通过DNS解析访问,这样一步一步不就是一套完整的服务了嘛。。