域名解析服务(DNS)之bind

DNS简介

DNSDomain Name System的简称,DNS的主要作用就是讲主机名解析成ip地址的过程,因为在计算机网络当中是通过ip地址来进行主机间通信的,ipv4的地址是32位,人类记忆起来十分困难,更何况ipv6128位,所以我们需要一个简单容易记忆的字符串来替换ip地址,当我们访问www.baidu.com它能知道访问的是某个ip地址的服务器,这时需要一种机制能够完成从域名(FQDN)到主机识别的ip地址之间的转换,DNS没出现的时候,这个解析过程是通过hosts文件来记录域名和ip的对应关系,但是host文件有缺陷,只能作用于本机,不能更新同步所有的主机使用,管理起来相当困难。

DNS是一个分布式,分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就能通过主机名的形式访问互联网。DNS利用类似到处抓那个的目录结构将主机名的管理分配在不同层级的DNS服务器中,经过分层管理,每一集DNS服务器负责部分域名信息,这也就减轻了DNS服务器的负载,同时也方便记录的更新同步。

 

DNS服务

dns工作的tcpudp53端口,tcp53端口主要用来传输数据,而udp53端口用来查询

linux中,dns服务器的软件一般使用的是BIND:Bekerley Internat Name Domain,目前这个软件是由ISC组织来维护,其背后的查询过程是根据数据来查询的

本地名称即系配置文件:hosts

/etc/hosts   Linux系统

C:\Windows\System32\drivers\etc\hosts  windows系统

两者的书写格式相同,格式如下:

1.1.1.1  www.abc.com

1.1.1.1     www.def.com

 

 

FQDNFull Qualified Domain Name的简称,叫完整主机名,完整主机名是由主机名和域名构成。那什么是主机名和域名呢,域名是你到域名注册机构注册的二级域,比如baidu.com,我们平时访问的www.baidu.com当中的www就是主机名,主机名和域名之间用实心的点号表示。

在学习文件系统是知道目录结构的最顶层是根目录,根是一切文件的七点,DNS同根文件系统一样都是倒树状结构,在最顶层是由一个叫做根服务器,主要负责顶级域名的管理,所谓顶级域名就是像.com.cn .net .gov .org .edu等等,在下面的顶级域名服务器则负责其所对应的二级域名。如baidu.com,在接下来二级域名服务器负责对应的主机名称解析或者其三级域名解析,如nes.baidu.com,依次类推

其中根节点是由分布在世界各地的13台服务器组成,其中10台位于美国地区,另外三台设置与英国、瑞典和日本,在13太根服务器当中有1台为主根服务器放置在美国,其余12台均为辅助根服务器,所有的根服务器均有美国政府授权的互联网域名与号码分配机构ICANN组织统一管理,负责全球互联网域名根服务器、域名体系和ip地址的管理

 

DNS域名

根域

一级域名:Top Level Domain 简称tld

         com   edu  mil  gov  net  org  int

可以分为三类:组织域、国家域(.cn  .ca  .hk  .tw),反向域

二级域名

三级域名

最多127级域名

ICANN(The Internet Corporation for Assign Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名以及国家和地区顶级域名系统的管理、以及根服务器系统的管理

1.jpg

DNS解析

DNS查询类型

递归查询:只发出一次请求

迭代查询:发出多次请求

 

DNS名称解析方式

名称—ip:正向解析

ip—–名称:反向解析

注意:二者的名称空间,不是同一个空间,即分为同一颗树,一次,也不是同一个解析库

 

 

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

—>hosts文件—–>DNS local cache  —->DNS serverrescursion

自己负责解析的域:直接查询数据库并返回答案

不是自己负责解析的域:server cache—->iteration(迭代)

解析答案

可定答案

否定答案:不存在查询的键,因此,不存在与其查询键对应的值

权威答案:有直接负责的DNS服务器返回的答案

非权威答案

 

DNS服务器的类型

DNS服务器:维护所负责解析的域树数据库的那台服务器,读写操作均可进行

DNS服务器:从主DNS服务器哪里或其他的从DNS服务器哪里复制一份,但只能进行读操作

缓存DNS服务器(转发器)

 

复制操作的实方方式

序列号:数据库的版本号,主服务器内容发生变化时,其版本号迪则呢过

刷新时间间隔:refresh,从服务器没多久到主服务器检查顺序号更新情况

重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔,此时间比刷新时间要短

过期时长:exprire,从服务器始终联系不上主服务器时,多久之后放弃从主服务器同步数据,停止提供服务否定答案的缓存时长

主服务器通知从服务器随时更新数据

 

区域传送

全量传送:传送整个数据库 axfr

增量传送:仅传送变化的数据 ixfr

 

区域(zone)和域(domain

baidu.com

FQDN—>ip 正向解析库

ip—>FQDN 反向解析库

 

区域数据库文件

资源记录Resource Record简称rr

记录类型A AAAA PTR SOA NS  CNAME MX

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

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

AAddress 地址记录,FQDN—>iPv4

AAAA:地址记录,FQDN—>ipv6

CNAME:Canonical Name 别名记录

PTRPointer ip—>FQDN

MXMail Exchange邮件交换器,优先级0-99,数字越小,优先级越高

 

资源记录的格式

语法           name      [TTL]              IN          RR_TYPE                     value

SOA

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

value:有多部分组成

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

当前区域管理员的邮箱地址,但地址中不能使用“@”符号,使用点号代替

主从服务协调属性的定义以及否定答案的ttl

例如:

magedu.com.  300    IN     SOA    ns1.magedu.com.   admin.magedu.com.  (

                                                                                    2016092501  ;序列号位数不能超过10serial 

                                                                                    2H                       ;刷新时间  refresh

                                                                                    10M                   ;重试时间  retry

                                                                                    1W                      ;过期时间  expire

                                                                                    7D)                     ;否定答案的TTL negative answer

 

NS

name:当前区域的区域名称

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

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

例如:

magedu.com.    300       IN              NS   ns1.magedu.com.

magedu.com.   300       IN              NS     ns2.magedu.com.

 

MX

name:当前区域的区域名称

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

例如:

magedu.com.           IN              MX 10  mx1.magedu.com.

magedu.com.           IN              MX 20  mx2.magedu.com.

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

 

A

name:某FQDN例如:www.magedu.com

value:某iPv4地址

例如:

www.magedu.com.          IN              A                1.1.1.1

www.magedu.com.          IN              A                2.2.2.2

bbs.magedu.com.             IN              A                1.1.1.1

 

注意:

*.magedu.com.                 IN              A                3.3.3.3

magedu.com.                     IN              A                4.4.4.4

避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址

 

AAAA

nameFQDN

valueipv6

A记录差不过,只不过FQDN对应的地址是128位的ipv6地址

 

PTR

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

例如:

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

简写为

4.in-addr.arpa.            IN              PTR           www.magedu.com.

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

 

CNAME

nameFQDN格式的别名

valueFQDN格式的正式名称

例如:

web.magedu.com.               IN         CNAME     www.magedu.com

 

注意:

1)         TTL值可以从全局继承

2)         @表示当前区域的名称

3)         相邻的两条记录其name相同时,后一条的name可省略

4)         MX,NS等类型的记录的valueFQDN,此FQDN应该有一个A记录(正向区域)

 

域名注册:

代理商:万网,新网,godaddy

注册完成之后,想用自己专用服务来解析,在后台进行管理,把NS记录执行服务器的名称,和A记录指向的服务器地址

 

BIND的安装配置

BIND: Bekerley Internat Name Domain ISC组织维护

dns协议

binddns协议的一种实现

namedbind程序的运行的进程名

 

 

程序包

bind-utils:bindbind-utils包中的程序功用用到的库文件

bind:提供的dns server程序以及常用的测试程序

bind-chroot:选装,让named运行与jail(沙箱)模式下(保证bind的安全)

 

 

bind

主配置文件:/etc/named.conf

或包含进来其他文件

/etc/named.iscdlv.key

/etc/named.rfc1912.zones

/etc/named.root.key

服务脚本文件

/etc/rc.d/init.d/named   unbound.service

 

解析库文件

/var/named目录下,一般名字为zone_name.zone

 

注意:

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

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

3)         还应该有两个区域解析库文件 localhost127.0.0.1

正反向解析

正向:named.localhost

反向:named.loopback

 

rndcremote  name  domain  controller

默认与bnd安装在同一主机,且只能过127.0.0.1链接named进程

提供辅助性的㢆功能  953/tcp

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

CentOS6  service named start

CentOS7  systemctl strat named.service

 

配置文件

主配置文件

全局配置段:options { }

日志配置段:logging {}

区域配置段:zone{本机能够为那些zone进行解析,就要定义那些zone

注意:任何服务程序如果期望其能够通过网络被其他主机访问,至少应该监听在一个能与外部主机通信的ip地址上,每个配置语句必须以分号结尾

 

缓存名称服务器的配置

监听能与外部通信的地址

listen-on port 53 

lsten-on port 53 { 10.1.253.65}

学习时建议关闭dnssec

dnssec-enable no;

dnssec-validation no;

dnssec-lookaslde no ;

关闭仅允许本地查询

注释allow-query { localhost}

 

检查配置文件语法错误

named-checkconf  [ /etc/named.conf]

解析库文件语法检查

named-checkzone “magedu.com”  /var/named/magedu.com.zone”

测试工具

dig  host   nslookup

dig命令

dig [-t RR_TYPE] [@server]  [query options]

用于测试dns系统,因此不会查询hosts文件

查询选项

+[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,已指定的ipdns服务器进行查询

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

name:要查询的名称

 

rndc命令:named服务控制命令

rndc status  查看状态

rndc flush 清空dns服务器的所有缓存记录

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

rndc zone  重载区域解析库文件

rndc trace  递增debug一个级别

rndc reconfig  重载主配置文件

rndc retransfer zone 手动启动区域传送过程,而不管序列号是否增加

rndc querylog 开启或关闭查询日志文件/var/log/messages

 

 

 

配置解析一个正向区域

1)         定义区域

2)         建立区域数据文件

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

 

xiao.com为例

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

zone “xiao.com”  IN  {

type  master ;

file  “zone_name.zone”;

};

注意:区域即为域名

100.jpg

 

建立区域数据文件(主要记录为AAAAA

/var/named目录下创建区域数据文件

文件为/var/named/xiao.com.zone

$TTL 300

@              IN              SOA  dns.xiao.com.                 admin.xiao.com. (

                                     2016092501

                                     3H

                                     10M

                                     3D

                                     7D)

                   IN              SOA                    ns1.xiao.com.

                   IN              MX 10                mx1.xiao.com.

ns1            IN              A                         172.18.16.112

mx1           IN              A                         172.18.16.113

www         IN              A                         17218.16.115

web          IN              CNAME             www

bbs            IN              A                         172.18.16.1

bbs            IN              A                         172.18.16.2

101.jpg

 

修改此文件的属主为named并将权限改为640

chown  named   xiao.com.zone

chmod 640  xiao.com.zone

 

检查语法错误

named-checkconf

named-checkzone  “xiao.com”   /var/named/xiao.com.zone

 

让服务器重新加载配置文件

service  named  restart

 

 

 

配置一个反向区域

定义区域

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

zone “16.18.172.in-addr.arpa  IN  {

                  type master ;

                  file “172.18.16.zone” ;

};

注意反向区域的名字反写的网段地址.in-addr.ara

103.jpg

定于区域解析库文件(主要记录为PTR

示例:区域名称为172.18.16.zone

@              IN              SOA                    dns.xiao.com.                    admin.xiao.com. (

                                                                 2016092501

                                                                 1H

                                                                 10M                  

                                                                 3D

                                                                 7D)

                   IN              NS                       ns1.xiao.com.

112            IN              PTR                     ns1.xiao.com.

113            IN              PTR                     mx1.xiao.com.

115            IN              PTR                     www.xiao.com.

1                IN              PTR                     bbs.xiao.com.

2                IN              PTR                     bbs.xiao.com.

104.jpg

 

修改此文件的属主为named并将权限改为640

chown  named   172.18.16.zone

chmod 640   172.18.16.zone

检查语法错误

named-checkconf

named-checkzone  “16.18.in-addr.arpa”   /var/named/ 172.18.16.zone

 

让服务器重新加载配置文件

service  named  restart

 

测试:使用其他主机来解析

正向解析

105.jpg

反向解析

106.jpg

 

主从服务器

注意:从服务器区域级别的概念

配置一个从区域

在从服务器上

定义区域

zone “xiao.com”  IN  {

                  type slave ;

                  file “slaves/xiao.com.zone” ;

};

 

从服务器配置

107.jpg

主服务器配置,只需要在区域数据文件中添加从服务器的NS记录和A记录即可

108.jpg

配置文件语法检查

named-checkconf

重载配置

rndc reload

 

测试:只需将主服务的区域数据文件序列号变化,重载服务即可,查看日志是否有如下内容

109.jpg

从服务器,不需要重载,查看日志,看是否传输成功

110.jpg

注意:

1)             应该为一台独立的名称服务器

2)             主服务器的区域解析库文件中必须有一条NS记录执行从服务器

3)             从服务器只需要定义区域,而无需提供解析库文件;解析库文件应该放置于/var/named/slaves目录中

4)             主服务器允许从服务器区域传送

5)             主从服务器的时间应该同步,可通过ntp进行

6)             bind程序的八本应该保持一致,否则,应该从高,主低

 

DNS服务是由named用户运行的,/var/named目录named用户没有写权限,数据时不会直接同步的,而/var/named/slaves目录的属主和属组是named用户,所以named用户可以对该目录可写,所有区域传送文件存在在此

 

在主服务器上配置

确保区域数据文件中每个从服务器配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录且此A后面的地址为真正的从服务器的ip地址,如果没有添加NS记录和A记录,主服务器配置了刷新时间,从服务器以哪个配置的时间到主服务器检查序列号的变化情况,如果发生变化,就会同步数据

 

 

子域授权

正向解析区域授权子域的方法(主服务器)

在主区域数据文件中添加如下内容

ops.xiao.com.           IN              NS                       ns1.ops.xiao.com.

ops.xiao.com.           IN              NS                       ns2.ops.xiao.com.

ns1.ops.xiao.com.   IN              A                         10.1.252.100

ns2.ops.xiao.com.   IN              A                         10.1.252.198

 

从服务器添加一个区域和区域数据文件即可

zone  “ops.xiao.com” IN  {

                  type master ;

                  file “ops.xiao.com.zone” ;

};

111.jpg

在区域数据库目录下创建区域数据文件ops.xiao.com.zone

$TTL 300

@              IN              SOA  dns.ops.xiao.com.                   admin.ops.xiao.com. (

                                     2016092501

                                     3H

                                     10M

                                     3D

                                     7D)

                   IN              SOA                    ns1.ops.xiao.com.

ns1.ops.xiao.com.   IN              A                10.1.252.100

www                           IN              A                10.1.252.101

112.jpg

重载配置

rndc reload

这时候就可以在主服务器上测试子域是否能解析

dig -t  A   www.ops.xiao.com  @172.18.16.112

113.jpg

 

转服服务器

注意:被转发的服务器允许你为当前服务器做递归

区域转发:仅转发对某特定区域的解析请求

zone “zone_name” IN  {

         type forward ;

         forwar {first|only} ;

         forwarders { server_ip;  } ;  将收到的请求转发给那台dns服务器

first:首先转发,转发器不响应时,自行去迭代查询(查找根)

only:只转发,不响应时,不做任何回应

示例:

另外一个DNS服务器其对xiao.com域本地解析不了,需要将请求转发到该域的dns服务器上,定义一个zone类型为forward

zone "xiao.com" IN {

                   type forward;

                   forward only;

                   forwarders { 10.1.253.65; 10.1.252.198; };

}

114.jpg

测试:在本机上解析www.xiao.com使用本机来解析

全局转发:针对凡本地没有通过zone定义的区域查询请求通通转给某转发器

options {

forward  only|first

forwarders  { server ip }

}

115.jpg

注意:最好关闭dnssec功能

dnssec-enable no;

dnssec-validation no;

 

bind中的安全相关的配置

acl访问控制列表,把一个或多个ip地址归并一个命令的集合,随后通过此名称即可对此集合内的所有主机实现统一调用

acl  acl_name {

                  ip;

                  net/prelen;

};

示例:

acl  mynet {

10.1.0.0/16

127.0.0.0/8

}

bind中有四个内置的acl

none:没有一个主机

any:任意主机

local:本机

localnet:本机所在的ip所属的网络

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

 

访问控制指定

allow-query  {  };允许查询的主机白名单

allow-transfer {  };允许向那些主机做区域传送,默认为向所有主机传送,应该配置仅允许从服务器能够传送

allow-recursion { }; 允许那些主机向当前dns服务器发起递归查询请求

allow-update { }DDNS,允许动态更新区域数据库中的文件

 

 

bind view 视图

view view_name  {

                  match-clients { }

                  zone

                  zone

        

}

示例:

view internal {

                  match-clients { 10.1.252.100; };

                  zone “xiao.com” IN {

type master

file ‘”xiao.com.zone”;

                  }

}

view external {

                  match-clients { any; };

                  zone “xiao.com” IN {

type master

file  ”xiao.com.zone”;

                  }

}

注意:

1)             一个bind服务器可以定义多个view,每个view定义一个或多个zone

2)             每个view用来匹配一组客户端

3)             多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

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

5)             仅在允许递归请求的客户端所在view中定义根区域

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

 

DNS排错

 

#dig A example.com

 <<>> DiG9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<-opcode: QUERY, status: NOERROR, id: 30523

SERVFAIL:Thenameserverencountered a problem while processing the query.

可使用dig +trace排错,可能是网络和防火墙导致

NXDOMAINThe queried name does not exist in the zone.

可能是CNAME对应的A记录不存在导致

REFUSEDThe nameserverrefused the client's DNS request due to policy restrictions.

可能是DNS策略导致

 

NOERROR不代表没有问题,也可以是过时的记录

查看是否为权威记录,flags:aa标记判断

被删除的记录仍能返回结果,可能是因为*记录存在

如:*.example.comINA172.25.254.254

注意“.”的使用

避免CNAME指向CNAME记录,可能产生回环

test.example.com. IN CNAME lab.example.com.

lab.example.com. IN CNAME test.example.com.

正确配置PTR记录,许多服务依赖PTR,如sshd,MTA

正确配置轮询round-robin记录

 

压力测试

     vim  test.txt

     xiao.com   NS

     www.xiao.com   A

     web.xiao.com    A

     bbs.xiao.com     A

     ops.xiao.com     A

 

使用queryperf工具进行压力测试

    queryperf –d  test.txt –s 127.0.0.1

打开日志功能

    rndc querylog

    rndc status

    queryperf –d test.txt  -s 127.0.0.1

    wc -l /var/log/messages  查看里面的压力测试查询的记录 

 

 

原创文章,作者:fszxxxks,如若转载,请注明出处:http://www.178linux.com/49587