一、前言

DNS 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53(TCP 53端口用于dns服务器自己同步数据,UDP 53端口用于查询解析)。是一个域名服务,应用层协议。

 DNS查询原理及名词解释:

dns查询:迭代查询、递归查询

如下图,从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。

总结:

1.递归查询: 
一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机; 
2.迭代查询(反复查询): 
一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;

所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询)”
也就是递归就是交给下一个服务器解决(下一个就相当于客户了,所以他也可以选择去递归,或者迭代)(迭代就是返回给当前的,当前自己再去处理)
  递归即递给服务器,所有操作都有服务器来完成。

DNS解析

正向解析区域和反向解析区域

正向解析是将域名映射为IP地址

www.baidu.com  --> 202.108.22.5

反向解析是将IP地址映射为域名

202.108.22.5  --> www.baidu.com

注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;

主-从DNS服务器

主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
     从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;

“复制”操作的实施方式:
     序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
     刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
     重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
     过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
     否定答案的缓存时长:
                    
    主服务器”通知“从服务器随时更新数据;
                
区域传送:
     全量传送: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记录,而且必须放在第一条;
NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
A: Address, 地址记录,FQDN --> IPv4;
AAAA:地址记录, FQDN --> IPv6;
CNAME:Canonical Name,别名记录;
PTR:Pointer,IP --> FQDN
MX:Mail eXchanger,邮件交换器;
优先级:-,数字越小优先级越高;

资源记录的定义格式:
     语法:name [TTL] IN RR_TYPE value

SOA:
  name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
  value:有多部分组成

   () 当前区域的区域名称(也可以使用主DNS服务器名称);
() 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
() (主从服务协调属性的定义以及否定答案的TTL)                   

例如:

  baidu.com.     IN    SOA   baidu.com.  admin.magedu.com.  (
; serial
2H ; refresh
10M ; retry
1W ; expire
1D ; negative answer ttl
)

NS:
   name: 当前区域的区域名称
   value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
   注意:一个区域可以有多个ns记录;

例如:

 baidu.com.          IN     NS      ns1.baidu.com.
baidu.com. IN NS ns2.baidu.com.

MX:
   name: 当前区域的区域名称
   value:当前区域某邮件交换器的主机名;
   注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
例如:

  baidu.com.  IN   MX      mx1.baidu.com.
baidu.com. IN MX mx2.baidu.com.                  

A:
   name:某FQDN,例如www.baidu.com.
   value:某IPv4地址;
例如:

 www.baidu.com.        IN     A    1.1.1.1
www.baidu.com. IN A 1.1.1.2
bbs.baidu.com. IN A 1.1.1.1

AAAA:

name:FQDN
value: IPv6

          
PTR:

 name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2..in-addr.arpa.;
value:FQND
   例如:
    4.3.2.1.in-addr.arpa.  IN  PTR  www.baidu.com.                                    

CNAME:

   name:FQDN格式的别名;
value:FQDN格式的正式名字;
例如:
web.baidu.com. IN CNAME www.baidu.com.                              

注意:

 () TTL可以从全局继承;
() @表示当前区域的名称;
() 相邻的两条记录其name相同时,后面的可省略;
() 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;

二、安装DNS(bind)服务器

配置好网络和yum源

同步服务器时间

主机及角色分配:

安装软件包,备份配置文件

[root@master ~]# yum -y install bind-utils bind bind-devel
[root@master ~]# cp /etc/named.conf /etc/named.conf-bak

配置bind成为主服务器

编辑主配置文件:

 vim /etc/named.conf
options {
listen-on port { 192.168.0.11; 127.0.0.1; }; #或者any
// listen-on-v6 port 53 { ::1; }; #没有IPv6地址,所以先注释
directory "/var/named"; #指定资源记录目录位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes; #允许递归 dnssec-enable yes;
// dnssec-validation yes; /* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic";
};

编辑区域配置文件并配置正向区域文件

DNS zone命名规范:

.26个英文字母
2.0-9十个数字
.-(英文连词号)
.最多63字节长度
如果不符合以上条件bind不支持,如果想要强行使用,在master-view文件上配置 check-names ignore;
[root@master ~]# tail - /etc/named.rfc1912.zones  #添加一个区域
zone "panwenbin.com" IN { #引号中为自定义名称
type master; #配置类型为master
file "panwenbin.com.zone"; #指定文件名称,路径在directory指定的目录下
};
[root@master ~]# cd /var/named/
[root@master named]# vim panwenbin.com.zone
$TTL
$ORIGIN panwenbin.com.
@ IN SOA ns1.panwenbin.com. admin.panwenbin.com ( 1H
5M
7D
1D )
  IN NS ns1 #指定该名由哪个DNS服务器来进行解析
  IN NS ns2
  IN MX mx1
ns1 IN A 192.168.0.11
ns2 IN A 192.168.0.12
mx1 IN A 192.168.0.13
www IN A 192.168.0.11
www IN A 192.168.0.12
ftp IN CNAME www

检查语法

[root@master named]# named-checkconf  #检查全部
[root@master named]# named-checkzone "panwenbin.com" /var/named/panwenbin.com.zone #只检查指定zone
zone panwenbin.com/IN: loaded serial
OK

设置权限(当前用户为root,bind服务器用户为named,所以需要设置named用户对新建立的文件有读取权限)

[root@master named]# chown  :named panwenbin.com.zone
[root@master named]# chmod panwenbin.com.zone
[root@master named]# ll panwenbin.com.zone
-rw-r----- root named 11月 : panwenbin.com.zone

启动服务

[root@master named]# service named start #启动
Generating /etc/rndc.key: [确定]
启动 named: [确定]
[root@master named]# netstat -tunlp|grep :53 #检查端口
tcp 192.168.0.11: 0.0.0.0:* LISTEN /named
tcp 127.0.0.1: 0.0.0.0:* LISTEN /named
udp 192.168.0.11: 0.0.0.0:* /named
udp 127.0.0.1: 0.0.0.0:* /named
[root@master named]# rndc status #检查状态
version: 9.8.2rc1-RedHat-9.8.-0.62.rc1.el6_9.
CPUs found:
worker threads:
number of zones:
debug level:
xfers running:
xfers deferred:
soa queries in progress:
query logging is OFF
recursive clients: //
tcp clients: /
server is up and running

测试:

测试工具主要有三个dig host nslookup,具体用法有兴趣可以自己查找资料

[root@master named]# dig -t A www.panwenbin.com @192.168.0.11

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.62.rc1.el6_9. <<>> -t A www.panwenbin.com @192.168.0.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr aa rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: 2 #aa代表权威应答 ;; QUESTION SECTION:
;www.panwenbin.com. IN A ;; ANSWER SECTION:
www.panwenbin.com. IN A 192.168.0.11 #解析结果
www.panwenbin.com. IN A 192.168.0.12 ;; AUTHORITY SECTION:
panwenbin.com. IN NS ns2.panwenbin.com.
panwenbin.com. IN NS ns1.panwenbin.com. ;; ADDITIONAL SECTION:
ns1.panwenbin.com. IN A 192.168.0.11
ns2.panwenbin.com. IN A 192.168.0.12 ;; Query time: msec
;; SERVER: 192.168.0.11#(192.168.0.11)
;; WHEN: Tue Nov ::
;; MSG SIZE rcvd:

配置反向区域:

[root@master named]# vim  /etc/named.rfc1912.zones
[root@master named]# tail - /etc/named.rfc1912.zones #在区域配置文件最后添加如下四行
zone "0.168.192.in-addr.arpa" IN { #0.168.192表示解析网段不变的字段,这里是因为实验只解析192.168.0.0网段
type master;
file "192.168.0.zone";
};      
[root@master named]# vim 192.168..zone
[root@master named]# cat 192.168..zone
$TTL
$ORIGIN 0.168..in-addr.arpa.
@ IN SOA ns1.panwenbin.com. admin.panwenbin.com ( 1H
5M
7D
1D )
IN NS ns1.panwenbin.com.
IN NS ns2.panwenbin.com.
IN PTR ns1.panwenbin.com.
IN PTR www.panwenbin.com.
IN PTR mx1.panwenbin.com.
IN PTR www.panwenbin.com.
IN PTR ns2.panwenbin.com.

同样需要配置文件的权限

[root@master named]# chmod  192.168..zone
[root@master named]# chown :named 192.168..zone
[root@master named]# named-checkconf  #检查语法
[root@master named]# rndc reload #启动
server reload successful

日志可以查看/var/log/messages

[root@master named]# tail /var/log/messages
Nov :: localhost named[]: received control channel command 'reload'
Nov :: localhost named[]: loading configuration from '/etc/named.conf'
Nov :: localhost named[]: using default UDP/IPv4 port range: [, ]
Nov :: localhost named[]: using default UDP/IPv6 port range: [, ]
Nov :: localhost named[]: sizing zone task pool based on zones
Nov :: localhost named[]: Warning: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC empty zones
Nov :: localhost named[]: reloading configuration succeeded
Nov :: localhost named[]: zone 0.168..in-addr.arpa/IN: loaded serial
Nov :: localhost named[]: reloading zones succeeded
Nov :: localhost named[]: zone 0.168..in-addr.arpa/IN: sending notifies (serial )

测试是否可以解析:

[root@master named]#  host -t ptr 192.168.0.11 192.168.0.11
Using domain server:
Name: 192.168.0.11
Address: 192.168.0.11#
Aliases: 11.0.168.192.in-addr.arpa domain name pointer ns1.panwenbin.com.
11.0.168.192.in-addr.arpa domain name pointer www.panwenbin.com.
[root@master named]# dig -x 192.168.0.12 @192.168.0.11 ; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.62.rc1.el6_9. <<>> -x 192.168.0.12 @192.168.0.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr aa rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; QUESTION SECTION:
;12.0.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION:
12.0.168.192.in-addr.arpa. IN PTR ns2.panwenbin.com.
12.0.168.192.in-addr.arpa. IN PTR mx1.panwenbin.com.
12.0.168.192.in-addr.arpa. IN PTR www.panwenbin.com. ;; AUTHORITY SECTION:
0.168..in-addr.arpa. IN NS ns2.panwenbin.com.
0.168..in-addr.arpa. IN NS ns1.panwenbin.com. ;; ADDITIONAL SECTION:
ns1.panwenbin.com. IN A 192.168.0.11
ns2.panwenbin.com. IN A 192.168.0.12 ;; Query time: msec
;; SERVER: 192.168.0.11#(192.168.0.11)
;; WHEN: Tue Nov ::
;; MSG SIZE rcvd:

三、配置slave服务器及主从同步

检测是否可以和主服务器进行全量区域传送(默认是允许所有,不安全,后面会介绍如何配置只允许指定的主机可以传送)

[root@slave ~]#  dig -t axfr panwenbin.com @192.168.0.11

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.30.rc1.el6 <<>> -t axfr panwenbin.com @192.168.0.11
;; global options: +cmd
panwenbin.com. IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com.
panwenbin.com. IN NS ns1.panwenbin.com.
panwenbin.com. IN NS ns2.panwenbin.com.
panwenbin.com. IN MX mx1.panwenbin.com.
ftp.panwenbin.com. IN CNAME www.panwenbin.com.
mx1.panwenbin.com. IN A 192.168.0.13
ns1.panwenbin.com. IN A 192.168.0.11
ns2.panwenbin.com. IN A 192.168.0.12
www.panwenbin.com. IN A 192.168.0.11
www.panwenbin.com. IN A 192.168.0.12
panwenbin.com. IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com.
;; Query time: msec
;; SERVER: 192.168.0.11#(192.168.0.11)
;; WHEN: Tue Nov ::
;; XFR size: records (messages , bytes )

 安装软件包

[root@slave ~]# yum install bind-utils bind bind-devel -y

编辑主配置文件

options {
listen-on port { 192.168.0.12; 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes; // dnssec-enable yes;
dnssec-validation yes;
// dnssec-lookaside auto; /* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic";
};

编辑zone配置文件

[root@slave ~]# tail - /etc/named.rfc1912.zones
type slave; #类型为slave
masters { 192.168.0.11; }; #指定master的地址
file "slaves/panwenbin.com.zone"; #指定同步后文件的存放位置
};

启动服务

[root@slave ~]# service named start
Generating /etc/rndc.key: [确定]
启动 named: [确定]
[root@slave ~]# netstat -tunlp|grep

注意:

  要想主dns变更时通知从服务器,主dns上正向解析必须配置NS记录指定到从服务器,如当前主dns配置

slave服务器配置完成(仅对panwenbin.com),进行测试

[root@slave slaves]# ll /var/named/slaves  #查看主dnszone文件是否传输到slave服务器
总用量
-rw-r--r-- named named 11月 : panwenbin.com.zone

可以查看一下,比我们自己定义的貌似要详细

[root@slave slaves]# cat panwenbin.com.zone
$ORIGIN .
$TTL ; day
panwenbin.com IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. (
; serial
; refresh ( hour)
; retry ( minutes)
; expire ( week)
; minimum ( day)
)
NS ns1.panwenbin.com.
NS ns2.panwenbin.com.
MX mx1.panwenbin.com.
$ORIGIN panwenbin.com.
ftp CNAME www
mx1 A 192.168.0.13
ns1 A 192.168.0.11
ns2 A 192.168.0.12
www A 192.168.0.11
A 192.168.0.12

现在再测试master服务器变更,slave服务器是否同步

添加一条记录,删除一条记录

删除www对应的192.168.0.12的记录,添加一条pop3的记录,同时手动将序列号+1

重载服务,生产环境不建议restart

[root@master named]# named-checkconf
[root@master named]# rndc reload
server reload successful
[root@master named]# tail /var/log/messages
Nov :: localhost named[]: using default UDP/IPv6 port range: [, ]
Nov :: localhost named[]: sizing zone task pool based on zones
Nov :: localhost named[]: Warning: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC empty zones
Nov :: localhost named[]: reloading configuration succeeded
Nov :: localhost named[]: reloading zones succeeded
Nov :: localhost named[]: zone panwenbin.com/IN: loaded serial
Nov :: localhost named[]: zone panwenbin.com/IN: sending notifies (serial )
Nov :: localhost named[]: client 192.168.0.12#: query 'panwenbin.com/SOA/IN' denied
Nov :: localhost named[]: client 192.168.0.12#: transfer of 'panwenbin.com/IN': AXFR-style IXFR started #开始传输
Nov :: localhost named[]: client 192.168.0.12#: transfer of 'panwenbin.com/IN': AXFR-style IXFR ended #结束传输

在slave服务器上查看变更是否同步

[root@slave slaves]# cat  /var/named/slaves/panwenbin.com.zone
$ORIGIN .
$TTL ; day
panwenbin.com IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. (
; serial
; refresh ( hour)
; retry ( minutes)
; expire ( week)
; minimum ( day)
)
NS ns1.panwenbin.com.
NS ns2.panwenbin.com.
MX mx1.panwenbin.com.
$ORIGIN panwenbin.com.
ftp CNAME www
mx1 A 192.168.0.13
ns1 A 192.168.0.11
ns2 A 192.168.0.12
pop3 A 192.168.0.12 #pop3已经同步过来了
www A 192.168.0.11

 主从复制注意事项:

、应当为一台独立的名称服务器
、主服务器的区域解析库文件中必须有一条NS记录指向从服务器
、从服务器只需要定义区域,而无需提供解析库文件,解析库文件应当放置在/var/named/slaves目录下
、主从服务器时间应该同步
、bind程序应当保持一致,如果不一致,应当从高,主低
.要想主服务器变更后立即通知从服务器,应当手动将主区域解析库文件的序列号+

反向区域同步:

配置过程和正向类似,主dns上反向解析必须配置NS记录指定到从服务器地址

从服务器:

[root@localhost ~]# tail - /etc/named.rfc1912.zones  #添加一个新的zone
zone "0.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.0.11; };
file "slaves/192.168.0.zone";
};

重载

named-checkconf
rndc reload

主服务器变更记录,测试从服务器是否同步 ,此处忽略。每次做完变更后需要手动将序列号+1 !!!

四、子域授权

父服务器配置子域并授权

父服务器新增一个ops.panwenbin.com子域

[root@master named]# cat panwenbin.com.zone
$TTL
$ORIGIN panwenbin.com.
@ IN SOA ns1.panwenbin.com. admin.panwenbin.com ( 1H
5M
7D
1D )
IN NS ns1
IN NS ns2
IN MX mx1
ns1 IN A 192.168.0.11
ns2 IN A 192.168.0.12
mx1 IN A 192.168.0.13
www IN A 192.168.0.11
pop3 IN A 192.168.0.12
ftp IN CNAME www ops IN NS ns1.ops #新增ops.panwenbin.com的NS记录
ns1.opsIN A 192.168.0.13

子服务器:

安装软件包

yum install bind-utils bind bind-devel -y

配置自己为一台主服务器

vim /etc/named.conf  #修改options选项
options {
listen-on port { 192.168.0.13; 127.0.0.1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes; dnssec-enable yes;
// dnssec-validation yes;
// dnssec-lookaside auto; /* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic";
};

编辑zone配置文件,添加ops.panwenbin.com zone

[root@sub ~]# tail - /etc/named.rfc1912.zones
zone "ops.panwenbin.com" IN {
type master;
file "ops.panwenbin.com.zone";
};

编辑ops.panwenbin.com zone解析库文件

[root@sub ~]# cat /var/named/ops.panwenbin.com.zone
$TTL 1D
$ORIGIN ops.panwenbin.com.
@    IN SOA ns1.ops.panwenbin.com. admin.ops.panwenbin.com. (
      
      1H
      10M
      7D
     1D)    IN NS ns1
ns1 IN A 192.168.0.13
www IN A 192.168.0.100
* IN A 192.168.0.100

配置权限

[root@sub ~]# cd /var/named/
[root@sub named]# chmod ops.panwenbin.com.zone
[root@sub named]# chown :named ops.panwenbin.com.zone
[root@sub named]# named-checkconf
[root@sub named]# service named start
Generating /etc/rndc.key: [确定]
启动 named: [确定]

 测试当前区域 A 记录是否可以解析

[root@sub named]# dig -t A www.ops.panwenbin.com @192.168.0.13

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.30.rc1.el6 <<>> -t A www.ops.panwenbin.com @192.168.0.13
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr aa rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; QUESTION SECTION:
;www.ops.panwenbin.com. IN A ;; ANSWER SECTION:
www.ops.panwenbin.com. IN A 192.168.0.100 ;; AUTHORITY SECTION:
ops.panwenbin.com. IN NS ns1.ops.panwenbin.com. ;; ADDITIONAL SECTION:
ns1.ops.panwenbin.com. IN A 192.168.0.13 ;; Query time: msec
;; SERVER: 192.168.0.13#(192.168.0.13)
;; WHEN: Tue Nov ::
;; MSG SIZE rcvd:

测试当前区域 NS 记录是否可以解析

[root@sub named]# dig -t NS  ops.panwenbin.com @192.168.0.13

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.30.rc1.el6 <<>> -t NS ops.panwenbin.com @192.168.0.13
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr aa rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; QUESTION SECTION:
;ops.panwenbin.com. IN NS ;; ANSWER SECTION:
ops.panwenbin.com. IN NS ns1.ops.panwenbin.com. ;; ADDITIONAL SECTION:
ns1.ops.panwenbin.com. IN A 192.168.0.13 ;; Query time: msec
;; SERVER: 192.168.0.13#(192.168.0.13)
;; WHEN: Tue Nov ::
;; MSG SIZE rcvd:

测试在当前区域解析父域是否成功(失败)

测试在父域解析子域是否成功(失败)

root@master named]# dig -t A www.ops.panwenbin.com @192.168.0.11 +norecurse

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.62.rc1.el6_9. <<>> -t A www.ops.panwenbin.com @192.168.0.11 +norecurse
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id:
;; flags: qr aa ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; QUESTION SECTION:
;www.ops.panwenbin.com. IN A ;; AUTHORITY SECTION:
panwenbin.com. IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com. ;; Query time: msec
;; SERVER: 192.168.0.11#(192.168.0.11)
;; WHEN: Tue Nov ::

现在解决这个问题

关闭主域和子域

dnssec-enable no;
dnssec-validation no; 选项

[root@master named]# rndc reload #查询载入服务
server reload successful
[root@master named]# dig -t A www.ops.panwenbin.com @192.168.0.11 #再次测试 ; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.62.rc1.el6_9. <<>> -t A www.ops.panwenbin.com @192.168.0.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; QUESTION SECTION:
;www.ops.panwenbin.com. IN A ;; ANSWER SECTION:
www.ops.panwenbin.com. IN A 192.168.0.100 ;; AUTHORITY SECTION:
ops.panwenbin.com. IN NS ns1.ops.panwenbin.com. ;; ADDITIONAL SECTION:
ns1.ops.panwenbin.com. IN A 192.168.0.13 ;; Query time: msec
;; SERVER: 192.168.0.11#(192.168.0.11)
;; WHEN: Tue Nov ::
;; MSG SIZE rcvd:

父可以正常解析子域了

五、bind  acl:

  把一个或多个地址归并为一个合集,并通过一个统一的名称调用

语法:

  acl acl_name {
    ip;
    ip;
    net/prelen;
};

示例:

  acl mynet {

    192.168.0.1/;
};

bind有四个内置的acl:

  nome:没有一个主机
  any:任意主机
  local:本机
  localnet:本机IP同掩码运算后得到的网络地址 注意:只能先定义后使用。因此,其一般定义在配置文件中options的前面

访问控制的指令: 

    allow-query {}; 允许查询的主机,类似于白名单
  allow-transfer {};允许区域传送的主机,类似于白名单
  allow-recursion {}; 允许递归的主机
  allow-update {}; 允许更新区域数据库中的文件

添加一条ACL规则,只允许本机可以查询

rndc reload

使用外部地址无法解析(主服务器上)

[root@master named]# dig -t A www.panwenbin.com @192.168.0.11

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.62.rc1.el6_9. <<>> -t A www.panwenbin.com @192.168.0.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id:
;; flags: qr rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; QUESTION SECTION:
;www.panwenbin.com. IN A ;; Query time: msec
;; SERVER: 192.168.0.11#(192.168.0.11)
;; WHEN: Tue Nov ::
;; MSG SIZE rcvd:

使用1270.0.1解析正常

[root@master named]# dig -t A www.panwenbin.com @127.0.0.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.62.rc1.el6_9. <<>> -t A www.panwenbin.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:
;; flags: qr aa rd ra; QUERY: , ANSWER: , AUTHORITY: , ADDITIONAL: ;; QUESTION SECTION:
;www.panwenbin.com. IN A ;; ANSWER SECTION:
www.panwenbin.com. IN A 192.168.0.11 ;; AUTHORITY SECTION:
panwenbin.com. IN NS ns1.panwenbin.com.
panwenbin.com. IN NS ns2.panwenbin.com. ;; ADDITIONAL SECTION:
ns1.panwenbin.com. IN A 192.168.0.11
ns2.panwenbin.com. IN A 192.168.0.12 ;; Query time: msec
;; SERVER: 127.0.0.1#(127.0.0.1)
;; WHEN: Tue Nov ::
;; MSG SIZE rcvd:

注:ACL规则在named.conf中影响全局,在zone中,只影响当前zone

    

默认任意主机都可以进行区域传送(前面已经测试过了),这是不安全的,所以需要指定允许的主机

定义可以测试的主机:

[root@master named]# vim /etc/named.rfc1912.zones
zone "panwenbin.com" IN {
type master;
file "panwenbin.com.zone";
allow-transfer {192.168.0.12; }; #应当只定义需要同步的主机,如slave
};
[root@master named]# rndc reload
server reload successful

测试

192.168.0.12上

[root@slave slaves]# dig -t AXFR panwenbin.com @192.168.0.11

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.30.rc1.el6 <<>> -t AXFR panwenbin.com @192.168.0.11
;; global options: +cmd
panwenbin.com. IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com.
panwenbin.com. IN NS ns1.panwenbin.com.
panwenbin.com. IN NS ns2.panwenbin.com.
panwenbin.com. IN MX mx1.panwenbin.com.
ftp.panwenbin.com. IN CNAME www.panwenbin.com.
mx1.panwenbin.com. IN A 192.168.0.13
ns1.panwenbin.com. IN A 192.168.0.11
ns2.panwenbin.com. IN A 192.168.0.12
ops.panwenbin.com. IN NS ns1.ops.panwenbin.com.
ns1.ops.panwenbin.com. IN A 192.168.0.13
pop3.panwenbin.com. IN A 192.168.0.12
www.panwenbin.com. IN A 192.168.0.11
panwenbin.com. IN SOA ns1.panwenbin.com. admin.panwenbin.com.panwenbin.com.
;; Query time: msec
;; SERVER: 192.168.0.11#(192.168.0.11)
;; WHEN: Tue Nov ::
;; XFR size: records (messages , bytes )

192.168.0.13上

[root@sub named]#  dig -t AXFR panwenbin.com @192.168.0.11

; <<>> DiG 9.8.2rc1-RedHat-9.8.-0.30.rc1.el6 <<>> -t AXFR panwenbin.com @192.168.0.11
;; global options: +cmd
; Transfer failed.
allow-recursion 和 allow-update 由于篇幅这里就不演示了,有兴趣的可以自己查找相关资料,建议allow-recursion应当只允许当前网络内主机

六、 bind view 视图

DNS服务器有一个高级的功能,能够实现不同的用户访问同一个域名,把域名解析成不同的IP地址,使用户能够访问离他最近的服务器上的数据,这就是DNS服务器的视图功能。使用DNS服务器的视图功能可以增加网站的响应速度。例如,当我们网站的数据同步在两台web服务器上时,一台是电信服务器,一台是网通服务器,那么我们肯定希望全国访问我们网站的用户在打开网站的时候,能够自动实现,电信用户访问电信服务器,网通用户访问网通服务器。配置这种情况的前提是,web服务器必须要有一个电信的IP地址和一个网通的IP地址。DNS服务器的这种解析功能通常也被称之为智能解析。

DNS服务器的视图通常在配置文件中是使用view实现的。把要使用某些IP地址作单独访问的zone区域,统一放在一个命名的view段落中,并且在view中定义请求的IP地址或IP地址段,把IP地址写入match-clients选项中。如果像上面说的,区分电信和网通路线的话,那么可以使用两个acl访问控制列表写上电信或网通IP地址,定义电信网通路线,把acl名字写入view段落match-clients选项中。如下所示:

acl telecomip{ tele_IP; ... };
acl netcomip{ net_IP; ... };
view telecom {
match-clients { telecomip; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.telecom";
};
};
view netcom {
match-clients { netcomip; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.netcom";
};
};
view default {
match-clients { any; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.netcom";
};
};

需要注意的是:

()、如果使用了视图的功能,那么配置文件中的所有zone区域都要必须写在视图里面,如,配置文件里默认要配置的三个区域,根、127.0.0.1、1.0.0.127.in-addr.arpa都要写入视图。
()、在acl中定义IP地址,IP地址的写法可以是单个IP地址也可以是一个IP地址段加掩码,如:192.168.0.0/。
()、视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件,区域应该尽量写前面。
()、如果定义的若干个视图的IP地址不全的话,那么可以在最后定义一个默认视图,match-clients选项中的IP地址写上any,代表如果此次访问的IP地址上面没有一个能匹配到,则在此处归类。

rndc的使用

rndc是Remote Name Domain Controllerr的简写,它是一个远程管理bind的工具。在使用rndc管理bind前需要使用rndc生成一对密钥文件,一半保存于rndc的配置文件中,另一半保存于bind主配置文件中。rndc的配置文件为/etc/rndc.conf,在CentOS或者RHEL中,rndc的密钥保存在/etc/rndc.key文件中。rndc默认监听在953号端口,其实在bind9中rndc默认就是可以使用可,不需要配置密钥文件。

rndc常用命令:

status #查看DNS状态
reload #重新加载配置文件
reload zone_name #重新加载指定区域
reconfig #重读配置文件并加载新增的区域
querylog #关闭或开启查询日志
flush #清空服务器的缓存
flushname name #清空指定名称相关的缓存
trace #打开debug, debug有级别的概念,每执行一次提升一次级别
trace LEVEL #指定 debug 的级别, trace 表示关闭debug

使用rndc:

1、生成密钥文件

rndc-confgen  > /etc/rndc.conf
或者
rndc-confgen -r /dev/urandom > /etc/rndc.conf

生成的配置文件如下:

2、复制上面配置文件中下面一块被注释的区域至/etc/named.conf文件中,并把注释关闭。

 3、重新加载bind后就可以使用rndc管理bind了。

4、使用rndc重新加载bind的配置文件。

注意:如果在使用rndc时,出现如上警告时,可以删除/etc/rndc.key文件,或者重命名该文件。

5、DNS服务器的debug功能默认是关闭的,使用rndc trace可以开启该功能,执行一次该命令 debug 级别加一级,也可以在命令后面加一个数字作为参数,指定debug级别,当数字为0时,表示关闭debug功能。

开启debug:

关闭debug:

6、其它命令具体操作相差不大,不在此讨论。

DNS(bind)服务器安装和配置的更多相关文章

  1. Windows Server 2008 DNS服务器安装与配置

    Windows Server 2008 DNS服务器安装与配置本文关键字:Windows Server 2008 DNS.IIS 服务器安装与配置,DNS服务器本文来源:http://www.ip-t ...

  2. CentOS7.x的DNS服务的基础配置

    一.bind服务器安装 bind:开源.稳定.应用广泛的DNS服务.bind的软件包名bind,服务名称named. 查看是否安装bind, 安装bind包: rpm -qa bind yum -y ...

  3. 第7章 DNS & bind从基础到深入

    本文目录: 7.1 DNS必懂基础 7.1.1 域的分类 7.1.2 主机名.域名.FQDN 7.1.3 域的分层授权 7.1.4 DNS解析流程 7.2 DNS术语 7.2.1 递归查询和迭代查询 ...

  4. CentOS6.5下DNS服务器搭建与配置

    一.安装机器情况 192.168.1.70(dns 主节点) 192.168.1.71(dns 从节点) 二.主节点DNS的安装及配置 1. DNS服务器所需的软件包安装 yum -y install ...

  5. Linux DNS原理简介及配置

    Linux DNS原理简介及配置 DNS简介 DNS原理 域名解析的过程 资源记录 DNS BIND安装配置 一.简介 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访 ...

  6. linux服务器的所有服务web/dns/dhcp/vsftp-nfs-samba的配置

    nfs是sun开发的 network filesystem 网络文件系统,相当于win的映射网络驱动器, 可以将一台nfs服务器上的目录"挂载"到本地机器上的 一个 本地目录 一样 ...

  7. Linux:DNS主、从、缓存服务器配置、DNS同步加密TSIG配置、DNS分离解析配置

    DNS主服务器配置(正向解析.反向解析) 正向解析:根据主机名查找对应的IP地址.当用户访问一个域名时(不考虑hosts文件等因素),正常情况会向指定的DNS主机发送递归查询请求反向解析:根据IP地址 ...

  8. bind 安装 和配置(master/slave)

    一,软件安装 #sudo yum -y install bind 二,配置 # vi /etc/named.conf  // // named.conf // // Provided by Red H ...

  9. dns服务器正向解析配置

    DNS服务器的配置 一.安装软件 1.安装bind.bind-utils软件,起服务,设置开机启动. bind-utils软件用于提供nslookup功能,用于测试dns是否搭建成功,能够正常解析. ...

随机推荐

  1. 访问平安银行网站时出现证书问题 NET::ERR_CERT_SYMANTEC_LEGACY

    访问平安银行网站时出现证书问题 NET::ERR_CERT_SYMANTEC_LEGACY 查了资料说是 Google 取消了对 Symantec SSL 的信任,因为 Symantec 干了坏事1. ...

  2. python之路---03 整型 bool 字符串 for循环

    十三.整型(int) 基本操作: 1.+ - * / % // ** 2.  .bit_length() 计算整数在内存中占⽤的⼆进制码的⻓度 如: 十四.布尔值(bool) True  False ...

  3. 我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC

    大家好 ,  我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC . VMBC ,  全称是 Virtual Machine Base on C  . 有一种说法 ,  C 语言是 ...

  4. How to implement a windbg plugin

    How to implement a windbg plugin Define EXT_CLASS #include "lauxlib.h" class EXT_CLASS : p ...

  5. jp@gc - Stepping Thread Group配置解释描述

    测试环境 apache-jmeter-2.13   插件: https://jmeter-plugins.org/downloads/old/ http://pan.baidu.com/s/1gfC1 ...

  6. c语言中如何通过二级指针来操作二维数组

    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅 ...

  7. C# 多线程控制

    C# 多线程控制 通讯 和切换   一.多线程的概念  Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进 ...

  8. jquery-ajax实现文件批量下载

    直接看代码: <script type="text/javascript"> //全选控制 $(document).ready(function() { $(" ...

  9. WebService安全性的几种实现方法【身份识别】

     转:http://blog.csdn.net/yongping8204/article/details/8619577 WebService安全性的几种实现方法[身份识别] 标签: webservi ...

  10. 虚拟机中安装centOS及破解nuke的方法

    跟the foundry的工程师邮件交流,我的一个Nuke脚本在对方机器上执行有问题,确认对方是centOS之后我决定在自己机器上安装一个centOS来找一下问题所在.安装重点如下: 一: 一定要下载 ...