使用bind配置基础DNS服务

1.17 BIND

[[email protected]~]# 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
时间: 2024-10-20 21:36:22

使用bind配置基础DNS服务的相关文章

Linux配置智能DNS服务

一.在虚拟机svr11上构建dawai.com的权威DNS服务器1)安装bind.bind-chroot软件包[[email protected] ~]# yum -y ×××tall bind bind-chroot ------------安装配置dns相关的软件 2)配置地址库文件?配置地址库文件 /var/named/dawai.com.zone.a,提供以下解析记录[[email protected] ~]# vim /var/named/dawai.com.zone.a ------

基础DNS服务 轮训与泛域名解析

Top NSD SERVICES DAY02 案例1:搭建单区域DNS服务器 案例2:特殊DNS解析 案例3:配置DNS子域授权 案例4:搭建并测试缓存DNS 1 案例1:搭建单区域DNS服务器 1.1 问题 本例要求要求为DNS区域tedu.cn搭建一台DNS服务器,以便用户能通过域名的方式访问网站.测试阶段主要提供以下正向记录: svr7.tedu.cn ---> 192.168.4.7 pc207.tedu.cn ---> 192.168.4.207 www.tedu.cn --->

DNS服务之bind安装配置与应用

BIND是实现DNS服务的一套软件(官方站点:isc.org),其包含了服务器端程序named(由bind程序包提供,监听套接字:53/tcp.53/udp),和客户端工具host.nslookup.dig(由bind-utils程序包提供).为保证服务器的安全性,bind还提供了一种"沙箱机制",bind-chroot是将原文件系统的根"/"替换成"/var/named/chroot"来使用. 目前主流的bind程序依旧是9.x系列.使用yum

DNS基本原理及bind配置

dns基本原理 1.     当客户机Client需要访问某个域名时,会首先查看本地hosts文件查询相关记录,如果有则直接解析. 2.     如果在本机hosts文件中没有找到相关记录,则将请求发送至本地DNS域名服务器. 3.     本地DNS服务器接收到请求后会先查询本地缓存localCache如果缓存中有该项记录则直接返回结果. 4.     如果本地DNS服务器在Local Cache中未查询到相关信息则本地域名服务器就会直接把请求发送给根域名服务器. 5.     根服务器通过请

DNS服务的分析及主从配置

DNS服务 1.  什么是DNS         1.1       dns的含义                     dns:作为域名和IP地址相互映射的一个分布式数据库                     域名解析:通过主机名,得到该主机名对应的IP地址的过程叫做域名解析(主机名解析) 协议与端口号:TCP和UDP协议,端口号:53         1.2       dns的功能     1.2.1 主机名:也即域名,一个IP地址都可以都有个主机名     1.2.2 主机名到IP

Linux DNS服务系列之原理介绍及正反向解析配置

前言 我们在访问一个网站的时候,只要输入该网站的网址就会跳转到该网站页面,而实现这一过程就需要DNS服务器将域名解析为IP地址,进而实现数据通信.那么DNS服务器是如何工作的呢?本系列分为两部分,本文将详解DNS服务原理及正反向解析配置. DNS服务原理详解 DNS相关知识 DNS:Domain Name Service,域名解析服务 监听端口:udp/53,tcp/53 应用程序:bind 根域:. 一级域: 组织域:.com, .org, .net, .mil, .edu, .gov, .i

DNS服务搭建

※DNS基础知识: DNS(Domain Name Service):域名解析服务,应用层协议. BIND:实现DNS服务的一种软件. DNS监听的端口:53/TCP,53/UDP DNS查询类型:递归查询,迭代查询 DNS的两种解析方式:正向解析(FQDN ---> IP),反向解析(IP --->FQDN) 区域解析库:由众多资源记录组成: 资源记录(RR)类型: SOA:Start Of Authority,起始授权记录:一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录

DNS服务搭建(3)

★配置DNS转发 我之前配置的DNS服务只能解析我定义过的zone,而没有定义的zone是不能解析的,因此存在着很大的弊端.但是配置了DNS转发之后,就可以顺利解析互联网上了其他域名了,当然,解析此域名的前提是这个域名在互联网中确实存在并且正在使用,也就是说这个域名已经被某个DNS服务器解析了. 我们可以先试一下 [[email protected] named]#  dig @127.0.0.1 www.qq.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.

dns服务实践

测试环境 VMware 虚拟机环境, linux平台centos6.5 ,ip网段172.16.26.1-6 安装dns服务器提供dns服务 安装bind (named) 测试环境 centos6.5平台, ip地址172.16.26.3 /etc/named.conf  ==>主要配置文件 options { //listen-on port 53 { 127.0.0.1; }; 监听的端口和地址 , 只为自己服务,咋行呢? //listen-on-v6 port 53 { ::1; }; I