码迷,mamicode.com
首页 > 其他好文 > 详细

使用bind配置基础DNS服务

时间:2015-04-26 01:52:18      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:bind 配置

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服务

标签:bind 配置

原文地址:http://10042224.blog.51cto.com/10032224/1638259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!