DNS: Domain Name Service 域名服务器(应用层协议)
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
本文出自 “Rock blog” 博客,请务必保留此出处http://johnsonxu.blog.51cto.com/11214707/1762465
原文地址:http://johnsonxu.blog.51cto.com/11214707/1762465