码迷,mamicode.com
首页 > 其他好文 > 详细

DNS服务的协议讲解以及DNS服务搭建

时间:2016-05-01 17:53:02      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:域名服务器   dns服务   fqdn   正向解析   反向解析   

1.什么是DNS服务?

    DNS服务是实现把主机名或域名解析为一个IP的服务,或者这样理解,当你搜索一个网址时,你需要键入刚网站对应的ip地址(因为计算机更理解数字啊),但是大量的ip地址作为网址搜索时,无疑是一件很麻烦的事情,好比通讯录一样,因此我们就需要通过一个容易记忆的字符串记录,而DNS服务就是完成字符串与ip地址之间的转换。

2.了解一些基础概念:

    FQDN:全限定域名,即逻辑上的主机名加上主机在域中的位置,

    TLD:顶级域名,有两个词组成,中间有小数点,全球一共13个根节点

        分类:

            国家个地区的顶级域名

            国际顶级域名

    DNS:域名服务器

        通过域名数据库记录的数据,进行域名与ip地址之间的转换,工作在udp/tcp的53号端口上

     [扩展]tcp:传输控制协议:双方通信前需要事先建立虚连接的的面向连接的协议

                udp:数据控制协议:双方通信前无需事先建立虚连接的协议

3.DNS查询的类型:

    技术分享

 















   根据上图:简单的可以看出DNS的查询类型分为两种:

    第一种:递归查询,即客户端到本地DNS服务器之间的通信

    第二种:迭代查询,即本地DNS服务器与其他DNS服务器之间的查询

4.DNS的解析方式:

    正向解析:名称到ip转换的操作

    反向解析:ip到名称之间的转换操作

5.DNS解析的过程

    递归查询:

        客户端首先访问hosts文件查看是否有该条名称记录的ip地址,如果没有在本地的DNS服务进行查询,如果有,则直接返回给客户端,这样的过程就是递归,本地的dns只是传递给客户端最终的结果(有or没有)

    迭代查询:首先访问hosts文件,如果没有,切换到本地的dns服务,本地客户端倘若也没有该条记录,则直接会询问跟节点,根节点会返回本地DNS服务器一个该名称对应的的二级域,dns会继续向该二级域查询该名称的地址,知道查询到该地址的权威服务器回应的权威答案ip,本地DNS服务器然后将结果返回给客户端,这就是完成了dns解析过程中迭代与递归的过程

6.DNS的配置文件

    区域(物理概念)和域(逻辑概念)

正向解析库:    FQDN-IP

反向解析库 :      IP-FQDN

7.区域数据库文件

资源记录:Resource Record, 简称rr;

 记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX

 SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;

 NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;

A: Address, 地址记录,FQDN --> IPv4;

AAAA:地址记录, FQDN --> IPv6;

CNAME:Canonical Name,别名记录;

PTR:Pointer,IP --> FQDN

MX:Mail eXchanger,邮件交换器;

优先级:0-99,数字越小优先级越高;

资源记录的定义格式:

语法:name  [TTL] INRR_TYPE value

SOA:

name: 当前区域的名字;例如”linuxedu.com.”,或者“2.3.4.in-addr.arpa.”;

value:有多部分组成

(1) 当前区域的区域名称(也可以使用主DNS服务器名称);

(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;

(3) (主从服务协调属性的定义以及否定答案的TTL)

例如:

linuxedu.com. 	86400 	IN 	SOA 	linuxedu.com. 	admin.linuxedu.com.  (
		2017010801	; serial
		2H 		; refresh
		10M 		; retry
		1W		; expire
		1D		; negative answer ttl)	

NS:

name: 当前区域的区域名称

value:当前区域的某DNS服务器的名字,例如ns.linuxedu.com.;

注意:一个区域可以有多个ns记录; 

例如:

linuxedu.com. 	86400 	IN 	NS  	ns1.linuxedu.com.
linuxedu.com. 	86400 	IN 	NS  	ns2.linuxedu.com.

MX:

name: 当前区域的区域名称

value:当前区域某邮件交换器的主机名;

注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;

例如:

linuxedu.com. 		IN 	MX 	10  	mx1.linuxedu.com.
linuxedu.com. 		IN 	MX 	20  	mx2.linuxedu.com.

A:

name:某FQDN,例如www.linuxedu.com.

value:某IPv4地址;

例如:

www.linuxedu.com.		IN 	A	1.1.1.1
www.linuxedu.com.		IN 	A	1.1.1.2
bbs.linuxedu.com.		IN 	A	1.1.1.1

AAAA:

name:FQDN

value: IPv6

PTR:

name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;

value:FQND

例如:

4.3.2.1.in-addr.arpa.  	IN  PTR	www.linuxedu.com.

CNAME:

name:FQDN格式的别名;

value:FQDN格式的正式名字;

8.概念那么多,我们来实践一下,如何实现DNS解析(centos7平台)

了解bind:Berkeley Internet Name Domain伯克利互联网名称域

bind是dns服务的一种实现

named:是bind程序运行的进程名

bind中包括的程序包:

 bind-libs:被bind和bind-utils包中的程序共同用到的库文件;

 bind-utils:bind客户端程序集,例如dig, host, nslookup等;

 bind:提供的dns server程序、以及几个常用的测试程序;

 bind-chroot:选装,让named运行于jail模式下;

首先安装bind程序包

[root@bogon yum.repos.d]# yum info bind
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: 
 * extras: mirrors.aliyun.com
Available Packages
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.9.4
Release     : 29.el7
Size        : 1.8 M
Repo        : base/7/x86_64
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
URL         : http://www.isc.org/products/BIND/
License     : ISC
Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS
            : (Domain Name System) protocols. BIND includes a DNS server (named),
            : which resolves host names to IP addresses; a resolver library
            : (routines for applications to use when interfacing with DNS); and
            : tools for verifying that the DNS server is operating properly.

安装bind程序包:

[root@bogon yum.repos.d]# yum install -y bind*

9.dns的配置文件

   (1)主配置文件

    /etc/named.conf或包含进来的其他文件/etc/named.iscdlv.key,/etc/named.rfc1912.zones,

    /etc/named.root.key

    (2)解析库文件

    /var/named/目录下,一般为ZONE_NAME.zone

    [注意]

   (1)一台DNS服务器可同时为多个区域提供解析;

   (2) 必须要有根区域解析库文件: named.ca;

   (3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;

    正向:named.localhost

[root@bogon yum.repos.d]# cat /var/named/named.localhost 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1

反向:named.loopback

[root@bogon yum.repos.d]# cat /var/named/named.loopback 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1
	PTR	localhost.

rndc:远程名称域控制

工作在953/tcp端口,但默认监听于127.0.0.1地址,因此仅允许本地使用,不允许远程

bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;

 CentOS 6: service  named  start

 CentOS 7: systemctl  start  named.service

主配置文件的格式:每个语句必须使用分号结尾

 全局配置段:options{...}

 日志配置段:logging{...}

 区域配置段:zone{...}

options {#全局配置段
        listen-on port 53 { 127.0.0.1; };#缓存名称服务器只监听在本机,也可是一个ip范围
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; };#测试时建议关闭,表示仅允许贝斯查询

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

缓存名称服务器的配置

 监听能与外部主机通信的地址

  listen-on port 53;

  listen-on port 53 { 192.168.1.100 ;};

  listen-on port 53 { 192.168.1.100,192.168.1.200 ;};

测试时建议关闭dnssec,需要时开启

 dnssec-enable no;
 dnssec-validation no;

建议关闭仅允许本地查询

#allow-query{localhost;};

检查语法错误命令

named-checkconf

开启服务,检查端口

[root@bogon ~]# systemctl start named.service
[root@bogon ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1355/named          
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1094/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1096/cupsd          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      1355/named          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1212/master         
tcp6       0      0 ::1:53                  :::*                    LISTEN      1355/named          
tcp6       0      0 :::22                   :::*                    LISTEN      1094/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1096/cupsd          
tcp6       0      0 ::1:953                 :::*                    LISTEN      1355/named          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1212/master         
udp        0      0 0.0.0.0:2294            0.0.0.0:*                           886/dhclient        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           837/chronyd         
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1355/named          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           886/dhclient        
udp6       0      0 ::1:323                 :::*                                837/chronyd         
udp6       0      0 :::13128                :::*                                886/dhclient        
udp6       0      0 ::1:53                  :::*                                1355/named

介绍几款测试工具

dig命令

 格式:dig [-t RR_TYPE] NAME [@SERVER]  [query options]

 主要是检测DNS系统,因此不会查询host文件;

 注意两个选项:

  +[no]trace:跟踪解析过程

  +[no]recurse:进行递归解析

反向解析:dig -x IP

模拟完全区域传送:dig  -t  axfr  DOMAIN  [@server]

host命令:

host  [-t  RR_TYPE]  name  SERVER_IP

nslookup命令:

nslookup  [-options]  [name]  [server]

交互式模式:

nslookup>

server  IP:以指定的IP为DNS服务器进行查询;

set  q=RR_TYPE:要查询的资源记录类型;

name:要查询的名称;

rndc命令:named服务控制命令

rndc  status

rndc  flush

配置一个正向区域:

  (1)定义区域

    在主配置文件中或主配置文件辅助配置文件中实现/etc/named.rfc.1912.zones中追加

zone "linuxedu.top" IN {
        type master;
        file "linuxedu.top.zone";
}

  (2)定义区域数据文件(主要记录为A或AAAA记录)路径为/var/named目录下

创建linuxedu.top数据文件

1) $TTL 变量,全局继承此处的缓存周期,单位是秒

2) @代替/etc/named.rfc1912.zones配置的ZONE_NAME,也可以自己定义补全宏:$ORIGIN  linuxedu.top.

3) 定义第二条记录,若写全称最后一个点绝对不能省略

    简写时会自动补全/etc/named.rfc1912.zones配置的ZONE_NAME,此时一定不能有这个点

               示例格式:ns1==ns1.linuxedu.top.

4) 同一个地址可以有两个名字

5) 一台DNS服务器上配置可以为正常的在互联网上运行的服务器解析,指向为www的具体地址

      www IN A   [www服务器地址]

6) 可以定义别名类型:例如web IN CNAME www #定义别名

[root@bogon named]# cd /var/named/
[root@bogon named]# vim linuedu.top.zone
[root@bogon named]# cat linuedu.top.zone
$TTL 3600
@	IN	SOA	ns1.linuxedu.top.	1451032707.qq.com (
		2016050113	;serial
		3H		;refresh
		10M		;retry
		1W		;expire
		1D		;negative answer ttl
)
	IN	NS	ns1.linuxedu.top.
ns1	IN	A	192.168.1.100
www	IN	A	192.168.1.100

权限及数组修改:

# chgrp  named  /var/named/magedu.com.zone
# chmod  o=  /var/named/172.16.100.zone

检查语法错误:

# named-checkzone  ZONE_NAME   ZONE_FILE
# named-checkconf

让服务器重载配置文件和区域数据文件

# rndc  reload 
或者
# systemctl  reload  named.service

测试主机

[root@localhost named]# dig -t A www.linuxedu.top @192.168.168.128

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.linuxedu.top @192.168.168.128
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30492
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linuxedu.top.		IN	A

;; ANSWER SECTION:
www.linuxedu.top.	3600	IN	A	192.168.168.128

;; AUTHORITY SECTION:
linuxedu.top.		3600	IN	NS	ns1.linuxedu.top.

;; ADDITIONAL SECTION:
ns1.linuxedu.top.	3600	IN	A	192.168.168.128

;; Query time: 1 msec
;; SERVER: 192.168.168.128#53(192.168.168.128)
;; WHEN: Sun May 01 14:09:46 CST 2016
;; MSG SIZE  rcvd: 95

配置解析一个反向区域

定义区域:

   在主配置文件中或主配置文件辅助配置文件中实现

$TTL 3600
$ORIGIN 168.168.192.in-addr.arpa.
@       IN      SOA     ns1.linuxedu.top        1451032707.qq.com (
        2016050116      ;serial
        1H              ;reflush
        10M             ;retry
        3D              ;expire
        12H             ;ttl
)
        IN      NS      ns1.linuxedu.top.
129     IN      PTR     ns2.linuxedu.top.
129     IN      PTR     www.linuxedu.top.

其他步骤,与正向解析一样

本文出自 “Touch Dream” 博客,请务必保留此出处http://xuelong.blog.51cto.com/10573089/1769318

DNS服务的协议讲解以及DNS服务搭建

标签:域名服务器   dns服务   fqdn   正向解析   反向解析   

原文地址:http://xuelong.blog.51cto.com/10573089/1769318

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!