您的位置:首页 > 其它

DNS服务器搭建从协议到实现详解

2016-01-11 16:54 459 查看
一、域名和服务概述

1.FQDN:Fully Qualified Domain Name,完全限定域名,全局唯一
FQDN是指主机名加上全路径,全路径中列出了序列中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。

2.TLD:Top Level Domain,顶级域名
(1)顶级域名:域名由两个或两个以上的词构成,中间由点号分隔开,最右边的那个词
域名分层设计:倒置树状结构,上级包含下级,全球只有13个根节点
分布式数据库系统:将一个大的书库分割成多个小的数据库,分布式管理
(2)分类
国家和地区顶级域名(countrycode top-level domains,nTLDs):国家都按照ISO3166国家代码分配
国际顶级域名(generictop-level domains,gTLDs):组织域,.com, .net,.org, .gov, .edu, .mil
[图示]



3.DNS:Domain Name System,域名服务(应用层协议)
因特网上作为域名和IP地址相互映射的一个分布式数据库,C/S架构,而非IP数串访问。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在53/udp、53/tcp端口。
C/S架构:Client:发起应用请求的程序;Server:响应请求(提供服务)的程序,监听在端口;
传输层协议: TCP, UDP,SCTP
TCP: Transmission Control Protocol,面向连接的协议:双方通信之前需要事先建立虚连接;
UDP:User Datagram Protocol,无连接的协议:双方无须通信之前需要事先建立虚连接;
(1)DNS查询类型
客户主机---> 运营商or最近的DNS服务器
----> 存在,返回
----> 不存在--->进行分布式DNS系统根节点--->分布式运作向下迭代级别查询
第一阶段:递归查询,从客户机到自己所指向的DNS服务器
第二阶段:迭代查询(从分布式DNS系统顶端开始查询)
(2)DNS名称解析方式
1)正向解析:名称 --> IP,域名转换成ip地址的操作
2)反向解析:IP --> 名称,ip地址转换成域名的操作
以ip地址为线索查询,最顶端位置名字:in-addr.arpa
eg:1.2.3.4 ==》写成4.3.2.1.in-addr.arpa,网段3.2.1.in-addr.arpa
注意:二者的名称空间,非为同一个空间,即非为同一棵树状结构体系;所以不是同一个解析库;
域名服务代理商:godaddy、万网 … …
(3)DNS服务器类型
1)负责解析至少一个域:主名称服务器;辅助名称服务器;
2)不负责解析:缓存名称服务器;

4.DNS解析流程
首先查找本机HOSTS表,有就直接使用表中定义,无查找网络连接中设置的DNS 服务器由他来解析。
Client --> hosts文件 --> DNS LocalCache (本地DNS缓存)--> DNS Server (recursion,递归请求) -->
--->自己负责解析的域:直接查询数据库并返回答案;
--->不是自己负责解析域:Server Cache --> iteration(迭代方式查找分布式DNS系统根)
解析答案分类:
1) 肯定答案:返回肯定答案
否定答案:不存在查询的键,因此,不存在与其查询键对应的值;
2) 权威答案:由直接负责的DNS服务器返回的答案;
非权威答案:从缓存中读取的答案

二、DNS区域配置文件
1.DNS区域(zone)和域(domain)
区域是物理概念,域是逻辑概念
域:一段命名空间,一般包括正向解析区域和反向解析区域
正向解析区域:包含FQDN --> IP的转换、正向解析库
反向解析区域:包含IP --> FQDN的转换、反向解析库

2.区域数据库文件
(1)资源记录:ResourceRecord, 简称rr;
区域数据库文件中的每一个记录条目
(2)记录有类型:A, AAAA, PTR,SOA, NS, CNAME, MX
SOA:StartOf Authority, 起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
NS:NameService, 域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
A: Address, 地址记录,FQDN --> IPv4转换;
AAAA:地址记录, FQDN --> IPv6转换;
CNAME:CanonicalName, 别名记录;
PTR:Pointer,指针, 从IP --> FQDN实现反向解析地址
MX:Mail eXchanger, 邮件交换器;有优先级的概念,用数字0-99表示,数字越小优先级越高;
(3)资源记录的定义格式:
语法:name [TTL] IN RR_TYPE value
name:名称,可以为主机名、FQDN、IP,正向解析主机名是name,反向解析IP是name
TTL:缓存周期。DNS的缓存机制,可以统一定义,每条定义记录中省略从全局继承
IN:关键字,不能省略,指明其类型和值
RR_TYPE :资源区域数据库的资源记录的类型
value:值,可以包含多段组成
注意:资源区域数据库的资源记录类型不同,名称和值会有特殊要求:

3.定义不同资源类型记录格式
注意:
1)TTL可以从全局继承;
2) @表示当前区域的名称,任何时候用到可以使用@来取代;
3)相邻的两条记录其name相同时,后面的那条记录name可省略;
4)对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录,非必须;
(1)SOA:任何一个数据库此条必须存在且为第一条
name: 当前区域的名字,最后一个"."不能省略
value:有多部分组成
1) 当前区域的区域名称(也可以使用主DNS服务器名称);
2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
3) (主从服务协调属性的定义以及否定答案的TTL)
示例:
xuding.win. 86400 IN SOA xuding.win. admin.xuding.com. (
2017010801 ;serial
2H ;refresh
10M ;retry
1W ;expire
1D ;negative answer ttl
)
说明:
1)value在一对( )中书写,可以写在同一行用空格隔开,也可以分行书写
2)value之后用";"其后可以进行注释,也可以省略
3)value的单位有H小时、M分钟、W周、D天
4)serial最长只能是十位数字组成,一般用"当前日期+版本号"方便管理
(2)NS:
name:当前区域的区域名称
value:当前区域的某DNS服务器的名字
一个区域可以有多个ns记录; 多个主机的名称相同无意义
示例:
xuding.win. 86400 IN NS ns1.xuding.win.
xuding.win. 86400 IN NS ns2.xuding.win.
(3)MX:
name:当前区域的区域名称
value:当前区域某邮件交换器的主机名;
MX记录可以有多个;每个记录的value之前有一个数字表示其优先级;
示例:
xuding.win. IN MX 10 mx1.xuding.win.
xuding.win. IN MX 20 mx2.xuding.win.
(4)A:
name:某个FQDN,例如www.xuding.win.
value:某IPv4地址;
一个主机可以有多个地址,一个二地址也可以有多个名字
示例:
www.xuding.win. IN A 1.1.1.1
www.xuding.win. IN A 1.1.1.2
bbs.xuding.win. IN A 1.1.1.1
(5)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.xuding.win.
(6)CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;
示例:web.magedu.com. IN CNAME www.xuding.win.

三、BIND程序配置DNS服务器
1.BIND:Berkeley Internet NameDomain,伯克利互联网名称域
BIND程序是DNS域名解析服务协议的实现,由ISC.org组织代为维护,该组织通吃维护DHCP




2.BIND相关程序包:[root@localhost ~]# yum list all bind*
bind-libs:被bind(服务器包)和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如dig,host, nslookup等;
bind:提供的dnsserver程序、以及几个常用的测试程序;
bind-chroot:选装,让named运行于jail(容器沙箱)模式下;
注意:一般bind-libs和bind-utils在发行版安装时候会自动安装




3.BIND配置文件
(1)主配置文件:/etc/named.conf
可使用include指令包含进来其它文件:
/etc/named.iscdlv.key、/etc/named.rfc1912.zones、/etc/named.root.key
(2)解析库文件:/var/named/ZONE_NAME.zone
1)一台DNS服务器可同时为多个区域提供解析;
2) 必须要有根区域解析库文件: CentOS上是named.ca文件;
3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
正向:/var/named/named.localhost、 反向:/var/named/named.loopback



named.ca、named.localhost、named.loopback,rpm安装后会自动生成,rpm包制作者提供该类文件
(3)rndc:remotename domain contoller,名称域(远程)控制工具
工作在953/tcp端口,但默认监听于127.0.0.1地址,因此仅允许本地使用,不允许远程;
NAMED启动服务后/etc/named.conf默认仍然仅监听172.0.0.1:53端口,且allow-query运行访问为本地主机




4.主配置文件格式:每个配置语句必须以分号结尾
全局配置段:options{… … }
日志配置段:logging{… … }
区域配置段:zone {… … }定义由本机负责解析的区域,或转发的区域;



(1)缓存名称服务器的配置:
监听能与外部主机通信的地址:listen-on port 53 { 172.0.0.1; 172.16.100.67; };
注意:花括号前后要有空格,每个地址之后必须以;结束,否则会语法错误
(2)测试时建议关闭dnssec,需要时开启
dnssec-enableno;
dnssec-validationno;
dnssec-lookasideno;
(3)关闭仅允许本地查询://allow-query { localhost; };
(4)检查配置文件语法错误(默认检查/etc/named.conf):named-checkconf
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
CentOS6: service named start
CentOS7: systemctl start named.service




(5)查看此时的监听端口:[root@localhost /]#netstat -tunlp
此时named服务已经开始监听端口53/tcp 53/udp,rndc 程序开始监听953/tcp




四、BIND测试工具:dig, host, nslookup
1.dig命令:用于测试dns系统,因此其不会查询hosts文件
(1)反向解析测试:dig -x IP
注意,有正向解析,不一定能反向解析出域名,因为IP和FQDN不在一个树状结构系统上
(2)模拟完全区域传送:
dig -t axfr DOMAIN [@server]
(3)正向解析:dig [-t RR_TYPE] name [@SERVER] [query options]
-t RR_TYPE:指明资源记录类型
name:将名称解析为指明的资源类型的
@SERVER:指明解析的服务器,指明服务器后,/etc/resolv.conf中配置的nameserver将无意义
query options额外查询选项:
+[no]trace:[不]跟踪解析过程;
+[no]recurse:[不]进行递归解析;
实例ONE:[root@localhost /]# dig-t A www.192171.org



实例TWO:[root@localhost /]# dig-t A www.sina.com
; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A www.sina.com
;; global options: +cmd
全局属性
;; Got answer:
获得答案
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50782
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 5
标志位
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 40960
伪选项段
;; QUESTION SECTION:
;www.sina.com. IN A

;; ANSWER SECTION:答案段
www.sina.com. 53 IN CNAME us.sina.com.cn.
us.sina.com.cn. 53 IN CNAME news.sina.com.cn.
news.sina.com.cn. 53 IN CNAME jupiter.sina.com.cn.
jupiter.sina.com.cn. 2649 IN CNAME polaris.sina.com.cn.
polaris.sina.com.cn. 53 IN A 202.108.33.60
问题
;; AUTHORITY SECTION:
sina.com.cn. 54870 IN NS ns3.sina.com.cn.
sina.com.cn. 54870 IN NS ns1.sina.com.cn.
sina.com.cn. 54870 IN NS ns2.sina.com.cn.
sina.com.cn. 54870 IN NS ns4.sina.com.cn.
权威段,谁负责解析
;; ADDITIONAL SECTION:
ns1.sina.com.cn. 54870 IN A 202.106.184.166
ns2.sina.com.cn. 54870 IN A 61.172.201.254
ns4.sina.com.cn. 54870 IN A 121.14.1.22
ns3.sina.com.cn. 54870 IN A 123.125.29.99
显示DNS主机的具体Ip
;; Query time: 1 msec
查询时长
;; SERVER: 172.16.0.1#53(172.16.0.1)
由哪个IP主机进行操作
;; WHEN: 一 1月 11 00:37:28 CST 2016
时间
;; MSG SIZE rcvd: 284
实例THREE:[root@localhost /]# dig+trace -t A www.192171.org #显示其解析过程,基于迭代方式解析




2.host命令:
host [-t RR_TYPE] name SERVER_IP
实例:
[root@localhost/]# host -t A www.baidu.com
[root@localhost/]# host -t NS baidu.com
[root@localhost/]# host -t MX baidu.com




3.nslookup命令:
(1)命令行模式:nslookup [-options] [name] [server]
(2)交互式模式:
# nslookup>
server IP:以指定的IP为DNS服务器进行查询;
set q=RR_TYPE:要查询的资源记录类型;
name:要查询的名称;




4.rndc命令:named服务控制命令
(1)rndc -h 显示全部子
(2)rndc flush 清空服务器中dns缓存
(3)rndc stop :可关闭dns服务
(4)rndc reload 重载区域配置文件,可以致命一个区域名重新加载
(5)rndc status:查看DNS服务器状态



version: 9.9.4-RedHat-9.9.4-18.el7 <id:8f9657aa>
#服务器版本号
CPUs found: 1
#CPU数量
worker threads: 1
#工作线程
UDP listeners per interface: 1
#UDP在接口的监听百分比
number of zones: 101
#区域的数量
debug level: 0
#调错等级
xfers running: 0
#运行中的xfers
xfers deferred: 0
#延迟的xfers
soa queries in progress: 0
正在进行的SOA查询有多少个
query logging is OFF
查询日志功能是关闭的
recursive clients: 0/0/1000
递归查询的客户端有多少个,最多允许1000个
tcp clients: 0/100
tcp客户端有多少个,最多允许100个
server is up and running
服务器处于正常的启动状态
五、DNS服务器正向区域配置
1.配置主配置文件/etc/named.conf的options段
==========================================================================
options{
listen-onport 53 { 127.0.0.1; 172.16.49.2; };
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; };
recursionyes;
dnssec-enableno;
dnssec-validationno;
dnssec-lookasideno;
=========================================================================
2.定义区域:在主配置文件中或主配置文件辅助配置文件中实现;
/etc/named.con文件一般只有根"."文件区域的配置信息
但其能包含include"/etc/named.rfc1912.zones"文件中定义自定义的区域
一般在/etc/named.rfc1912.zones,rfc1912:遵循1912规范的各区域请求注解文档
zone "ZONE_NAME" IN {
/*区域名字即为域名*/
type {master|slave|hint|forward};
/*仅有一台主机为DNS服务器此处一定有master*/
file "ZONE_NAME.zone";
};
/*相对路径表示在/var/named目录下,也可以使用绝对路径*/
============================在/etc/named.rfc1912.zones中追加====================================
zone "xuding.win" IN {
typemaster;
file"xuding.win.zone";
};
===============================================================================================

3.建立区域数据文件(主要记录为A或AAAA记录)
在/var/named目录下建立区域数据文件,例如/var/named/xuding.win.zone;
1) $TTL 变量,全局继承此处的缓存周期,单位是秒
2) @代替/etc/named.rfc1912.zones配置的ZONE_NAME,也可以自己定义补全宏:$ORIGIN xuding.win.
3) 定义第二条记录,若写全称最后一个点绝对不能省略
简写时会自动补全/etc/named.rfc1912.zones配置的ZONE_NAME,此时一定不能有这个点
示例格式:ns1==ns1.xuding.win.
4) 同一个地址可以有两个名字
5) 一台DNS服务器上配置可以为正常的在互联网上运行的服务器解析,指向为www的具体地址
www IN A [www服务器地址]
6) 可以定义别名类型:例如web IN CNAME www #定义别名




4.权限及属组修改:
#chgrp named /var/named/magedu.com.zone
#chmod o= /var/named/magedu.com.zone




5.检查语法错误:
# named-checkzone ZONE_NAME ZONE_FILE
# named-checkconf
[root@localhost named]# named-checkconf 检查配置文件时候,因为链接到会一起检查语法
[root@localhost named]# named-checkzonexuding.win /var/named/xuding.win.zone 检查区域和区域文件语法
zonexuding.win/IN: loaded serial 2016011001
OK

6.让服务器重载配置文件和区域数据文件
#rndc reload 或
#systemctl reload named.service
[root@localhost named]# rndc reload 重读配置文件装载区域
serverreload successful




7.测试主机正向区域配置是否成功
[root@localhost named]# dig -t A www.xuding.win @172.16.49.2 测试本机




六、配置解析一个反向区域
1. 定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
注意:反向区域的名字,反写的网段地址.in-addr.arpa :例如49.16.172.in-addr.arpa

2.定义区域解析库文件(主要记录为PTR)
示例,区域名称为49.16.172.in-addr.arpa;
$TTL3600
$ORIGIN 49.16.172.in-addr.arpa.
@ IN SOA ns1.xuding.win. xuding19931202.163.com. (
2017010801
1H
10M
3D
12H)
IN NS ns1.xuding.win.
2 IN PTR www.xuding.win.

3.权限及属组修改:
# chgrp named /var/named/172.16.49.zone
# chmod o= /var/named/172.16.49.zone

4.检查语法错误:
#named-checkzone ZONE_NAME ZONE_FILE
#named-checkconf

5.让服务器重载配置文件和区域数据文件
#rndc reload 或
#systemctl reload named.service

本文出自 “许鼎的博客” 博客,请务必保留此出处/article/4223985.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: