DNS服务器之bind

bind早期是有伯克利维护,后来交给了ISC进行维护,官方站点www.isc.org

在linux主机上提供可供选择的域名解析机制,在/etc/nssswitch.conf文件提供了域名解析的平台,里面可以定义多重解析域名的方法以及本主机采用优先采用哪种域名解析方法。

hosts:      files dns

其中files表示优先使用本地hosts文件来解析域名

dns表示其次使用dns服务来解析域名,这两者的顺序即表示他们使用时的优先级

而在/usr/lib64目录下有以下三口库文件可以实现域名解析:

libnss_files.so.2

libnss_dns.so.2

libnss_nis.so.2

接下来就是主要讲解DNS的简单介绍和一些基础配置。

DNS系统在全球有13个根节点服务器,分布在不同的地区,美国居多。

FQDN:叫做完全主机名,例如www.lw.com.

DNS系统的分布式架构:

根(.)

顶级域名(如.com表示商业性质的域名;.org表示一些国际组织的域名;如.net;.edu;等等,这些按照不通电功能或地区来划分的),顶级域名也可以称为一级域名。

二级域名:是一般公司或(个人用的。(一般对公司来说是较重要的,设计到业务的运转)

DNS查询方式:

递归查询:只需要自己发送一次查询请求,求他的解析请求都交给自己直接上层来进行查询。

迭代查询:每一次都需要自己来进行查询,得到最终结果

一般情况下一个主机的查询过程实际上是先递归、后迭代,而在DNS服务器之间的查询被称为递归查询。

DNS服务器的功能:一般只负责自己管辖域内的地址解析,如果要替不属于自己域内的主机进行解析查找其他域内的主机,是需要开启相应的功能的。

注意:正反向解析是两个不同的名称空间,可以或不使用同一个服务器来提供正反向解析

缓存dns服务器 :不负责解析域,只用来查找本域内的主机

转发dns服务器 :用来为指定的区域内的请求进行转发请求的服务器,必须开始允许递归的功能。

主dns服务器:维护所负责的域内的主机地址解析的服务器,解析库有管理员维护

从dns服务器:从主dns服务器或其他的从dns服务器那里“复制”一份解析库(被称为区域传送)

serial序列号:解析库的版本号。前提:任何时候主服务器解析库发生变化,其序列号应该递增,这个序列号是管理员手动修改的

refresh刷新时间:从服务器向主服务器请求同步解析库的时间间隔

retry重试时间:从服务器向主服务器请求同步但失败后再次发出同步请求的时间间隔

expire过期时长:从服务器始终联系不到主服务器时,多久后放弃从服务器角色,停止提供服务的时长

否定应答时间TTL:表示本服务器明确所查找的主机自己不负责的时候未来多久时间内不要在想自己发送请求解析的请求。

“通知”机制:指的是主服务器在解析库发送变化时主动向从服务器发出通知,从而让从服务器来进行解析库的同步

区域传送:

全量传送:传送整个解析库

增量传送:只传送解析库中变化的内容

DNS:

domain:

正向:FQDN-->IP

反向: IP-->FQDN

FQDN:full qualified domain name 完全主机域名

例如www.lipengwei.com.(。是不能省略的)

一次完整的查询请求经过的流程:

client--》hosts文件--》DNS service

local cache --》DNS server(recursion递归)--》server cache --》iteration(迭代)--》

解析答案:

肯定答案:明确知道自己能够找主机的对应的ip地址。

否定答案:请求的条目不存在等原因导致无法返回结果的答案。

权威答案:只要是自己的直接上级返回的答案都是权威答案。

非权威答案:通过其他(非直接上级)返回的答案都是非权威答案。

主从服务器同步分为:全部同步数据、增量数据同步数据

资源记录:resource record(rr)

资源记录类型:resource record type

区域解析库:由众多RR组成

SOA :start of authority,起始授权记录,一个区域只能有一个SOA记录,SOA还必须是第一条记录

NS:name server,名称服务器,专用于表明当前区域的dns服务器

CNAME:别名记录

MX:mail exchanger.邮件交换器

A:   FQDN-->IPv4

AAAA: FQDN-->IPv6

PTR:pointer,指针,进行反向解析,ip--》FQDN

资源记录定义的格式:

通用语法格式:name 【TTL】 IN  rr_type  value

注意:

(1)TTL可以从全局继承

(2)@可用于引用当前区域的名字

(3)同一个名字可以通过多条记录定义多个不同的值,此时会以轮询方式解析相应(这就是简单的实现DNS轮询方式实现负载均衡)

(4)同一个值也可能有多个不同的定义名字,通过多个不同的名字定义同一个值(仅表示可以通过不同的名找到同一个主机)

SOA:

name:当前区域的名字。如“lipengwei.com”

value:有多部分组成

(1)当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字

(2)当前区域管理员的邮箱地址:但地址中不能使用“ @”,要使用。代替

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

例如:

lipengwei.com  ttl IN SOA ns.lipengwei.com。  adminmail。lipengwei.com (

2015091401    //序列号,最多10位数

刷新时间

重试时间

过期时间

否定ttl值

);

注意:这value的值可以是当前区域名( @)或者使用在上级DNS服务器上填写的主DNS服务器名

NS:

name :当前区域的名字

value:当前区域内的某个dns服务器的名字,如ns.lipengwei.com.

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

例如:

lipengwei.com.  IN NS ns1.lipengwei.com.

lipengwei.com.  IN NS ns2.lipengwei.com。

注意

1、相邻的两个资源记录name相同时,后续的可省略

2、对NS记录而言,任何一个NS记录后面的服务器名字,都应该有与之对应的A记录

MX:

name:当前区域的名字

value:当前区域内的某个邮件服务器的主机名

注意:一个区域内可以有多高MX记录,但每个记录的value之间都应该有0-99的数字来表示其优先级,数字越小,优先级越高

例如:

lipengwei.com.  IN  MX 19  mx1.lipengwei.com.

IN  MX 29 mx2.lipengwei.com.

注意:对MX记录而言,任何一个mx记录后面的服务器名字,都应该有一条与之对应的A记录

A:FQDN-->IP

name:某主机的FQDN,如www.lipengwei.com。

value:主机名对应的ip地址

例如:

www.lipengwei.com. IN A 1.1.1.1

www.lipengwei.com. IN A  1.1.1.2

mx1lipengwei.com.  IN A 1.1.1.3

mx2lipengwei.com.  IN A 1.1.1.3

注意

*.lipengwei.com.  IN  A 1.1.1.4

lipengwei.com.   IN A 1.1.1.4(在用户只输入域名时也可以解析至特定的主机)

用来避免用户写错名称是给错误答案,可通过泛域名解析进行解析到某个特定主机

AAAA:

name:FQDN

value:IPv6

PTR:

name:ip地址,有特定格式,把ip地址反过来写,有特定后缀in-addr.rapa.

如:

ip地址是1.2.3.4,写法是4.3.2.1.in-addr.arpa。

4 IN PTR  www.lipengwei.com.

注意:网络地址以及后缀可省略,主机地址依然要反着写

CNAME

name :别名的FQDN

value:正式FQDN

例如:

web.lipengwei.com. IN CNAME www.lipengwei.com.

子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库中进行授权。所谓的子域授权其实是

为了分担上级域的服务器的解析压力而进行的分割数据,使其一部分解析功能交给其子域来完成解析而采取的一种

分布式实现的方法。例如对正向区域的子域授权,只需要在其解析库中添加子域信息的NS记录和A记录即可。(反向区域的子域授权比较困难,很少这么做)

注意:只要父域在上级DNS服务器注册过,但是其子域是不需要再注册的。

例如:lpw.com.在。com。的名称服务器上,解析库中添加资源记录

$TTL 1d

@     IN SOA  @ admin.lpw.com (

2015091502

1H

5M

3D

3D )

IN  NS  ns1.lpw.com.

ns1.lpw.com.  IN   A    172.16.1.112

www   IN   A    172.16.1.112

ftp   IN   CNAME  www

aps.lpw.com. IN NS  nt1.aps.lpw.com.

aps.lpw.com. IN NS  nt2.aps.lpw.com.

nt1.aps.lpw.com.  IN  A  172.16.1.110

nt2.aps.lpw.com.  IN  A  172.16.1.119

*     IN   A    172.16.1.112

这些记录被称为glue record:也称做粘合记录

下面是bind程序包的组成以及配置实例: 

安装包:

bind包

bind-util包

bind-chroot包

而程序名字是named

bind的服务脚本:/etc/rc.d/init.d/named

主配置文件:/etc/named.conf,/etc/named/rfc1912.zones,/etc/rndc.key

解析库文件:/var/named/ZONE.ZONE

注意:

1、一台物理物理服务器可以同时为多个区域提供域名解析

2、必须要有根区域文件,/var/named/named.ca

3、应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址解析的解析库:/var/named/named.localhost,/var/named/named.loopback

rndc:romote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来与named进程进行通信,tcp/953

主配置文件

全局配置:options{};

日志子系统配置:logging{};

区域定义:本机能够为哪些zone进行解析,就要定义哪些zone:

zone “zone_name” IN {}

注意:任何服务程序如果期望能够通过网络被其他主机访问,则需要至少监听在一个能与外部通信的ip地址上

配置缓存名称服务器的配置

1.只需要监听本地能与外部通信的外部地址即可

2、allow-query 改为 “any”

dnssec:dns secure :现代互联网为了避免dns被攻击和污染,使用了dns secure机制,需要每次对解析请求进行验证

在不是严格要求使用的时候可以禁用该项及其key相关配置

建议:禁用dnssec

recursion 表示是否允许递归

主DNS名称服务器配置:(在头部定义的$ORIGIN VALUE 可以用来代替下面配置中省略的部分)

1步、在主配置文件中定义区域

zone "zone_name" IN {

type {master|slave|hint|forword};

file "zone_name.zone";

};

2步、定义区域解析库文件(每一个区域对应一个其区域解析库文件)

@  IN SOA   ns1.lpw.com.  admin.lpw.com (

2015091501

1h

5m

7d

1d )

IN  NS   ns1.lpw.com.

IN  NS    ns2.lpw.com.

IN  MX    mx1.lpw.com.

IN  MX    mx2.lpw.com.

ns1.lpw.com.  IN  A 172.16.1.108

ns2 IN  A    172.16.1.108

mx1 IN  A     172.16.1.11

mx2  IN  A     172.16.1.12

ns1.lpw.com.   IN  A   172.16.1.108

3步、修改区域解析库文件的权限和属组(为了安全起见)

反向区域配置

区域名称:网络地址反写。in-addr.arpa

172.16.100. ---》 100.16.172.in-addr.arpa

第一步:定义区域:

zone "zone_name" IN {

type={hint|master|slave}

}

第二步:定义区域库文件

注意:不需要MX和A以及AAAA记录,以PTR记录为主

$TTL 1D

$ORIGIN 1.16.172

@     IN   SOA ns1.lpw.com. admin.lpw.com. (

2015091601

3h

5m

1d

1d )

IN   NS  ns1.lpw.com.

IN   NS  ns2.lpw.com.

112   IN   PTR ns1.lpw.com.

112   IN   PTR ns2.lpw.com.

112   IN   PTR www.lpw.com.

主从复制配置

问题:启动新机器的bind时出现

[[email protected] etc]# service named start

Generating /etc/rndc.key:

网上解决办法:

rndc-confgen -r /dev/urandom -a,重启named服务即可

注释:rndc-confgen是rndc的key的管理工具

第一步:新建主机,安装bind,配置为缓存dns服务器

第二步:主服务器的区域解析库文件中必须有一条NS记录是指向从服务器

修改主master区域项 allow-transfer { 172.16.1.110; };

第三步:从服务器只需要定义区域,而无需提供解析库文件,解析库文件应该放置在/var/named/slaves/下面

第四步:主服务得允许从服务器做区域传送

第五步:主从服务器时间应该同步,可通过ntp进行

第六步:bind程序的版本应该保持一致,否则,应该从高、主低

注意:每次手动修改主DNS服务器区域文件时必须手动更新修改其序列号

rndc

rndc --> rndc(953/tcp)

使用方法: rndc  command

command:

reload:重载主配置文件和区域解析库文件

reload zone :重载区域解析库文件

retransfer zone :手动启动区域传送过程,而不管序列号

notify zone:重新对区域传送发通知

reconfig :重载主配置文件

querylog :开启或关闭查询日志功能

trace :递增debug级别

trace level :指定使用的级别

 注意:对于正常工作环境中不应该开启日志调试功能,区域文件都是放在内存中的,因此如果开启querylog功能,就会对每一的查询都立即记录日志到磁盘,增加I/O开销,增大主机的负荷。所以非调试过程(在生产过程中)不要开启。

正向解析区域子域方法:

在正向解析库文件中添加子域的信息(NS和A记录)

注意:在使用主域查询子域时dig命令要加+norecurse

定义转发服务器

注意:被请求转发的服务器需要能够为请求者做递归,否则转发请求不予处理

(1)全部转发:凡是对非本机所负责解析的区域的请求,统统转发给指定的服务器

在options配置项添加两项:

forward first|only;   // first 表示先将请求委托给一个dns服务器来解析,如果他解析不到,则自己再向根请求解析

//only 表示所有的自己解析不了的请求都委托给一个dns服务器来解析,如果他解析不到,就认为这个请求是解析不到的。

forwarders { ip; };

(2)区域转发:仅转发对特定区域的请求至某服务器

zone "zone_name" IN {

type forward;

forward  { first|only;};

forwarders { ip;};

};

问题:在做转发的dns服务器上请求被转发服务器管辖的主机时报错,查看/var/log/messages出现

verify failed due to bad signature (keyid=1518): RRSIG validity period has not begun

解决办法:原因是签证无效,最终原因是做实验的两个虚拟机的时间不一致,同步下时间就行了。

另外重要的一点:关闭dnssec功能:dnssec 是dns secure安全的dns服务器,指的是dns在每一次请求解析时都会要求验证对方的数字签名,所以在实验环境中可能对导致数字签名无效的错误提示从而不能够解析成功。

dnssec-enable no;

dnssec-validation no;

DNS中的安全相关的配置

定义acl访问控制列表

acl acl_name (

ip1;

ip2;

net/length;

);

bind有四个内置的acl:

none:没有一个主机

any:任意主机

local:本机

localnet:本机的ip同掩码运算后得到的网络地址

注意:acl只能先定义,后使用,因此,其一般定义在配置文件options前面

访问控制的指令

allow-query{};允许哪些主机来本机进行查询的主机名单:白名单

allow-transfer{}:允许进行区域传送的主机

allow-recursion{} 允许递归的主机

allow-update{};允许更新区域数据库中内容的主机,一般情况下应该不允许任何主机来主动更新服务器解析库文件内容

bind 的view功能

视图:一个bind服务器可定义多个view,每个view中可定义一个或多个zone,在多个view中可定义相同的zone,每一个view用来匹配一组请求的客户端,多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件,这是DNS可以实现CDN技术的主要原因。

view的设置

view view_name{

match-clients{};

zone "zone_name" IN {};

};

注意

(1)一旦启用了view,所有的zone都只能定义在view中

(2)仅有必要在匹配到允许递归请求的客户端所在的view中定义根区域

(3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表

(4)bind提供的view功能可以实现简单的CDN的功能。

CDN :content delivery network 内容分发网络,也叫做智能DNS系统

智能DNS供应商:

如:dnspod和dns。la

编译安装bind9

第一步:解压源码包

第二步:创建普通用户named和组named

第三步:./configure --prefix=/usr/local/bind9 --sysconfig=/etc/bind/ --disable-ipv6 --disable-chroot --enable-threads

第四步:将编译后的可执行程序添加到PATH环境变量中(在/etc/profile.d/下新建named.sh【PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH】)

第五步:设置库文件(编辑/etc/ld.so.conf.d/named.conf【/usr/local/bind9/lib】),然后重读此文件,ldconfig

第六步:导出头文件:ln -sv /usr/local/bind9/include /usr/include/named

第七步:添加man手册,在/etc/man.config中添加编译后的man手册

第八步:手动编辑namd.conf配置文件

监听tcp|udp的53号端口

udp的53号端口主要用来监听解析地址的

tcp的53号端口主要是用来主从服务器通信的监听端口

named程序以root用户启动,然后切换至named用户,

linux上为了防止系统用户运行进程被劫持而取得不应该有的权限,通常的做法就有两个:

1、以系统用户启动进程后,切换至普通用户来运行

2、chroot 来切换运行程序的根目录

测试命令:dig命令

dig -t type name [@server] [query options]

dig 仅用于测试dns系统,因此,不会查询hosts文件进行解析

查询选项:

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

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

测试反向解析:

dig -x ip server

模拟区域传送

dig -t axfr zone_name @server

例如:dig -t axfr lpw.com @172.16.1.108

注意:dig在查询时默认是递归查询,可以使用+norecurse

host命令:

host [-t type] name [servcer]

nslookup命令:

交互式查询

nslookup>

server ip :指明使用哪个dns server来进行查询

set q=rr_type:指明查询哪种类型的资源类型记录

name:要查询的名称

时间: 2024-10-10 07:04:57

DNS服务器之bind的相关文章

DNS服务器之二:从服务器的实现

DNS从服务的搭建 一.安装  [[email protected]~]# yum install bind 二.修改主配置文件  [[email protected]~]# cat /etc/named.conf 将以下三行注释掉 //               listen-on port 53 { 127.0.0.1; }; //               listen-on-v6 port 53 { ::1; }; //               allow-query     {

DNS服务器之简单配置(一)

名词解释: 域名: 域名是域名系统名字空间中,从当前节点到根节点的路径上所有节点标记的点分顺序连接. 域: 域是指域名系统名字空间中的一个子集,也就是树形结构名字空间中的一颗子树.这个子树根节点的域名就是该域的名字, 域的级别: 顶级域(TLD, Top Level Domain)是指域名系统名字空间中根节点下最顶层的域.顶级域也称一级域,顶级域的下级就是二级域,二级域的下级就是三级域,以此类推.每个域都是其上级域的子域.最早的顶级域名,也是现在说的国际域名,按照用途分为的7个大类: .com:

DNS服务器之主从复制和子域转发(二)

主从复制: DNS服务器类型: 主服务器:区域解析库手动创建 从服务器:区域解析库不能手动创建和修改,要从主服务器同步而来 从服务器从主服务器上拉取区域解析库用完全区域传送AXFR和不完全区域传送IXFR 完全区域传送是在从DNS服务器第一次从主服务器同步是用完全区域传送AXFR 1.配置主从DNS服务器需要时间同步 crontab: */3 * * * * /usr/sbin/ntpdate  172.16.0.1 &> /dev/null 每3分钟从时间服务器同步一次时间 2.从服务器B

CentOS下dns服务器之授权

dns授权 dns授权分为两步 1]父域dns对子域dns实现授权, 2]子域对父域 1.改变根提示,把父域dns视为根 2.转发器 dns服务器的搭建请看dns服务器搭建 一.修改父域实现对子域的授权 修改dns服务器配置文件注释最后一行 [[email protected] chroot]# vim etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory    

linux下DNS服务器之视图和轮询

案例4 视图  viwer 拓扑图: 1.查看帮助 [[email protected] ~]# vim /usr/share/doc/bind-9.8.2/sample/etc/named.conf [[email protected] ~]# cd /var/named/chroot/etc 2.[[email protected] etc]# vim named.conf 添加视图: 36 view    "lan-view" 37 { 38 zone "."

DNS服务器之子域授权

一.子域授权 在一个较大的生产环境中,一般还需要在公司内分多个部门,这些部门负责的域是整个公司所负责的域的子域,这时公司内除了需要主从DNS服务器彼此之间互相协调提供服务之外,还需要为每个子域授权并让各个子域分别管理各自部门的主机,以减轻公司所在域的系统管理员的负担,这就是子域授权. 假设公司内有两个部门,分别是dev和ops,对于itab.com这个域来说,需要分别为dev.itab.com和ops.itab.com这两个子域授权,而在这两个子域下还分别管理www.dev.itab.com和w

DNS服务和Bind配置

 一.DNS介绍    DNS是计算机域名系统(Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器.其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有域名.域名系统采用类似目录树的等级结构.域名服务器通常为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器.将域名映射为IP地址的过

DNS服务之bind安装配置与应用

BIND是实现DNS服务的一套软件(官方站点:isc.org),其包含了服务器端程序named(由bind程序包提供,监听套接字:53/tcp.53/udp),和客户端工具host.nslookup.dig(由bind-utils程序包提供).为保证服务器的安全性,bind还提供了一种"沙箱机制",bind-chroot是将原文件系统的根"/"替换成"/var/named/chroot"来使用. 目前主流的bind程序依旧是9.x系列.使用yum

DNS服务器之理论基础

一.什么是DNS DNS全称为Domain Name System,即域名系统,其作用就是将我们经常使用的"网址"解析为IP地址. 在互联网上通信需要借助于IP地址,但人类对于数字的记忆能力远不如文字,那么将IP地址转换成容易记忆的文字是个好办法,可是计算机只能识别0.1代码,这时就需要一种机制来解决IP地址与主机名的转换问题. 早期由于网络上的主机数量有限,主机名和IP的解析借助于hosts文件即可完成,Linux中此文件一般存放路径为/etc/hosts,在此文件中手动记录每个主机