dns:domain name service,协议:这种协议默认的端口是在53/udp和53/tcp端口上通信。
我们一般访问互联网的网站一般输入的是域名,但大家想过没有,互联网通信主要靠的是ip,ip地址不容易记忆,之后就有了把ip转换成名称
早期互联网只有寥寥几台,到后来计算机发展渐渐多了起来,之后引用了一种机制,引用了名称解析,早期的名称解析,只是在计算机上有个文件数据库hosts里面存放这名称也称主机和ip的对应关系,在网页上输入名称计算机会遍历查找hosts文件看有没有对应的ip,每次更新都到互联网上的服务器上下载最新的hosts文件,最后每天出现几百台或几千台的情况,维护起hosts文件,就变的越来越困难了,文件也越来越大。
把这种情况层次化了,形成倒树形状显示,最上面的是根域,下面是的顶级域,在下面是二级域,三级域:
全世界有十三个根服务器,有十几个顶级服务器
顶级域:
组织域:.com,.net,.org,.gov,edu,mil等等还有很多,
国家域:.iq, .tw, .hk, .jp, .cn等等...
这就是dns
dns查询:
迭代:
当dns接到请求后他先查找本地数据库,如果没有的话就找根服务器,根据根服务器返回的信息如.com在找.com 根据.com返回的信息在找下去,找到找到并把信息返回给客户端,这个过程就是迭代
递归:
客户端向访问网站的话,先查找本地缓存,如果没有的话发送请求,这个过程就是递归
DNS名称解析方式:
名称 --> ip :正向解析,上面显示是正向解析
ip--> 名称 :反向解析
注意:二者的名称空间,非为同一个空间,即非为同一棵树,因此,也不是同一个解析库。
DNS服务器类型:
负责解析至少一个域:
主名称服务器
辅助名称服务器
不负责域解析:
缓存名称服务器
一次完整的查询请求经过的流程:
client --> hosts文件 -->DNS本地缓存 -->发送DNS服务器递归请求 -->
自己负责解析的域;直接查询数据库并返回答案;
不是自己负责解析域:先找服务器自己的缓存,没有的话迭代查找根服务器等等
从服务器返回的解析答案可能有两种:
第一种:肯定答案,有结果
第二种:不存在查询的内容,因此更不存在与其查询内容的对应值,
不存在的内容会缓存,有一定的缓存时间
服务器的返回答案有:
权威答案:由直接负责解析DNS服务器返回的答案
否定答案:从缓存中得到的答案
主-从DNS服务器:
主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行
从DNS服务器:从主DNS服务器那里或其他的从DNS服务器那里“复制”一份解析库;但只能进行读操作
“复制”操作的实施方式:
序列号:serial,也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增
刷新时间间隔:refresh,从服务器没多久到主服务器检查序列号更新状况
重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务
否定答案的缓存时长:
主服务器“通知”从服务器随时更新数据;主服务器每更新数据时都会通知从服务器
从服务器同步主服务器区域传送,有两种:
全量传送:axfr,传送整个数据库
增量传送:ixfr,仅传送变量的数据
区域(zone)和域(domain):
正向解析一般称为:正向区域
反向解析一般称为:反向区域
域是一种很笼统的概念,可以把整个DNS看成一个域,看到的只有服务器,每个域都有一个正向解析和反向解析
区域数据库文件:
资源记录:resource record,简称rr
记录有类型:A,AAAA,PTR,SOA,CNAME,MX
SOA:start of authority:起始授权记录,一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
NS:name service ,域名服务记录;一个区域解析库可以有多个NS记录,其中一个为主的
A:address,地址记录,从FQDN --> IP ,仅支持ipv4地址
AAAA:从FQDN --> IP ,仅支持ipv6的地址
CNAME:canonical name,别名记录
PTR:pointer, IP -->FQDN
MX:mail exchanger,,邮件交换器
MX有优先级的概念:0-99,数字越小优先级越高
资源记录的定义格式:
语法:name[TTl]INRR_TYPEvalue
根据name 查询 value
SOA:
name:当前区域的名字:例如“magedu.com.”,或“2.3.4.in-addr-apra.”;
value:有多部分组成
(1)当前区域的区域名称(也可以使用主DNS服务器名称);
(2)当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代
(3)(主从服务协调属性的定义以及否定答案的TTL)
例如:
magedu.com86400INSOAmagedu.com.admin.lgt.com.(
2017010801 ;serial
2H;refresh
10M;retry
1W;expire
1D;negativeanswerttl
)
注意:括号里分号代表注释
NS:
name:当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.lgt.com;
注意:一个区域可以有多个NS记录
例如:
lgt.com.86400INNSns1.lgt.com.
lgt.com86400INNSns2.lgt.com.
MX:
name:当前区域的区域名称
value:当前区域某邮件交换器的主机名
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级
例如:
lgt.com.INMX10mx2.lgt.com.
lgt.com.INMX20mx2.lgt.com.
A:
name:某FQDN,例如www.lgt.com
value:某IP地址
例如:
www.lgt.comINA1.1.1.1
www.lgt.comINA1.1.1.1
PTR:
name:ip地址,有特定格式,ip反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr-arpa.;
value:FQND
例如:
4.3.2.1.in-addr.arpa.INPTRwww.lgt.com.
CNAME:
name:FQDN格式的别名
value:FQDN格式的正式名字
例如:
web.lgt.com.INCNAMEwww.lgt.com.
BIND的安装配置:
BIND: Berkeley Internet Name Domain, ISC.org
dns: 协议
bind: dns协议的一种实现
named:bind程序的运行的进程名
程序包:
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如dig, host, nslookup等;
bind:提供的dns server程序、以及几个常用的测试程序;
bind-chroot:选装,让named运行于jail模式下;
bind:
主配置文件:/etc/named.conf
或包含进来其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
解析库文件:
/var/named/目录下;
一般名字为:ZONE_NAME.zone
注意:(1) 一台DNS服务器可同时为多个区域提供解析;
(2) 必须要有根区域解析库文件: named.ca;
(3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
正向:named.localhost
反向:named.loopback
rndc:remote name domain contoller
953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
CentOS 6: service named start
CentOS 7: systemctl start named.service
主配置文件格式:
全局配置段:
options { ... }
日志配置段:
logging { ... }
区域配置段:
zone { ... }
那些由本机负责解析的区域,或转发的区域;
注意:每个配置语句必须以分号结尾;
缓存名称服务器的配置:
监听能与外部主机通信的地址;
listen-on port 53;
listen-on port 53 { 172.16.100.67; };
学习时,建议关闭dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
关闭仅允许本地查询:
//allow-query { localhost; };
检查配置文件语法错误:
named-checkconf [/etc/named.conf]
测试工具:
dig, host, nslookup等
dig命令:
dig [-t RR_TYPE] name [@SERVER] [query options]
用于测试dns系统,因此其不会查询hosts文件;
查询选项:
+[no]trace:跟踪解析过程;
+[no]recurse:进行递归解析;
注意:反向解析测试
dig -x IP
模拟完全区域传送:
dig -t axfr DOMAIN [@server]
一、配置一个DNS正向解析:
1、首先先安装DNS的主程序包bind:
配置好yum,可用yum -y install bind
2、配置主配置文件或辅配置文件:
在/etc/named.conf主配置文件的最下面写有include “/etc/named.rfs1921.zones”如下图;
代表主配置文件包含/etc/named.rfs1921.zones文件,称为辅配置文件,我们通常不在主配置文件中填写配置,而是在辅配置文件中写:
在配置文件中添加自己的ip172.16.143.9,后面测试用,记得把图片中最后一行加上//
3、配置正向区域:
a) 下图中的第一行 除了引号中的内容其他的是标准的固定格式,引号中定义的是区域”域名”
b) 第二行:定义区域的类型有,主DNS(master)、从DNS(slave)、根DNS服务器(hint)、转发DNS(forward)。
c) 输入数据库文件名字,默认在/var/named/目录下查找
d) 每行结束必须以 “;”结尾。
4、定义数据库文件
a) cd /var/named 目录中创建一个以刚才指定的数据库名字为文件名,在进行编辑:
上面;后面的都是注释,有两个NS1的A记录,能实现负载均衡,这里的管理员邮箱不能写@,这里的@有特殊意义,把@替代成”.“
5、好了之后检查配置文件及数据库:
a) named-checkconf :这个命令默认检查主配置文件 ;没有信息说明没有错误
b) named-checkzone 区域域名 文件名 :例如 named-checkzone lgt.com /var/named/lgt.com.zone
6、修改新增加的数据文件的权限:
a) chgrp named /var/named.lgt.com.zone :把数据文件属组更改成named
b) chmod o= /var/named.lgt.com.zone :把数据文件其他用户改成没有任何权限
c) 重载配置文件: rndc reload 或 systemctl reload named
7、测试是否能解析
a) dig -t A www.lgt.com :测试正向解析,出现以下情况说明解析成功
也可以测试地址记录dig -t NS lgt.com 出现下面的情况说明成功
二、配置DNS反向区域:
在配置文件中添加自己的ip172.16.143.9,后面测试用,记得把图片中最后一行加上//
1、和上面一样都是配置/etc/named.rfs1921.zones,配置如下;
注释:
第一行”“中内前三个ip要倒着写,ip后面是反向解析的固定格式
第二行和第三行和正向解析一样,请参考上面的写
2、反向解析的数据文件
3、好了之后检查配置文件及数据库:
c) named-checkconf :这个命令默认检查主配置文件 ;没有信息说明没有错误
d) named-checkzone 区域域名 文件名 :例如 named-checkzone 143.16.172.in-addr.arpa /var/named/172.16.143.zone
7、修改新增加的数据文件的权限:
a) chgrp named /var/named.lgt.com.zone :把数据文件属组更改成named
b) chmod o= /var/named.lgt.com.zone :把数据文件其他用户改成没有任何权限
c) 重载配置文件: rndc reload 或 systemctl reload named
8、测试是否能解析
a)反向解析命令:dig -x 172.16.143.9
三、配置从服务器
从服务器只是区域级别的概念,从服务器只是你指定的从服务,是一对一
一台服务器可以配置能一主一从,DNS服务器可以接受网络中请求,和本地请求
1、在另一台服务器上安装bind程序,开启服务
2、在配置文件中定义区域
在/etc/named.conf如下图,花括号两边必须有空格,图片中最后一行注释掉
//代表注释;
在/etc/named.rfc1912.zones配置从服务器区域:
上面:第一行”“中要写主DNS服务器域名
第二行类型写 从服务器
第三行指同步过来的数据放到那里
第四行:指定主DNS服务器
从服务器是同步主服务器数据文件到本服务器上的,因此它的目录必须具有写权限,只能放在/var/named/slaves中
3、检查配置文件
named-checkconf
4、在主DNS数据文件中添加NS记录,NS转换A记录 指向从服务器ip,修该完后序列号加1
5、在主DNS服务器上检查数据文件
named-checkzone lgt.com /var/named/lgt.com.zone
6、先重读主DNS服务器配置文件,在重读从服务器配置文件,出现下图中的文件表示
成功
7、修改权限
如果测试不成功的话,可以先把文件删掉,在让主服务器传送一份
四、配置反向从服务器
1、使用前面的正向从服务器,在其上面配置一个反向从服务器
2、配置反向区域配置文件:
3、在主数据文件中添加NS记录,NS的A记录IP指向从服务器ip:和上面一样,每次修改 序列号加1 修改权限
4、测试主服务数据文件
5、测试从服务器
named-checkconf
6、重载配置
先重载主服务器,在重载从服务器,如下图传送成功
7、测试
dig -x 172.16.143.10
注意:确保区域数据文件中为每个从服务配置NS记录,并将在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,其此A后面的地址为真正的从服务器的IP地址
手动测试从主DNS到从DNS区域传送是否成功:
dig -t axfr lgt.com @172.16.143.9
dig -t axfr 143.16.172.in-addr.arpa @172.16.143.9
注意:时间要同步:
ntpdate 时间服务器ip
例如:ntpdate 172.16.0.1
五、子域授权
子域:子域是一个独立的区域,要想使用必须经过上级授权,比如顶级域,要想使用,必须经过根域的授权。
1、正向解析区域授权子域的配置:
a) 先在主域配置授权NS记录
在主域的数据文件中添加一条子域的NS记录和对应子域的ip地址
完后要在序列号后面加1 如下图:
b)子域上先安装bind程序
c)编辑/etc/named.conf配置文件
d)开启服务
2、定义一个区域
3、在/var/named/创建数据文件:opt.lgt.com.zone
4、检查文件:named-checkzone opt.lgt.com /var/named/opt.lgt.com.zone
named-checkconf
5、重读配置文件,修改权限
rndc reload
chgrp namd /var/named/opt.lgt.com.zone
chmod o= /var/named/opt.lgt.com.zone
6、定义转发域:
a) 区域转发:仅转发对某种特定区域的解析请求
first:首先转发;转发器不响应时,自行去迭代查询
only:只转发
b) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器
检查配置文件,重读配置文件
c) 重读配置文件,测试
named-checkconf
rndc reload
dig-tAwww.lgt.com
测试之前必须做到:防火墙关闭,服务器时间一样,把/etc/named.conf里//allow-query { localhost; };前用两//注释掉或删除
测试:
在子域测试是否能解析主域:
dig-tAwww.lgt.com
在主域中测试是否能解析子域:
dig-tAwww.opt.lgt.com
注意:被转发的服务器必须能为当前服务器做递归
六、bind中的安全相关的配置;
acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现同一调用;
示例:
aclmynet {
172.16.0.0/16
127.0.0.0/8 };
bind 有四个内置的acl
none:没有一个主机
any:所有主机
local:本机
localnet:本机所在的ip所属的网络
访问控制指令:
allow-query {} :允许查询的主机;白名单
allow-transfer{} : 运行向哪些主机做区域传送;默认为向所有主机;应该配置为仅允许从服务器
allow-recursion {} :允许那些主机向当前DNS服务器发起递归查询请求
allow-update {} :DDNS,允许动态更新区域数据库文件中的内容
例子:在主DNS服务器设置acl禁止除从服务器之外的主机传送本机数据
1)先在/etc/named.conf里的写上:
acl zhuji {
172.16.143.10; };
2)在副配置区域中调用它,可以写为全局配置;对全局生效
allow-transfer { zhuji; };
重载配置文件
3)测试:
dig-taxfr lgt.com
原文:http://kening.blog.51cto.com/10985929/1733582