centos 7 DNS服务

DNS服务概念

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

BIND : Bekerley Internet Nmae Domai,ISC(www.isc.org)

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

linux    /etc/hosts

windows    %WINDIR%/system32/drivers/etc/hosts 

DNS域名 :

    根域

    一级域名:com,edu,gov,net,org,int,mil

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

    二级域名

    三级域名

    最多有127级域名

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

机构图如下:

blob.png

DNS解析:

DNS查询类型 :

    递归查询  : 一般客户机和服务器之间属递归查询

    迭代查询  : 一般DNS服务器之间属迭代查询

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

    全世界总共有13组根服务器

解析类型:

    FQDN –> IP

    IP –> FQDN

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

DNS服务器类型 :

DNS服务器类型:

    主DNS服务器

    从DNS服务器

    缓存DNS服务器(转发器)

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

从DNS服务器 : 从主服务器或从服务器"负责"(区域传输)解析库副本

blob.png

    序列号 : 解析库版本号,主服务器解析库变化时,其序列递增

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

    重试时间间隔 : 从服务器请求同步失败时,再次尝试时间间隔

    过期时长 : 从服务器联系不到主服务器时,多久后停止服务

"通知"机制 : 主服务器解析库变化时,会主动通知从服务器

区域传送:

    完全传输 : 传送整个解析库

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

Domain : Fully Qualified Domain Name

    正向 : FQDN –> IP

    反向 : IP –> FQDN

负责本地域名的正向和反向解析库

    正向区域

    反向区域

DNS解析 :

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

    cliend –>host文件 –>DNS Service Local Cache –> DNS Server –> Server Cache –> iteration(迭代)–>根–>顶级域名–>二级域名…

解析答案:

    肯定答案:

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

    权威答案:

    非权威答案:

资源记录 :

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

    资源记录: Resource Record ,RR

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

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

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

A:Address,地址记录,FQDN –> IPv4

AAAA:地址记录,FQDN –> IPv6

CNAME:Canonical Name 别名记录

PTR:Pointer,IP — > FQDN

MX : Mail eXchanger 邮件交换器

优先级:0-99,数字越小优先级越高

资源记录的定义格式:

语法: name  [TTL] IN RR_TYPE  value

注意:

  1.     TTL可从全局继承

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

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

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

SOA记录

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

value : 有多部分组成

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

(2)当前区域的管理员的邮箱地址,但地址中不能使用@符合,一般使用点号替代

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

例如:

nineven.com. 86400 IN SOA nineven.com. admin.nineven.com. (

201701081 ; serial  #数字不能超过10位, ; 是注释

2H ; 刷新时间 2小时

10M ; 尝试时间 10分钟

1W ; 过期时间 1周

1D ; 否定时间 1天

)

NS记录

NS :

name : 当前区域的名称

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

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

例如:

nineven.com.   IN NS ns1.nineven.com.

nineven.com.   IN NS ns2.nineven.com.

注意:  

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

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

MX记录

MX :

name :当前区域的名称

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

    

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

例如:

nineven.com.  IN MX 10 mx1.nineven.com.

nineven.com.  IN MX 15 mx2.nineven.com.

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

A记录

A :

name : 某FQND,例如 www.nineven.com.

value : 某IPv4地址

例如: 

www.nineven.com.  IN A 1.1.1.1 

www.nineven.com.  IN A 1.1.1.2

    注意:

        *.nineven.com.    IN    A    3.5.6.7

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

AAAA :

name  : FQDN

value : IPv6

PTR :

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

value : FQDN

例如:

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

    简写为 4    IN    PTR    www.nineven.com

CNAME :

name : FQDN格式的别名

value : FQDN格式的正式名字

例如:

web.nineven.com. IN CNAME www.nineven.com

注意:

(1) TTL 可以从全局继承

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

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

(4) 对于正向区域来说,各MX,NS 等类型的记录的value为一个FQDN,此FQDN应该有一个A记录

子域

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

类似根域授权tld:

    .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 

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

    nineven.com.    IN    NS    ns1.nineven.com.

    ns1.nineven.com.    IN    A    12.3.22.56

glue record : 粘合记录,父域授权的记录

BIND

BIND的安装配置

BIND : Berkeley Internet Name Domain

dns :协议

bind : dns协议的一种实现

named : bind程序的运行的进程名

程序包:

bind-libs : 被bind和bind-utils包中的程序共同用到的库文件

bind-utils : bind客户端程序集,例如dlg,host,nslookup 等

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

bind-chroot : 选装,让named运行于 jail 模式下

bind :

服务脚本和名称:/etc/rc.d/init.d/named,unbound.service 

主配置文件: 

/etc/named.conf

/etc/named.rfc1912.zones

/etc/rndc.key

/etc/unbound/unbound.conf 

解析库文件:

/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

工作在 tcp的953 端口,默认监听于 127.0.0.1 ,因此仅允许本地使用

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

centos 6 service named start

centos 7 systemctl start named.service

主配置文件格式;

全局配置段:

options{…}

日志配置段:

logging{…}

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

zone{…}

那些由本级负责解析的区域或转发的区域

注意: 每个配置语句必须以分号结尾

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

缓存名称服务器的配置:

监听能用外部主机通信的地址;

listen-on port 53;  监听所有端口

listen-on port 53 { 172.168.16.3 } ; 监听特定端口

学习时,建议关闭dnssec功能

dnssec-enable no;

dnssec-validation no;

rndc: 

rndc –> rndc (953/tcp) 

rndc COMMAND

COMMAND: 

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

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

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

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

reconfig: 重载主配置文件 

querylog: 开启或关闭查询日志文件/var/log/message 

trace: 递增debug一个级别 

trace LEVEL: 指定使用的级别 

notrace:将调试级别设置为 0 

flush:清空DNS服务器的所有缓存记录

配置主DNS名称服务器

检查配置文件错误;

named-checkconf

测试工具:

dig,host,nslookup等

dig命令:

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

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

查询选项:

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

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

比如:

dig -t A www.baidu.com

dig +trace -t A www.baidu.com

注意: 反向解析测试

dig -x IP

模拟完全区域传送:

dig -t axfr DOMAIN [@server]

host 命令:

host [-t RR_TYPE] name SERVER_IP

host -t A www.baidu.com

host -t NS baidu.com

nslookup 命令:

nslookup [-options] [name] [server]

交互式模式:

nslookup>

server IP  : 以指定的IP为DNS服务器进行查询

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

name  : 要查询资源的名称

rndc 命令: named 服务控制命令

rndc status  查看状态

rndc flush  清空缓存

配置正向解析区域

配置解析一个正向区域:

以nineven.com域为例

(1) 定义区域

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

zone "ZONE_NAME" IN {

type {master|slave|hint|forward};

file "ZONE_NAME.zone"

}

注意:区域名字即为域名

编辑配置文件 vim /etc/named.rfc1912.zones ;在最后添加

zone "nineven.com" IN {

type master;

file "nineven.com.zone";

};

(2) 建立区域数据文件(主要记录为A或AAAA记录)

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

文件为 vim /var/named/nineven.com.zone

权限为: -rw-r—–. 1 root  named  291 Sep 22 13:02 nineven.com.zone

            $TTL 3600

            @       IN SOA  ns1.nineven.com.        nsadmin.nineven.com. (

                            2016092501

                            1H

                            10M

                            6D

                            1D

            

            )

                    IN      NS      ns1

                    IN      NS      ns2

                    IN      MX  10  mx1

            ns1     IN      A       192.168.153.140

            ns2     IN      A       192.168.153.141

            www     IN      A       192.168.153.139

            www     IN      A       192.168.153.138

            qq      IN      A       192.168.153.137

            web     IN      A       192.168.153.137

            mx1     IN      A       192.168.153.136

            blog    IN      CNAME   web

            kkk     IN      A       192.168.153.135

            mx      IN      A       192.168.153.135

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

named-checkconf

named-checkzone nineven.com /var/named/nineven.com.zone

rndc status 

rndc reload 或者 systemctl reload named.service

(4) 测试

dig -t A www.nineven.com @172.18.13.85

host -t A www.nineven.com 172.18.13.85

操作如图:

修改/etc/named.conf配置文件如下

blob.png

blob.png

将自己想要添加的zone写在 /etc/named.rfc1912.zones

再最后一行添加如下:

blob.png

默认文件在 /var/named/目录下,新建文件nineven.com.zon

 vim /var/named/nineven.com.zone

内容如下:

blob.png

检查配置文件是否正确

blob.png

启动服务,并查看状态

blob.png

测试正向解析:

修改默认dns,将dns指向自己

blob.png

blob.png

也可以通过此命令测试

blob.png

那么,咱们配置一下反向解析

先编辑文件 /etc/named.rfc1912.zones 在最后添加反向解析域

vim /etc/named.rfc1912.zones

blob.png

编辑反向解析域文件

vim /var/named/153.168.192.zone

blob.png

检查配置文件是否正确

blob.png

测试如下:

blob.png

配置从服务器,并实现正反向解析

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

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

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

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

4、主服务器得允许从服务器作区域传送 

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

6、bind程序的版本应该保持一致;否则,应该从高,主低定义从区域的方法: 

    zone "ZONE_NAME" IN { 

    type slave; 

    masters { MASTER_IP; }; 

    file "slaves/ZONE_NAME.zone"; 

    }

操作如下:

配置一个从区域:

On Slave

(1)定义区域

zone "ZONE_NAME" {

type slave;

file "slaves/ZONE_NAME.zone"  #不用手动建立,从服务器会自动同步主服务器文件

masters { MASTER_IP; };

}

(2) 语法检查

named-checkconf

(3) 重载配置

rndc reload

systemctl reload named.server

On Master

(1) 确保区域数据文件中为每个从服务配置NS记录

配置详情如下:

先在另外一台服务器安装bind并进行配置:

/etc/named.conf

blob.png

blob.png

编辑配置文件,添加主服务器的区域配置信息

/etc/named.rfc1912.zones 

blob.png

然后检查配置文件

blob.png

从服务器配置好了,然后开始配置主服务器

blob.png

在正向解析和反向解析区域文件把从服务器的解析加进去

正向解析文件

blob.png

反向解析文件

blob.png

然后在主服务器执行重载操作

rndc reload

blob.png

先打开从服务器的

/var/named/slaves目录,没有任何文件

blob.png

然后在从服务器启动named服务

blob.png

验证一下,从服务器是否可以解析dns

blob.png

blob.png

子域服务器配置

子域授权:分布式数据库

正向解析区域子域方法:

定义一个子域:

    xixi.nineven.com.    IN    NS    ns1.xixi.nineven.com.

                IN    NS    ns2.xixi.nineven.com.

    ns1.xixi.nineven.com.    IN    A    192.168.152.140

    ns2.xixi.nineven.com.    IN    A    192.168.153.141

定义转发:

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

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

zone "ZONE_NAME" IN {

type forward;

forward {first|only};

forwarders { server_ip };

};

first: 首先转发,转发器不响应时,自己去迭代查询

only : 只转发

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

直接修改配置文件

/etc/named.conf

forward only;

forwarders {server_ip}

先找区域再去找全局

先修改主dns服务器配置信息(本次只修改正向解析)

blob.png

rndc reload

然后修改子域

操作如下:

编辑主配置文件 /etc/named.conf

blob.png

blob.png

编辑配置文件

vim /etc/named.rfc1912.zones

blob.png

检查配置文件并启动服务

blob.png

检测:

blob.png

blob.png

blob.png

批量域名dns解析

在 nineven.com.zone中添加如下:

$GENERATE 1-100 test$ IN A 192.168.153.$

blob.png

blob.png

反向解析

blob.png

blob.png

bind中的ACL

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

acl acl_name {

ip;

net/prelen;

};

示例:

acl mynet {

192.168.0.0/16;

192.0.0.0/8;

};

bind 四个内置的acl

none : 没有一个主机

any : 任意主机

local : 本机

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

访问控制指令:

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

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

如果在zone内写,那么表示只允许该zone传送

可以先在主配置文件定义:

acl slaves {

10.1.2.34;

3.22.123.44;

};

然后写到zone 内

allow-transfer { slaves; };

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

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

bind view

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

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

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

格式:

view VIEW_NAME {

zone

zone

zone

};

view internal {  #本地view

match-clients { 12.123.12.0/24;}; #自上而下匹配

zone "nineven.com" IN {

type master;

file "nineven.com/internal";

}

};

view external {  #互联网view

match-clients { any; }

zone "nineven.com" IN {

type master;

file "nineven.com/external";

}

};

注意:

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

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

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

实验测试如下

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

blob.png

blob.png

blob.png

将原来在这的

blob.png

blob.png

blob.png

重启服务,

blob.png

blob.png

blob.png

类似文章