DNS and BIND

 

DNS: Domain Name Service,协议(C/S, 53/udp, 53/tcp);应用层协议;

BINDBekerleyInternat Name Domain[实现DNS的一个软件]

 

TCP: 面向连接的协议;

UDP: User Datagram Protocol,无连接协议

 

本地名称解析配置文件:hosts

/etc/hosts

%WINDOWS%/system32/drivers/etc/hosts

1.1.1.1 www.lx.com

1.2.2.2 www.test.com

 

TopLevel Domain: 顶级域

com,edu, mil, gov, net, org, int

 

三类:组织域、国家域(.cn, .iq, .hk, .tw)、反向域

 

DNS查询类型:

递归查询

迭代查询

 

名称服务器:域内负责解析本域内的名称的主机;

根服务器:13组服务器

 

解析类型:

Name--> IP

IP--> Name

 

注意:正反向解析是两个不同的名称空间,是两棵不同的解析树;

 

DNS服务器的类型:

DNS服务器

辅助DNS服务器

缓存DNS服务器

转发器

 

DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理维护;

DNS服务器:从主DNS服务器或其它的从DNS服务器那里“复制”(区域传递)一份解析库;

序列号:解析库的版本号;前提:主服务器解析库内容发生变化,其序列递增;

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

重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔;

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

 

区域传送:

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

增量传送:传递解析库变化的那部分内容

 

DNS:

Domain:

正向:FQDN --> IP

反向: IP --> FQDN

 

各需要一个解析库来分别负责本地域名的正向和反向解析

正向区域

反向区域

 

FQDN:Full Qualified Domain Name 全称域名

www.lx.com.

 

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

Client --> hosts文件 --> DNS Service

Local Cache --> DNS Server(recursion) --> Server Cache --> iteration(迭代)-->

 

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

资源记录:Resource Record, RR

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

 

SOAStart OfAuthority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;

AinternetAddress,作用,FQDN --> IP

AAAA:FQDN --> IPv6

PTR: PoinTeRIP --> FQDN

NS: Name Server,专用于标明当前区域的DNS服务器

CNAMECanonicalName,别名记录

MX:Mail eXchanger,邮件交换器

 

资源记录定义的格式:

语法:name        [TTL]        IN        rr_type        value

 

注意:

(1) TTL可从全局继承;

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

(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;

(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已;

 

SOA:起始授权记录

name: 当前区域的名字,例如“magedu.com.”

value: 有多部分组成

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

(2) 录前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com

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

 

例如:

magedu.com.        86400        IN        SOA        ns.magedu.com.        nsadmin.magedu.com.        (

2015042201  ;序列号

2H          ;刷新时间

10M                        ;重试时间

1W                        ;过期时间

1D                        ;否定答案的TTL

)

 

NS:

name: 当前区域的名字

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

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

 

例如:

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

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

 

注意:

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

(2) NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;

 

MX:

name: 当前区域的名字

value: 当前区域的某邮件服务器(smtp服务器)的主机名;

一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;

 

例如:

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

IN                MX  20 mx2.magedu.com.

 

注意:

(1) MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;

 

A:

name: 某主机的FQDN,例如www.magedu.com.

value: 主机名对应主机的IP地址;

 

例如:

www.magedu.com.                IN         A        1.1.1.1

www.magedu.com.                IN         A          1.1.1.2

 

mx1.magedu.com.        IN           A   1.1.1.3

mx2.magedu.com.         IN          A   1.1.1.3

 

注意:

*.magedu.com.                IN         A          1.1.1.4

magedu.com.                        IN          A   1.1.1.4

 

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

 

AAAA:

name:FQDN

value:IPv6

 

PTR:

name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.

value:FQDN

 

例如:

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

简写成:

4         IN  PTR        www.magedu.com.

 

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

 

CNAME

name: 别名的FQDN

value: 正确名字的FQDN

 

例如:

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

 

 

 

 

 

 

域名注册:

代理商:万网, 新网;godaddy,西部数码

 

注册完成以后,想自己用专用服务来解析?

方法:管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址

 

BIND的安装配置:

 

实现dns服务,程序包名bind,程序名named

 

程序包:

bind                提供服务

bind-libs         提供库文件

bind-utils       提供测试

 

bind

服务脚本:/etc/rc.d/init.d/named [service namedstart|restart|stop|reload(重读配置文件)]

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

解析库文件:/var/named/ZONE_NAME.ZONE[默认为空,需要自己使用时创建]

在修改配置文件时,最好先备份一下原始配置文件;named-checkconf可以查看修改后的是否有语法错误

named-checkzone 'ZONE_NAME'  /var/named/ZONE_FILENAME

 检查DNS/var/named/ZONE_FILENAME的语法

注意:

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

(2)DNS服务器必须要有根区域文件;/var/named/named.ca[全球的13个根节点服务器和对应的根记录]

(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;

 

rndc: remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能;

rndc stauts可以查看当前主机的工作状态

迷人监听在tcp953端口

 

主配置文件:

全局配置/etc/named.confoptions {}

日志子系统配置:logging {}

区域定义/etc/named.rfc1912.zones:本机能够为哪些zone进行解析,就要定义哪些zone

zone"ZONE_NAME" IN {}

 

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

 

缓存名称服务器的配置

监听外部地址即可;

 

dnssec: 建议测试时关闭dnssec

wKiom1U-T1GAAcsmAAHUYmIqD18835.jpg

 

DNS名称服务器

(1) 在主配置文件中定义区域

zone"ZONE_NAME" IN {

type{master|slave|hint|forward};

file"ZONE_NAME.zone";

};

例:

vim/etc/named.rfc1912.zones   在最后加

zone"lx.com" IN {

typemaster;

file"lx.com.zone"

};

(2) 定义区域解析库文件

例:在配置文件中定义的工作目录下vimlx.com.zone文件

wKioL1U-UNaCPqB4AAG4pDFTXBA507.jpg

示例:

$TTL86400

$ORIGINmagedu.com.

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

2015042201

1H

5M

7D

1D)

    IN          NS             ns1

    IN          NS             ns2

    IN          MX10             mx1

    IN          MX20             mx2

ns1        IN        A        172.16.100.11

ns2        IN        A        172.16.100.12

mx1        IN        A        172.16.100.13

mx2        IN        A        172.16.100.14

www        IN        A        172.16.100.11

www        IN        A        172.16.100.12

ftp        IN        CNAME        www

*             IN            A             172.16.100.11

lx.com.  IN            CNAME  www

创建完之后应改属组为named,权限为640,named属组和以访问,其他人不可访问

wKiom1U-T5GjvGYzAAMUIyYFbkg000.jpg

启动service named start|reload|stop|restart

dig -t A www.lx.com @192.168.1.110[本机地址测试]

wKioL1U-USaQQ5wPAAK23UFh5lg640.jpg

测试命令:dig的使用

 

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

wKiom1U-UAOyujKuAAKvtMTJ5Bs008.jpg

注意:dig用于测试dns系统,因此,不会查询hosts文件进行解析;不指定用哪个DNSserver时,就会去用/etc/resolv.conf找默认的DNSserver

-ttype[A|AAA|SOA|MX|NS|PTR|CNAME]

例:dig-t A www.lx.com@192.168.1.110

 

查询选项:

+[no]trace:从.做跟踪迭代解析过程

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

 

测试反向解析:

dig -x IP @SERVER

dig -x192.168.1.110 @192.168.1.110

 

模拟区域传送:

dig-t axfr ZONE_NAME @SERVER

 

例如:dig -t axfr magedu.com @172.16.100.11

 

host命令:

host[-t type] name [SERVER]

 

nslookup命令:

 nslookup [-option] [name | -] [server]

 

 交互式模式:

         nslookup>

                 serverIP: 指明使用哪个DNS server进行查询;

                 setq=RR_TYPE: 指明查询的资源记录类型;

                 NAME:要查询的名称;

 

反向区域:

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

172.16.100.--> 100.16.172.in-addr.arpa.

 

(1) 定义区域

zone"ZONE_NAME" IN {

type {master|slave|forward}

file "网络地址.zone"

};

 

(2) 区域解析库文件

注意:不需要MXA,以及AAAA记录;SOAPTR记录为主

 

示例:

$TTL86400

$ORIGIN100.16.172.in-addr.arpa.

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

2015042201

1H

5M

7D

1D)

IN        NS        ns1.magedu.com.

IN        NS        ns2.magedu.com.

11        IN        PTR        ns1.magedu.com.

11        IN        PTR        www.magedu.com.

12        IN        PTR        mx1.magedu.com.

12        IN        PTR        www.magedu.com.

13        IN        PTR        mx2.magedu.com.        

 

主从复制:

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

2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;

wKiom1U-UCDD_Kr0AAEw-22KbMQ102.jpg

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

wKioL1U-UaCj0NPPAAFXSvdT4IM347.jpg

4、主服务器得允许从服务器作区域传送;dig -t axfr ZONE_NAME @SERVE

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

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

 

定义从区域的方法:

zone"ZONE_NAME" IN {

typeslave;

masters { MASTER_IP; };

file"slaves/ZONE_NAME.zone";

};

vim /etc/named.rfc1912.zones[从服务器]

wKiom1U-UFbBylQvAABV4HgF6co304.jpg

rndc

rndc--> rndc (953/tcp)

 

rndcCOMMAND

 

COMMAND:

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

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

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

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

reconfig: 重载主配置文件

querylog: 开启或关闭查询日志;

trace: 递增debug级别;

trace LEVEL: 指定使用的级别;

 

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

父域服务器可以知道子域服务器的位置,而子域不知道父域的

例:

类似根域授权:

.com.          IN                  NS         ns1.com.[根的名称服务器]

.com.    IN                         NS         ns2.com.

ns1.com.        IN                A        2.2.2.1

ns2.com.         IN                A        2.2.2.2

 

要是用lx.com. 则要在.com的名称服务器上,解析库中添加资源记录:

lx.com.        IN        NS                ns1.lx.com.[.com的名称服务器]

lx.com.         IN        NS                ns2.lx.com.

lx.com.         IN        NS                ns3.lx.com.

ns1.lx.com.        IN        A                     3.3.3.1

ns2.lx.com.        IN        A                     3.3.3.2

ns3.lx.com.        IN        A                     3.3.3.3

 

在父域资源定义

wKioL1U-UdXAFCzEAAEYDEdMf5Q391.jpg

在子域资源定义

wKiom1U-UImRC0BDAADWTUesRms479.jpg

定义转发服务器:

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

注意:测试父域解析子域时关闭/etc/named.confdnssec功能:

dnssec-enable no;

dnssec-validationno;

wKioL1U-Ugfg88W6AAGBwjbHcKo236.jpg

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

/etc/named.conf中编辑

Options{

forward first|only

forwarders{ 指定转发服务器ip }

}

wKiom1U-ULryrXrUAAGW7wsNDh0022.jpg

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

zone"ZONE_NAME" IN {

typeforward;

forward first|only           first:先转发给指定服务器;若该服务器不接受迭代请求则自己转发给根进行迭代      

                                               only:转发给指定服务器,若该服务器不接受迭代请求则返回失败

forwarders{ 指定转发服务器ip }

}

 

 

bind中基础的安全相关的配置:

acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;定义在/etc/named.conf中的最上方

aclacl_name {

ip;

ip;

net/prelen;

};

 

示例:

aclmynet {

172.16.0.0/16;

}

wKioL1U-Uluwsul2AAJwkxM-TBs042.jpg

 

bind有四个内置的acl:

none: 没有一个主机;

any: 任意主机;

local: 本机;

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

 

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

 

访问控制的指令:

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

allow-transfer {}:允许区域传送的主机;白名单;

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

allow-update {}: 允许更新区域数据库中的内容;

例:allow-query{ any; }; 允许所有主机查询

 

智能DNS的实现

bindview:

视图:

一个bind服务器可定义多个view,每个view中可定义一个或多个zone

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

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

 

viewVIEW_NAME {

match-clients { 定义的ACL或内置的ACL };

zone ZONE_NAME {

 

}

}

 

注意:

(1) 一旦启用了view,所有的zone都只能定义在view中;删除/etc/named.conf中的定义的zone,例根zone

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

即删除/etc/named.conf下的根区域

wKiom1U-URLhElkvAAAuiHvl3VI480.jpg

在想要递归的view下定义根区域

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