您的位置:首页 > 其它

DNS基础原理及配置详解!!!

2016-04-10 23:02 666 查看
DNS: Domain Name Service[b] 域名服务器(应用层协议) [/b]

DNS所监听的端口
53/UDP,53/TCP(默认)



一般情况下仅使用UDP协议进行讯通,若网络出现连接问题会自动转为TCP协议通讯

DNS所说的“域”是逻辑概念

域名结构:
根域:为DNS根节点服务器,用"."表示

全球有13组DNS根服务器

顶级域:top level domain:(也叫一级域)
分类:
组织域:.com, .org, gov, .edu, mil
国家域:.tw, .hk, .cn
反向域:.in-addr.arpa

顶级域是由根域划分,由各种组织或商业公司代理

二级域:
二级域就是我们常见的网站名,例如baidu.com就是一个二级域的域名,www.baidu.com是

baidu.com这个域中的某个主机

子域:
子域是相对而言,对于根域来说,顶级域如.com就是跟域的子域;而对于二级域baidu.com来说
www.baidu.com是baidu.com的子域

FQDN: Full Qualified Domain Name 完全限定名称
完全的限定名称书写为www.baidu.com. 没错,.com后面是有点的,在配置DNS的时候是必须要加
上点的,这样才是一个完整的FQDN

整个域名的的结构成为namespace:名称空间

DNS查找类型:

递归:recursion
客户端对DN服务器只发起1次请求,DNS服务器响应并返回答案,称为递归
DNS服务器对客户端递归意味着,客户端对DNS服务器发起请求,若DNS服务器本地缓存有答案
则直接返答案,若没有,则需要多次查找答案,最终返回答案给客户端

迭代:iteration
客户端向DNS服务器请求答案,服务器没有授权回答,则指返回一个可查询的服务器IP给客户端客
户端再对这个IP发起请求,循环往复,直到得到答案,称为迭代
只对客户端迭代查询的服务器意味着,若客户端请求不属于服务器自己的解析区域,则不会为客户端
查询答案,而是为客户端返回一个可查询的服务器IP,让客户端自己去查找答案

递归和迭代可以理解为DNS服务器的两种响应方式

注意:客户端指向的DNS服务器一定是允许给本地主机做递归的,只有DNS服务器才能进行迭代,根
服务器不做任何递归性答复 (考虑到负载情况)

答复类型:

权威回答:负责解析请求主机所在的域的DNS服务器的回答,比如查找www.johnson.com,刚好
DNS服务器就是负责解析www.johnson.com主机,返回的答案就是权威答案

非权威回答:非负责请求的域名解析的DNS服务器从缓存中查询到返回的答案

域名解析请求答案有肯定和否定之分,避免DNS服务器做过多的不必要响应,肯定的答案和否定答案
都会缓存到本地,当对同一主机解析再次请求时,都先从缓存从查找

域名解析流程:(以www.johnson.com为例)
1.当客户端要解析一个域名时,客户端首先分析本地hosts文件,若无对应的主机条目,就去分析
本地缓存,若没有答案,则向本地DNS服务器发起请求

2.DNS服务器接收到请求,首先分析服务器本地的缓存,看是否存在要解析的答案,有则直接返回
没有则向根发起请求

3.根接收到请求,但根并不负责任何递归性的回答,所以,根会返回www.johnson.com的顶级域

.com所在的主机地址给本地DNS服务器

4.本地DNS服务收到根的指向性答复,然后去找负责.com的DNS服务器

5.负责.com的DNS服务器发现johnson.com是自己的管理的区域,但自己并不负责做递归性的答复
所以返回负责解析johnson.com的DNS服务器地址给本地DNS服务器

6.本地DNS服务器向负责解析johnson.com这个域的DNS服务器发起请求

7.负责解析johnson.com这个二级域的DNS服务器接收到解析www.johnson.com请求后,分析自己

的区域数据库文件,发现存在www主机,给本地DNS服务器返回答案(权威答案)

8.本地DNS服务器收到答复,将答案返回给客户端,域名解析过程完成

是不是发现解析一个主机名的过程很麻烦,所以才需要缓存这个东西,把第一次请求的答案放到缓存

中,当同一请求再次出现时,直接从缓存中返回答案,客户端和DNS服务器都可以缓存
需要注意的是,客户端是相对而言的,比如本地DNS服务器向根发起请求,那么相对于根,本地DNS
服务器就是客户端,不管请求者是客户端还是DNS服务器,只要你向我发起请求,你就是客户端

DNS域名解析方式:
正向解析:FQDN --> IP
反向解析:IP --> FQDN

传统意义上,正反向解析技术不同,不应该存放于同一数据库文件中,主机名的解析式依赖于
正反解析数据库文件

资源记录:Resource Record
资源记录有类型,用于资源的功能
SOA:Start Of Authority, 起始授权
NS: Name Server, 域名服务器
MX: Mail eXchanger: 邮件服务器
A: Address, FQDN --> IPv4
PTR: PoiTeR, IPv4 --> FQDN
AAAA: Address,FQDN --> IPv6
CNAME: Canonical Name, 别名记录

DNS数据库文件(区域数据文件,区域自身有名字):只能包含资源记录或宏的定义

资源记录格式:
name [ttl] In RRtype Value
name:资源名称,不同资源类型名称不同
[ttl]: 缓存有效期,可省略,可以在宏中定义
IN: Internet,固定格式
RRtype: 资源类型
value:资源对应的值
资源记录的起始行可以定义宏,如TTL,缓存有效期,这样就可在资源条目中省略不写

例子:A资源记录
www 600 IN A 172.16.11.1

www.johnson.com. 600 IN A 172.16.11.1

注意:
若给出相对路径,则会自动补全
若给出绝对名称,后面的"."一定不能省略

资源配置
SOA:只能有一个
name:为区域名称,通常可以简写为@
value:主DNS服务器的FQDN(ns.johnsonxu.com.)

注意:SOA必须是区域数据库的第一条记录

例:@ 600 IN SOA ns.johnson.com. admin.johnson.com. (
serial number:为数据库的版本号,十进制格式,不能超过10位
refresh time:从服务器到主服务器的更新间隔
retry time:更新失败重试时间,应该小于refresh time
expire time:重试多久后,依然没有联系到主DNS,自己拒绝提供服务的时间
netgative answer ttl ):否定答案缓存时间

NS: 可以有多条
name:为区域名称,通常可简写为@
value:DNS服务器的FQDN(可以使用相对名称)

例:@ 600 IN NS ns
相对名称:如ns,则会自动补全为ns.johnson.com.(补全的名称为区域名字)
@表示为区域名字,即johnson.com,一般域名即为区域名

A:
name:FQDN(可使用相对名称)
value:IP

例:
www 600 IN A 172.18.17.1
www 600 IN A 172.18.17.2

同一主机名使用不同IP地址可作简略的负载均衡(轮询访问)

www 600 IN A 172.18.17.1
tp 600 IN A 172.18.17.1

同一ip地址使用不同主机名,同一主机提供多种服务

注意:任何Value以FQDN作为其值的资记录,都应该添加一条A资源记录,以确保该资源的FQDN能
解析为IP地址

MX: 可以有多个
name:区域名称,用于表示smtp服务器
value:优先级和FQDN
优先级:0-99,数字越小,优先级越高

例:
@ 600 IN MX 10 mail
@ 600 IN MX 20 mail
注意:配置MX资源的时候千万不能把优先级省略,否则会报错

CNAME:
name: FQDN
value:FQDN

例:
ftp IN CNAME www
ftp的正式名称为www,即ftp为www的别名

PTR: IP --> FQDN
name:IP是逆向的‘主机’地址,如172.18.17.2的name为2.17,其完全
的书写格式为2.17.18.172.in-addr-arpa.
value: FQDN

例:
2.17 600 IN PTR www.johnson.com

需要提醒的是:PTR资源记录name为主机地址(注意区分网络地址和主机地址,IP包含两者)
若网络地址是16位,那么主机是16位,name的填写如172.18.17.2,为2.17,后面不用填写,会自动
补全,反向区域的命名为IP的网络地址,为"18.172.in-addr.arpa"
其实,若反向区域命名为"17.18.172.in-addr.arpa",则在PTR资源记录中name填写2即可,不管怎样
使用相对名称,则补全后必须是一个完整的IP,或name直接写全2.17.18.172.in-addr.arpa.

区域和域:
Domain:域是逻辑概念
zone:区域是物理概念,可以说区域是域的实现,区域数据库文件定义了此域能够解析的资源条目

在一个域内的ns,正向解析文件和反向解析文件各标示为一个物理空间,称为区域

DNS服务器类型:
主DNS服务器
辅助DNS服务器

缓存名称服务器
不做特定的区域解析,所有请求都将转发出去,并把查询的结果缓存至本地
若再有相同的请求,则从缓存中直接返回结果给请求者(此答案为非权威答案)

DNS协议实现:
DNS --> BIND --> named
DNS是协议,而协议的实现靠软件,实现DNS协议的软件是BIND,BIND的进程名称为named

BING安装:
本文只是基本的DNS服务配置,只安装BIND即可

创建新的DNS主配置文件:

1.手动创建新的named.conf文件,内容如下(在创建之前先把原文件重命名使其失效)

options {  # 全局配置,定义区域文件目录,后面file引用的路径都是相对此定义的路径
directory "/var/named";
};

zone "." IN {         # 根区域配置
type hint;
file "named.ca";
};

zone "localhost." IN {        # 本地正向解析区域配置
type master;
file "named.localhost";
};

zone "1.0.0.172-in.addr.arpa" IN {   # 本地反向解析区域配置
type master;
file "named.loopback";
};

# 实际上,仅有以上区域配置,一个简单DNS服务就能运行起来了
下面是自己定义的区域配置

zone "johnson.com." IN {        # 正向解析区域配置
type master;
file "johnson.com.zone";
};

# 检查主配置文件的语法错误

[root@johnson-linux ~]# named-checkconf

# 修改主配置文件的属主和属组,并修改权限为640
[root@johnson_server ~]# chown root:named /etc/named.conf
[root@johnson_server ~]# chmod 640 /etc/named.conf
其实可以不用创建一个主配置文件,因为软件安装后就已经生成了,这里自己手动配置,只是为了对主配置文件做一个简单了解,在自己能够手动配置完并且能够把服务运行起来,相信文件配置就不是问题了,若你不想自己编辑,则直接使用原来的主配置文件即可

2.在/var/named目录创建johnson.com.zone区域数据文件,内容如下
$TTL 600
@       IN      SOA     ns.johnson.com.     admin.johnson.com. (
2016140913 ;serial number
2H ; fresh time
20M ; retry time
7D ; expire time
4H ) ; netgtive time
@       IN      NS      ns
@       IN      NS      ns2
@       IN      MX  10  mail
ns      IN      A       172.18.17.16
mail    IN      A       172.18.17.3
www     IN      A       172.18.17.3
ns2     IN      A       172.18.17.2
img     IN      A       172.18.17.4
ftp     IN      CNAME   www
http    IN      CNAME   www

# 配置完成保存退出,检测语法错误
[root@johnson-linux ~]# named-checkzone "johnson.com" /var/named/johnson.com.zone
zone johnson.com/IN: loaded serial 2016140913
OK
# 显示OK则表示没有语法问题

# 同样需要修改文件的属主和属组及权限
[root@johnson_server ~]# chown root:named /var/named/johnson.com.zone
[root@johnson_server ~]# chmod 640 /var/named/johnson.com.zone
注意:在配置新区域文件是必须要给出从服务器的数据同步各项参数,缺一不可

3.启动服务,使用dig工具测试
在测试之间,简单了解dig工具使用
dig [-t TYPE] NMAE [@SERVER]
-t type:指定测试类型,如 -t A,就是测试A资源类型(FQDN --> IP)
@SERVER:使用指定DNS服务器来测试,如@172.18.17.16
NAME:要测试的主机名,如www.johnson.com

# 语法检测没有问题后启动服务
[root@johnson-linux ~]# service named start
Starting named:                       [  OK  ]

# 可以通过/var/log/message 查看日志获取服务信息
[root@johnson-linux ~]# tail /var/log/messages
Apr  9 20:25:26 johnson-linux named[6371]: automatic empty zone: B.E.F.IP6.ARPA
Apr  9 20:25:26 johnson-linux named[6371]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
Apr  9 20:25:26 johnson-linux named[6371]: command channel listening on 127.0.0.1#953
Apr  9 20:25:26 johnson-linux named[6371]: command channel listening on ::1#953
Apr  9 20:25:27 johnson-linux named[6371]: zone 1.0.0.172-in.addr.arpa/IN: loaded serial 0
Apr  9 20:25:27 johnson-linux named[6371]: zone johnson.com/IN: loaded serial 2016140913
Apr  9 20:25:27 johnson-linux named[6371]: zone localhost/IN: loaded serial 0
Apr  9 20:25:27 johnson-linux named[6371]: managed-keys-zone ./IN: loaded serial 5
Apr  9 20:25:27 johnson-linux named[6371]: running   # 已经运行起来了
Apr  9 20:25:27 johnson-linux named[6371]: zone johnson.com/IN: sending notifies (serial 2016140913)

# 服务有任何问题,都记得要看一下日志,要养成习惯

# 测试DNS服务器是否能解析
[root@johnson-linux ~]# dig -t A www.johnson.com @172.18.17.16

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.johnson.com @172.18.17.16
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12888
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.johnson.com.        IN    A      <--------------# 我们的请求

;; ANSWER SECTION:  # 返回的答案,主机名成功解析
www.johnson.com.    600    IN    A    172.18.17.3   <-------------

;; AUTHORITY SECTION:       # 解析此区域的dns
johnson.com.        600    IN    NS    ns.johnson.com.
johnson.com.        600    IN    NS    ns2.johnson.com.

;; ADDITIONAL SECTION:      # 附加信息,把dns服务器的地址也解析出来了
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2
# 我这里配置了主从DNS,所以又两个DNS服务器

;; Query time: 1 msec
;; SERVER: 172.18.17.16#53(172.18.17.16)
;; WHEN: Sat Apr  9 20:12:14 2016
;; MSG SIZE  rcvd: 116

提醒:dig 工具测试可以指定解析的DNS,若不指定,则使用/etc/resolv.conf中的DNS,也可手动
把配置文件的中DNS改为自己配置的DNS,这样就不必手动指定

正向解析的配置到此就搞定了,下面来搞一下反向解析区域的配置

反向解析区域配置:
1.编辑/etc/named.conf文件,添加反向解析区域,添加内容如下
# 添加区域授权
zone "18.172.in-addr.arpa" {
type master;
file "172.18.zone";
};
# 检测语法错误
[root@johnson-linux ~]# named-checkconf
# 没有结果就是最好的结果
注意:反向解析区域名以逆向‘网络地址’.in-addr.arpa命名

2.编辑反向解析数据库文件:
第一条应该为SOA记录
应该具有NS记录,但不能出现MX和A记录
较为常见的即为PTR记录
名称为逆向‘主机’地址
# 在/var/named目录下创建反向解析区域数据库文件
$TTL 600
@       IN      SOA     ns.johnson.com.  admin.johnson.com. (
2016040914
2H
20M
7D
3H )
IN      NS      ns.johnson.com.
IN      NS      ns2.johnson.com.
3.17    IN      PTR     www.johnson.com.
2.17    IN      PTR     ns2.johnson.com.
4.17    IN      PTR     img.johnson.com.

#完成保存退出,检测区域文件语法错误
[root@johnson-linux ~]# named-checkzone "18.172.in-addr.arpa" /var/named/172.18.zone
zone 18.172.in-addr.arpa/IN: loaded serial 2016040914
OK

# 修改文件属主属组及文件权限
[root@johnson_server ~]# chown root:named /var/named/172.18.zone
[root@johnson_server ~]# chmod 640 /var/named/172.18.zone
数据
# 没有任何语法错误,则启动重载一下服务
[root@johnson-linux ~]# service named reload
Reloading named:                     [  OK  ]

注意:逆向解析库文件name为‘主机地址’,会自动以区域名字补全网络号
逆向解析文件的FQDN必须给全,不能使用简写

3.测试反向解析是否正常
[root@johnson-linux ~]# dig -x 172.18.17.3 @172.18.17.2

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -x 172.18.17.3 @172.18.17.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52862
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:       # 发出的请求
;3.17.18.172.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:      # DNS服务器返回答案,反向解析成功
3.17.18.172.in-addr.arpa. 600    IN    PTR    www.johnson.com.

;; AUTHORITY SECTION:
18.172.in-addr.arpa.    600    IN    NS    ns.johnson.com.
18.172.in-addr.arpa.    600    IN    NS    ns2.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2

;; Query time: 1 msec
;; SERVER: 172.18.17.2#53(172.18.17.2)
;; WHEN: Sat Apr  9 20:57:15 2016
;; MSG SIZE  rcvd: 138

以上都是基于自己手动编辑的主配置文件进行的,可以直接使用原来的主配置文件/etc/named.conf
和区域配置文件/etc/named.rfc1912.zones,添加区域直接往里面写即可
主配置文件:
全局配置段:
options { ... }
日志配置段:
logging { ... }
区域配置段:
zone { ... }
要点:

1.服务监听端口:
listen-on port 53 { 127.0.0.1; };
默认监听与本地的主机,若要改为监听任意主机,将配置文件中此行
使用//注释即可,或者括号内容改为{ any; },注意前后需要有空格

2.allow-query { localhost; }
此项定义允许查询的主机范围,localhost为只允许本地计算机查询,若想让其他特定主机查询,{}内改为IP地址即可,若想让所有主机查询,使用//注释或 改为{ any; } 即可

3.recursion yes;
是否允许递归,yes为允许,no为不允许




主从同步:
为了防止一个DNS服务器出现宕机或压力过大,往往要配置多台辅助DNS服务器,此时就涉及到主从
数据同步的问题

区域传送:
辅助DNS服务器向主DNS服务器或其他辅助DNS服务器请求数据传输的过程
完全区域传送:传送区域的所有数据,AXFR
增量区域传送:传送区域中改变的数据,IXFR
在设立了主从DNS服务器之后,从服务器每隔一段时间就会到主服务器上查询区域数据,看看是否发
生变化,以保证数据的准确性;当主服务器修改区域数据时,版本号发生改变,将会通知从服务器数
据发生变化,从服务器便会执行同步操作

注意:主从DNS服务器的BIND版本最好能保持一致,从服务器BIND版本不能低于主服务器,可以是
等于或大于

从DNS服务器配置:

我这里使用虚拟机实现,创建一台新的centos6.7,IP地址为172.18.17.2
named主配置文件不再手动创建,直接使用原来的,简单做一下注释

其实在配置从服务器的第一部要先向上级授权,就是.com,否则在互联网上,从DNS服务不会被找
到,但我们这里是测试,所以忽略这一步

1.安装BIND并配置从服务器区域文件信息
编辑/etc/named.rfc1912.zones,添加条目

正向解析区域配置

zone "johnson.com" {
type slave;
masters { 172.18.17.16; };
file "slaves/johnson.com.zone";  #从服务器区域文件存放
allow-transfer { none; };    #设置传送权限,不允许其他主机传送
};

反向解析区域配置

zone "18.172.in-addr.arpa" {
type slave;
masters { 172.18.17.16; };
file "slaves/18.172.zone";
allow-transfer { none; };
};

# 配置完后,检测语法错误,无报错启动服务
[root@johnson_server ~]# service named start
Starting named:                                            [  OK  ]

注意:
1.从服务器不需要创建区域数据文件,会自动从主DNS服务器中复制,只要在添加区域是设定好
区域文件目录为/var/named/slaves/file_name.zone 即可

2.基于安全考虑,从服务器应设置为不接受任何人的转,发使用allow-transfer { IP; };,实现
区域数据安全传输控制

2.在主DNS服务器添加从DNS服务器NS条目和A或PTR条目

正向解析区域数据文件添加从服务器资源条目:
编辑/var/named/johnson.com.zone

IN  NS  ns2
ns2  IN  A   172.18.17.2

反向解析区域数据文件添加从服务器资源条目:
编辑/var/named/172.18.zone

IN  NS  ns2.johnson.com.
2.17    IN  PTR  ns.johnson.com.

若无语法错误,重载主DNS服务和从DNS的服务
# 服务重启后,区域数据已经复制过来了
[root@johnson_server ~]# ls /var/named/slaves/
18.172.zone  johnson.com.zone


3.测试从服务器是否能完成解析
[root@johnson_server ~]# dig -t A www.johnson.com @172.18.17.2 #指定为从DNS服务器地址

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.johnson.com @172.18.17.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61007
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.johnson.com.        IN    A

;; ANSWER SECTION:
www.johnson.com.    600    IN    A    172.18.17.3   # 成功解析

;; AUTHORITY SECTION:
johnson.com.        600    IN    NS    ns.johnson.com.
johnson.com.        600    IN    NS    ns2.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2

# 反向解析-------------------------------------------------------
[root@johnson_server ~]# dig -x 172.18.17.3 @172.18.17.2

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -x 172.18.17.3 @172.18.17.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36439
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;3.17.18.172.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
3.17.18.172.in-addr.arpa. 600    IN    PTR    www.johnson.com.

;; AUTHORITY SECTION:
18.172.in-addr.arpa.    600    IN    NS    ns2.johnson.com.
18.172.in-addr.arpa.    600    IN    NS    ns.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2


区域增量传送就不演示了,也没办法演示实时的效果,要注意的是,在主从DNS服务配置完成之后,每次修改主DNS服务器的区域数据都要将版本号修改(大小加1即可),这样这样从服务器才会更新

子域授权:
(1)在主DNS服务器的区域数据文件中添加以下内容:
1.NS条目添加子域名称,如test.johnson.com
2.子域对应的A记录
# 添加如下资源记录
test    IN      NS      ns.test
ns.test IN      A       172.18.17.5


(2)在新的DNS服务器中添加以下内容:
1.添加区域(以子域名称命名)
2.创建区域数据文件

# 定义zone
[root@johnson_linux named]# vim /etc/named.rfc1912.zones
zone "test.johnson.com" IN {
type master;
file "test.johnson.com.zone";
};

# 创建区域数据文件
$TTL 600
@       IN      SOA     ns.test.johnson.com.    admin.test.johnson.com. (
2016041010
2H
20M
7D
3H )
@       IN      NS      ns
ns      IN      A       172.18.17.5
www     IN      A       172.18.17.6
注意:在父域zone中添加的子域记录只是授权作用,把父域和子域联系起来,不能做解析,需要转发到子域DNS服务器才能解析

测试是否能正常解析(父域为DNS为172.18.17.16,子域的DNS地址为172.18.17.5)
# 测试父域是否能解析子域
[root@johnson-linux named]# dig -t NS test.johnson.com @172.18.17.16

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t NS test.johnson.com @172.18.17.16
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31281
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;test.johnson.com.        IN    NS

;; ANSWER SECTION:    # 解析成功
test.johnson.com.    600    IN    NS    ns.test.johnson.com.

;; ADDITIONAL SECTION:
ns.test.johnson.com.    600    IN    A    172.18.17.5

# 测试子域DNS是否能正常解析
[root@johnson_linux named]# dig -t A www.test.johnson.com @172.18.17.5

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.test.johnson.com @172.18.17.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5725
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.test.johnson.com.        IN    A

;; ANSWER SECTION:    #
www.test.johnson.com.    600    IN    A    172.18.17.6

;; AUTHORITY SECTION:
test.johnson.com.    600    IN    NS    ns.test.johnson.com.

;; ADDITIONAL SECTION:
ns.test.johnson.com.    600    IN    A    172.18.17.5
注意:此时子域只能解析自己服务器定义的zone的主机,无法解析父域的主机

区域转发:
在默认情况下,任何不属于自己解析区域的主机,都将转发给根
客户端请求的主机不属于自己解析的区域,而又不想转发给根,想直接转发给指定的能够解析此主机的DNS服务器,就需要配置区域转发

定义一个要转发的zone
如:在上面的提到子域中转发johnson.com这个域的所有主机,子域本身不能解析父域的主机

# 定义转发的zone
[root@johnson_linux named]# vim /etc/named.rfc1912.zones
zone "johnson.com" {
type forward;
forwarders { 172.18.17.16; };
forward only;
};

# 重启服务后测试这时是否能解析解析父域的主机
[root@johnson_linux named]# dig -t A www.johnson.com @172.18.17.5 #本机DNS

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.johnson.com @172.18.17.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65094
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.johnson.com.        IN    A

;; ANSWER SECTION:
www.johnson.com.    595    IN    A    172.18.17.3  # 有结果,成功转发

;; AUTHORITY SECTION:
johnson.com.        595    IN    NS    ns2.johnson.com.  #答案来自于父域的DNS
johnson.com.        595    IN    NS    ns.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        595    IN    A    172.18.17.16  # 父域DNS的IP
ns2.johnson.com.    595    IN    A    172.18.17.2
forward only|first
only:代表此域仅做转发,即使转发的服务器不做回应也不再向根请求
first:表示先做转发,若转发的服务器无响应,则自己去找根

在named.conf的options定义格式:
forward first|only
forward { IP; };

要点:
1.添加特定的转发区域,定义一个zone即可
2.不属于自己解析的主机都转发到指定的DNS服务器,在named.conf的options中定义即可

安全控制选项:
allow-transter { IP|none;};
主从传送控制,通常需要开启
一般主填写从服务器,从填写none,不允许任何人传送

allow-query{ IP; };
一般不启用此设置,此项一般仅用于缓存名称服务器,仅对本地开放

allow-recursion{ IP; };
设置允许递归的白名单,可以使用网络,如172.18.0.0/16
allow-update{};
设置是否允许动态更新区域数据文件的主机IP,此项一般为{ none;},不建议开启,安全风险很
大,动态更新一般基于DHCP服务器的动态地址分配

ACL:访问控制列表
通常定义acl列表在主配置文件name.conf的上方(options的上方)
内置列表:
any:任何主机
none:无
local:本机
localnet:本机所在的网络

自定义:
acl NAME {
172.18.17.1/16
192.168.1.19/24
...
};

当需要在多个zone中的安全控制选项中定义大量的主机,为了方便修改,ACL访问控制列表就起到很好的作用,只要定义好一个主机列表,将列表名称填上即可,列表名即表示此列表中的所有主机

--END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DNS 域名 应用层