热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用bind配置基础DNS服务

1.17BIND[root@localhost~]#yumlist|grep^bindbind.i68632:9.8.2-0.30.rc1.el6_6.1updatesbind

1.17 BIND

[root@localhost~]# yum list |grep "^bind"
bind.i686                                  32:9.8.2-0.30.rc1.el6_6.1     updates
bind-chroot.i686                          32:9.8.2-0.30.rc1.el6_6.1    updates
bind-devel.i686                           32:9.8.2-0.30.rc1.el6_6.1    updates
bind-dyndb-ldap.i686                       2.3-5.el6                     base   
bind-libs.i686                            32:9.8.2-0.30.rc1.el6_6.1    updates
bind-sdb.i686                             32:9.8.2-0.30.rc1.el6_6.1    updates
bind-to-tinydns.i686                      0.4.3-15.20140818gitdf0ddc3.el6
bind-utils.i686                           32:9.8.2-0.30.rc1.el6_6.1    updates
# bind-utils:DNS客户端工具,提供了常用的工具
# bind-libs:提供了程序运行所需库文件
# bind-devel:头文件和库文件,二次开发时需要用到
# bind-chroot:默认bind工作在根下,如果DNS被劫持将会造成安全风险,所以让它工作在假根之下,比如建立/var/named/chroot/目录,让这个目录称为假根,假根下建立以下named程序运行所需的所有文件:
   etc/name.conf
   etc/rdnc.conf
   sbin/named
   var/named
# 这样一来即使被入侵,也只是影响这一个小范围。但此工具的配置十分难以理解,使用新手配置时一定确保不要安装

所以安装bind,bind-libs,bind-utils这三个程序包。

[root ~]#rpm -ql bind-utils # bind-utils提供的测试工具
/usr/bin/dig
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz


注意:

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

(2) 必须要有根区域文件:named.ca

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

 

查看named工作目录:

[root ~]# ll/var/named/
total 28
drwxrwx--- 2named named 4096 Oct 15  2014 data
drwxrwx--- 2named named 4096 Oct 15  2014 dynamic
-rw-r----- 1root  named 2075 Apr 23  2014 named.ca # 根的地址
-rw-r----- 1root  named  152 Dec 15 2009 named.empty
-rw-r----- 1root  named  152 Jun 21 2007 named.localhost # 回环
-rw-r----- 1root  named  168 Dec 15 2009 named.loopback # 反向回环
drwxrwx--- 2named named 4096 Oct 15  2014 slaves


服务脚本:/etc/rc.d/init.d/named

解析库文件:/var/named/ZONE_NAME.ZONE

 

1.17.1 配置文件

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

rndc:远程管理服务器,包括清理缓存、重新载入配置文件、查看当前的解析状态等等功能。rndc默认只工作在本地。默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能。监听在tcp935端口。rndc.key就是rndc连接named进程时,双方用到的域共享密钥。

打开主配置文件:

[root ~]#vim /etc/named.conf
# 每行都以;结尾;花括号里面的两端必须要有空格,并且里面的内容要以;结尾;注释行使用的不再是#,而是//
# 还可以实现多行注释:在一行的开头使用/*,在要注释多行的最后一行的行尾加上*/,就OK
//
//named.conf
//
//Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
//server as a caching only nameserver (as a localhost DNS resolver only).
//
//See /usr/share/doc/bind*/sample/ for example named configuration files.
//
 
options { # 全局配置段
    listen-onport 53 { 127.0.0.1; }; # 表示监听本地,无法给其他主机提供服务,将此行注释或删掉就行。也可以写成{ 172.16.11.1; 127.0.0.1; }将自己的地址加入其中
    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     { localhost; }; # 仅允许本地查询,将其改为any或者注释此行
    recursion yes; # 允许给对方递归
 
    dnssec-enable yes; # dnssec机制,初学者还是关掉吧
    dnssec-validation yes;
    dnssec-lookaside auto;
 
    /* Path to ISCDLV key */
    bindkeys-file"/etc/named.iscdlv.key";
 
    managed-keys-directory"/var/named/dynamic";
};
# dnssec机制到此为止,options里面必备的只有directory这一项,其他的都可以删除
logging { # 日志配置段
        channeldefault_debug {
                file"data/named.run";
                severitydynamic;
        };
};
 
zone "."IN { # 每一个zone用来定义一个区域
    type hint;
    file "named.ca";# 用file来指明区域文件的名字
};
 
include "/etc/named.rfc1912.zones"; # 除了根区域的定义,其他的区域都在此文件中定义
include "/etc/named.root.key";

事实上,named默认不会为任何主机提供服务。如果想要给客户端提供服务,只需在主配置文件中加入本机上可以对外访问的IP即可。编辑配置文件前先备份

考虑到DNS的安全,近些年流行使用一种dnssec的机制,要求对DNS服务解析时,每一个解析报文都要加签名(做校验)。虽然使用起来比较麻烦,但可以防止污染DNS类的攻击。但是对于初学者来讲,dnssec配置起来十分麻烦。为了测试顺利,建议关闭此功能。关闭的方法很简单,在主配置文件中注释掉即可。

 

1.17.2 缓存名称服务器的配置

缓存服务器的配置相当的简单,只需监听外部地址并将named服务启动即可。

 

1.17.3 主DNS服务器的配置

只需在缓存服务器的基础之上加入zone的定义就OK

 

1.17.3.1 正向区域解析

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

zone"ZONE_NAME" IN {
type{master|slave|hint|forward};
file"ZONE_NAME.zone";
};

打开named.rfc1912.zones配置文件:

[root ~]#vim /etc/named.rfc1912.zones
//
 
zone"localhost.localdomain" IN {
    type master;
    file "named.localhost";
    allow-update { none; };
};
 
zone"localhost" IN { # 用来定义域名,也就是那个可以用@代替的域名
    type master; # 主DNS服务器
    file "named.localhost"; # 域名对应的文件,这是相对路径,相对于主配置文件中定义的工作目录
    allow-update { none; };
};
 
zone"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"IN {
    type master;
    file "named.loopback";
    allow-update { none; };
};
 
zone"1.0.0.127.in-addr.arpa" IN {
    type master;
    file "named.loopback";
    allow-update { none; };
};
 
zone"0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update { none; };
};
 
zone"magedu.com" IN { # 新增一个域
    type master;
    file "magedu.com.zone";
};


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

定义整个域内有多少主机,并且其他人如何访问。

 

a.编辑区域解析文件:

[root ~]#vim /var/named/magedu.com.zone
$TTL 86400
@   IN SOA     ns1.magedu.com  nsadmin.magedu.com (
                2015042301
                2H
                10M
                1W
                1D)
    IN NS      ns1
    IN NS      ns2
    IN MX 10   mx1
    IN MX 20   mx2
ns1 IN  A      172.16.45.10
ns2 IN  A      172.16.45.1
mx1 IN  A      172.16.45.2
mx2 IN  A      172.16.45.3
www IN  A      172.16.42.10
ftp IN  CNAME  www
top IN  A      172.16.42.10

b.检查语法:

[root ~]#named-checkconf # 主配置文件语法
[root ~]#named-checkzone magedu.com /var/named/magedu.com.zone # 区域解析库语法
[root ~]#service named configtest # 以上两个命令这一个就能搞定

由于named进程是由named用户运行的,也就是说named进程访问资源的权限取决于named用户的权限。而/var/named/目录及目录下的所有文件都是以root为属主,named为属组,其他用户没有任何权限。为了安全起见,named用户只有读而没有写权限。

[root ~]# ll/var/named
total 32
drwxrwx---.2 named named 4096 Apr 22 02:21 data
drwxrwx---.2 named named 4096 Apr 22 04:22 dynamic
-rw-r--r--.1 root  root   314 Apr 22 16:16 magedu.com.zone
-rw-r-----.1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----.1 root  named  152 Dec 15 2009 named.empty
-rw-r-----.1 root  named  152 Jun 21 2007 named.localhost
-rw-r-----.1 root  named  168 Dec 15 2009 named.loopback
drwxrwx---.2 named named 4096 Oct 15  2014 slaves

c.因此需要将magedu.com.zone文件的权限改为与其他文件相同

[root ~]#chmod 640 /var/named/magedu.com.zone
[root ~]#chown :named /var/named/magedu.com.zone
[root ~]# ll/var/named/magedu.com.zone
-rw-r-----.1 root named 314 Apr 22 16:16 /var/named/magedu.com.zone

d.重启服务并查看

[root ~]#service named restart
[root ~]#rndc status
version:9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
CPUs found:1
workerthreads: 1
number ofzones: 20
debug level:0
xfersrunning: 0
xfersdeferred: 0
soa queriesin progress: 0
querylogging is OFF
recursiveclients: 0/0/1000
tcp clients:0/100
server is upand running

修改了区域解析库文件后,可使用service named reload或者使用rndc reload重新读取配置文件。注意:服务不能随意重启。

 

1.17.3.2 反向区域解析

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

 

反向和正向的配置大同小异,也是两个步骤:

1、定义区域

zone"ZONE_NAME" IN {
type{master|slave|forward};
file "网络地址.zone"
};

注意:对于根域来讲,我们很少对它做反向;文件名注意不要重名,可以在网络地址后面加上主机地址以作区分。

 

编辑配置文件:

[root ~]#vim /etc/named.rfc1912.zones
zone"45.16.172.in-addr.arpa." IN { # 新增反向区域
    type master;
    file "172.16.45.1.zone";
};

2、区域解析库文件

注意:不需要MX和A,以及AAAA记录;以PTR记录为主;

 

a.定义反向区域解析库文件:

[root ~]#vim /var/named/172.16.45.1.zone
$TTL 86400
@   IN SOA     ns1.magedu.comnsadmin.magedu.com (
                2015042301
                2H
                10M
                1W
                1D)
    IN NS      ns1.magedu.com.
    IN NS      ns2.magedu.com.
10  IN PTR     ns1.magedu.com.
    IN PTR     www.magedu.com.
    IN PTR     top.magedu.com.
1   IN PTR     ns2.magedu.com.
2   IN PTR     mx1.magedu.com.
3   IN PTR     mx3.magedu.com.
4   IN PTR     www.magedu.com.

c.检查语法错误:

[root ~]#service named configtest

c.改属主和权限:

[root ~]#chmod 640 /var/named/172.16.45.1.zone
[root ~]#chown :named /var/named/172.16.45.1.zone

d.重新加载并查看状态:

[root ~]#service named reload
[root ~]#rndc status
version:9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
CPUs found:1
workerthreads: 1
number ofzones: 21
debug level:0
xfersrunning: 0
xfersdeferred: 0
soa queriesin progress: 0
querylogging is OFF
recursiveclients: 0/0/1000
tcp clients:0/100
server is upand running

1.17.3.3 开启泛域名解析

开启的方法很简单,在正向解析库文件的最后加入一行即可:

[root ~]#vim /var/named/magedu.com.zone
*   IN CNAME   www # 这两行任选一行
*   IN A       172.16.42.10

1.17.4 主从复制

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

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

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

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

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

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

8、正向和反向是相对独立的,所以可以用四台服务器,两台做正向的主从,另外两台做反向的主从。

9、一个主服务器可以有多个从,从也可以作为其他从的主。

   10、从服务器配置起来更简单,因为它的解析库文件是同步而来,所以不用配置,只要定义域就行。

如果将DNS开放给其他用户来做全量区域传送的话,那么公司或者组织内部的主机信息、拓扑结构就会遭到泄露,所以我们是不允许其他用户来做增量传送的。

 

定义从区域的方法:

zone"ZONE_NAME" IN {
   type slave;
   masters { MASTER_IP; };
   file "slaves/ZONE_NAME.zone";
};

配置从服务器:当前环境为从服务器

a.首先进行测试:

[root ~]#dig -t axfrmagedu.com @172.16.45.10
 
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -taxfr magedu.com @172.16.45.10
;; globaloptions: +cmd
magedu.com.     86400 IN SOA ns1.magedu.com.nsadmin.magedu.com.magedu.com. 2015042301 7200 600 604800 86400
magedu.com.     86400 IN A  172.16.45.10
magedu.com.     86400 IN NS ns1.magedu.com.
magedu.com.     86400 IN NS ns2.magedu.com.
magedu.com.     86400 IN MX 10mx1.magedu.com.
magedu.com.     86400 IN MX 20mx2.magedu.com.
*.magedu.com.      86400 IN A  172.16.45.10
ftp.magedu.com.    86400 IN CNAME www.magedu.com.
mx1.magedu.com.    86400 IN A  172.16.45.2
mx2.magedu.com.    86400 IN A  172.16.45.3
ns1.magedu.com.    86400 IN A  172.16.45.10
ns2.magedu.com.    86400 IN A  172.16.45.1
top.magedu.com.    86400 IN A  172.16.45.10
www.magedu.com.    86400 IN A  172.16.45.10
www.magedu.com.    86400 IN A  172.16.45.4
magedu.com.     86400 IN SOA ns1.magedu.com.nsadmin.magedu.com.magedu.com. 2015042301 7200 600 604800 86400
;; Querytime: 2 msec
;; SERVER:172.16.45.10#53(172.16.45.10)
;; WHEN: FriApr 24 21:50:27 2015
;; XFR size:16 records (messages 1, bytes 367)

能出现这些信息证明区域传送应该不会有问题

b.接下来安装bind

c.编辑配置文件,和主服务器一样

[root ~]# vim /etc/named.conf
options {
//  listen-on port 53 { 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";
};
...

d.查看缓存服务器是否配置完成

[root ~]# service named start
[root ~]# ss -tunpl|grep 53

e.修改配置文件,增加域

[root ~]# vim /etc/named.rfc1912.zones
zone"magedu.com" IN {
    type slave;
    masters { 172.16.45.10; };
    file "slaves/magedu.com.zone"; # 此目录named用户才能读写
};

f.重新载入配置文件,在这之前请确定主服务器中的正向解析库文件中定义了ns2,并将地址指向了从服务器。

[root ~]# rndc reload
[root ~]# tail /var/log/messages
Apr 2422:31:48 localhost named[3679]: zone1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN:loaded serial 0
Apr 2422:31:48 localhost named[3679]: zone localhost.localdomain/IN: loaded serial 0
Apr 2422:31:48 localhost named[3679]: zone localhost/IN: loaded serial 0
Apr 2422:31:48 localhost named[3679]: managed-keys-zone ./IN: loaded serial 16
Apr 2422:31:48 localhost named[3679]: running
Apr 2422:31:48 localhost named[3679]: zone magedu.com/IN: Transfer started.
Apr 2422:31:48 localhost named[3679]: transfer of ‘magedu.com/IN‘ from172.16.45.10#53: connected using 172.16.45.1#37852
Apr 2422:31:48 localhost named[3679]: zone magedu.com/IN: transferred serial2015042301
Apr 2422:31:48 localhost named[3679]: transfer of ‘magedu.com/IN‘ from172.16.45.10#53: Transfer completed: 1 messages, 16 records, 367 bytes, 0.002secs (183500 bytes/sec)
Apr 2422:31:48 localhost named[3679]: zone magedu.com/IN: sending notifies (serial2015042301)

g.全量传送没问题,可以测试增量传送了:将主服务器的正向解析库文件增加或删除一行,然后序列号手动+1,重读配置文件,查看日志。就能知道增量传送是否完成。以下为主服务器环境:

[rootnamed]# tail /var/log/messages
Apr 2422:40:37 localhost named[11051]: using default UDP/IPv4 port range: [1024,65535]
Apr 2422:40:37 localhost named[11051]: using default UDP/IPv6 port range: [1024,65535]
Apr 2422:40:37 localhost named[11051]: sizing zone task pool based on 8 zones
Apr 2422:40:37 localhost named[11051]: Warning:‘empty-zones-enable/disable-empty-zone‘ not set: disabling RFC 1918 empty zones
Apr 2422:40:37 localhost named[11051]: reloading configuration succeeded
Apr 2422:40:37 localhost named[11051]: reloading zones succeeded
Apr 2422:40:37 localhost named[11051]: zone magedu.com/IN: loaded serial 2015042302
Apr 2422:40:37 localhost named[11051]: zone magedu.com/IN: sending notifies (serial2015042302)
Apr 2422:40:37 localhost named[11051]: client 172.16.45.1#46292: transfer of‘magedu.com/IN‘: AXFR-style IXFR started
Apr 2422:40:37 localhost named[11051]: client 172.16.45.1#46292: transfer of‘magedu.com/IN‘: AXFR-style IXFR ended


使用bind配置基础DNS服务


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
手机用户2502883075
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有