实验环境:RHEL5.8 32Bit

Bind97服务安装以及配置

·如何在一台Linux主机上安装配置一个DNS Server并让其可以真正的工作起来

    假设我们在互联网上已经注册了一个域叫做zhubo.com,并且它所对应的网段是192.168.0.0/24,我们开始在我们这个域内规划部署:

    -> 192.168.0.1为ns server的地址

    -> 192.168.0.1和192.168.0.3为www server的地址,ftp server在www server上,所以它是www server的别名

    -> 192.168.0.2为mail server的地址

    互联网上目前来讲使用最多的DNS服务器软件叫做Bind。

·Bind(Berkeley internet name domain)

    但是目前来讲,这么一个软件已经不再是伯克利大学来进行维护了,而是另外一个叫做ISC的组织来进行维护的。

·ISC(Internet System Consortium:互联网系统协会)

    官方站点:www.isc.org

   Bind97服务安装以及配置_第1张图片

    由ISC维护的软件还有另外一个叫做DHCP服务相关的软件,官方站点上面提供的是Bind软件的源码包,我们要想安装还得先编译,比较麻烦,好在红帽5.8Linux上面给我们提供了编译好的Bind的rpm包,使得我们可以直接使用rpm包的方式安装Bind。

·如何使用rpm包的方式安装Bind

    一般情况下,我们在安装红帽5.8的时候,系统在安装过程中都会帮助我们安装好Bind,我们可以使用yum list all | grep "^bind"命令来查看所有以bind开头的相关的rpm包:

    Bind97服务安装以及配置_第2张图片

    如上图所示,bind和bind97是两种不同的bind软件包,rpm包有所谓的主包和子包之分,主包名称就是bind.XXX或者bind97.XXX这类rpm包,而子包名称就是bind-XXX.XXX或者bind97-XXX.XXX这类rpm包,而bind的主包就是DNS服务端的安装包,由上图我们可以发现bind-libs.i386和bind-utils.i386这两个rpm包,已经被安装了,这是在我们安装红帽5.8操作系统的时候,系统给我们默认安装的两个包,之所以系统会自动给我们安装这两个是因为bind-utils这个rpm包它提供很多的DNS的客户端工具,我们可以使用rpm -ql bind-util命令来查看我们装了这个rpm包之后,它给我们提供了哪些工具:

    Bind97服务安装以及配置_第3张图片

    而bind-libs.i386这个rpm包给我们提供的是一些库文件,DNS的客户端工具都会依赖这些库文件工作,所以这就是为什么我们在安装操作系统的时候它会默认帮助我们安装上这两个rpm包的原因,bind.XXX和bind-XXX的rpm包,指的是bind93系列的rpm包,但是我们现在要安装bind97系列的rpm包,所以必须把系统默认安装的这两个rpm包卸载掉,我们可以使用rpm -e命令卸载那两个被默认安装的rpm包:

    Bind97服务安装以及配置_第4张图片

    接下来我们就可以安装bind97的客户端工具和库文件的rpm包了:

    wKioL1h8lE3xtKEiAAAG-PSPhJA072.png

    而bind97.i386这个包就是DNS服务端的安装包,所以如果想要使用DNS的服务端,就得安装这个软件包:

    wKiom1h8lUCj1cTgAAAF97qhBeM050.png

    在红帽6上,bind的所有rpm包都叫做bind,而且版本也更新,红帽5.8只是为了区分这两个系列的bind的rpm包,才如此区别名称的,之所以要区分是因为红帽5.5上bind的跨度太大了,刚开始bind93是比较主流的版本,但是到今天为止bind97已经是比较主流的版本了,但是它又不得不提供原有版本的升级版,所以才造成了在红帽5.8上,新旧两个bind版本共存的原因,bind这个软件它的主配置文件是/etc/named.conf:

    wKiom1h8lx2zJhs0AAAJj2TMhuI784.png

   在该文件中主要配置bind的工作属性还有区域的定义,除此之外还有一个密钥文件叫做/etc/rndc.key:

    Bind97服务安装以及配置_第5张图片    

·rndc(remote name domain controller:远程名称服务控制器)

    rndc是一个能够让我们远程控制DNS服务进程的工具,既然是远程控制,那么就意味着我们的DNS服务器可以接受远程控制,所以就一定会涉及到安全性,故rndc.key这个文件是rndc工具能够远程工作的密钥文件,在红帽上叫做rndc.key,但是bind自身所使用的rndc的密钥文件叫做/etc/rndc.conf,但是这两个文件并不完全一致,rndc.key文件里面放的只是密钥,而rndc.conf文件里面还有一些额外的配置信息,一般来讲这两个文件需要一个就可以正常工作了。


      bind还得提供区域文件,但是区域文件默认情况下是管理员自己创建的,区域文件一般都位于/var/named目录下:

    wKiom1h8mfbhV8lOAAAQCHVj-ZU041.png

    并且文件的名称可以自行定义,区域文件为DNS服务器提供解析服务,除此之外bind97安装完成之后,它还会生成一个服务控制脚本,脚本的名称就叫做named,并且DNS服务端进程也叫做named,该脚本位于/etc/rc.d/init.d目录下:

    wKiom1h8ms6xYUd7AAAMffKOzzw589.png

    安装完成bind97软件包之后,我们就可以使用该服务脚本了,该脚本可以接受的参数如下:

    wKiom1h8myfTjcXLAAATIrthmeA472.png

    bind软件包的可执行二进制程序的名字叫做named而不叫做bind,因而DNS的服务端进程叫做名称进程,而bind只不过是软件包的名字,而不是可执行二进制程序的名字。

    bind97系列的rpm包还有一个子包叫做bind97-devel,使用yum info命令可以查看该rpm包的详细信息:

    Bind97服务安装以及配置_第6张图片

    该rpm包在我们对bind97软件进行二次开发的时候才会用到,所以一般情况下我们无需安装该rpm包,除非我们需要创建开发环境的时候才有可能会用到。

    默认情况下,bind软件是运行在我们系统的真正的根目录下面的,但是如果一旦有人通过我们系统的漏洞劫持named进程,那么就意味着运行named进程的用户的权限都会被***者获取,通常情况下运行named这个进程的用户和用户组分别是系统用户named和系统组named,虽然系统用户和系统组无法登录系统,但是named进程一旦被劫持后,系统用户和系统组能够到达的位置,***者都可以到达,它们所能够查看的文件***者也能够查看,在Linux上面,每一个普通用户所能够访问的文件是全局的,只要是我们根目录下的文件,普通用户都可以访问到,因此***者就可以通过这样一个进程来访问到我们系统上面许许多多的文件,这是非常不安全的,所以为了避免以上这种情况的出现,我们可以将named进程运行的环境搬到一个假的根目录下面去,可以通过bind97的另外一个子包来实现,这个子包叫做bind97-chroot:

    Bind97服务安装以及配置_第7张图片

    故bind97-chroot是一种用来加强DNS服务器安全性的手段,很多服务器都可以通过chroot这种手段来加强服务器的安全性,但是这个软件包提供的功能配置起来非常的复杂,在这里我们不需要安装它,所以DNS服务端的软件包,我们只需要安装bind97.i386一个就可以了,除了bind97之外,我们偶尔还会使用到caching-nameserver这个包,使用yum list all命令即可查看:

    wKiom1h9hz3g2HGNAAATlufx6u4017.png

    使用yum info命令可以查看该软件包的详细信息:

    Bind97服务安装以及配置_第8张图片

    该软件包可以使得我们的DNS服务器立马变成一个缓存服务器,它还给我们提供了很多的配置文件,这些配置文件结合bind97可以立即使得我们的DNS服务器变为一个缓存DNS服务器,而且该软件包提供的内容也是符合RFC1035规范的,所以很多时候我们借助于caching-nameserver来实现快速构建DNS缓存服务器,通常在配置一个主DNS服务器的时候,首先得把服务器配置成缓存DNS服务器,然后再将缓存服务器配置成DNS服务器,再通过指定master和slave来指定主DNS和从DNS服务器,但是从服务器一定是起到辅助主DNS服务器的作用的,并且是先有主服务器后又从服务器,我们在初学DNS的时候不要安装caching-nameserver,初学的时候我们要自己完全手动的配置我们自己的所有DNS服务器。

·开始配置DNS服务器

    1,首先使用yum install命令去安装bind97

        Bind97服务安装以及配置_第9张图片

        安装完成之后,我们使用rpm -ql命令查看安装该软件包之后都生成了哪些文件,生成的文件很多,但是对我们而言核心的文件很少:

[root@www ~]# rpm -ql bind97
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf #主配置文件,有这个配置文件,就相当于已经安装了caching-nameserver,这是bind97的特性,但是在红帽6上,可能并非如此
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rc.d/init.d/named #named服务的控制脚本
/etc/rndc.conf #rndc的配置文件
/etc/rndc.key #rndc的密钥文件
/etc/sysconfig/named #named服务脚本的配置文件
/usr/lib/bind
/usr/sbin/arpaname
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-dsfromkey
/usr/sbin/dnssec-keyfromlabel
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-revoke
/usr/sbin/dnssec-settime
/usr/sbin/dnssec-signzone
/usr/sbin/genrandom
/usr/sbin/isc-hmac-fixup
/usr/sbin/lwresd
/usr/sbin/named #named主程序
/usr/sbin/named-checkconf #检查主配置文件语法错误的二进制程序
/usr/sbin/named-checkzone #检查区域文件语法错误的二进制程序
/usr/sbin/named-compilezone #该命令可以将区域文件编译成为其它的格式
/usr/sbin/named-journalprint
/usr/sbin/nsec3hash
/usr/sbin/rndc #DNS服务器的远程控制命令
/usr/sbin/rndc-confgen #该命令用于生成/etc/rndc.conf文件
/usr/share/doc/bind97-9.7.0
/usr/share/doc/bind97-9.7.0/CHANGES
/usr/share/doc/bind97-9.7.0/COPYRIGHT
/usr/share/doc/bind97-9.7.0/Copyright
/usr/share/doc/bind97-9.7.0/README
/usr/share/doc/bind97-9.7.0/arm
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM-book.xml
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch01.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch02.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch03.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch04.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch05.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch06.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch07.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch08.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch09.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.ch10.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.html
/usr/share/doc/bind97-9.7.0/arm/Bv9ARM.pdf
/usr/share/doc/bind97-9.7.0/arm/README-SGML
/usr/share/doc/bind97-9.7.0/arm/dnssec.xml
/usr/share/doc/bind97-9.7.0/arm/isc-logo.eps
/usr/share/doc/bind97-9.7.0/arm/isc-logo.pdf
/usr/share/doc/bind97-9.7.0/arm/latex-fixup.pl
/usr/share/doc/bind97-9.7.0/arm/libdns.xml
/usr/share/doc/bind97-9.7.0/arm/man.arpaname.html
/usr/share/doc/bind97-9.7.0/arm/man.ddns-confgen.html
/usr/share/doc/bind97-9.7.0/arm/man.dig.html
/usr/share/doc/bind97-9.7.0/arm/man.dnssec-dsfromkey.html
/usr/share/doc/bind97-9.7.0/arm/man.dnssec-keyfromlabel.html
/usr/share/doc/bind97-9.7.0/arm/man.dnssec-keygen.html
/usr/share/doc/bind97-9.7.0/arm/man.dnssec-revoke.html
/usr/share/doc/bind97-9.7.0/arm/man.dnssec-settime.html
/usr/share/doc/bind97-9.7.0/arm/man.dnssec-signzone.html
/usr/share/doc/bind97-9.7.0/arm/man.genrandom.html
/usr/share/doc/bind97-9.7.0/arm/man.host.html
/usr/share/doc/bind97-9.7.0/arm/man.isc-hmac-fixup.html
/usr/share/doc/bind97-9.7.0/arm/man.named-checkconf.html
/usr/share/doc/bind97-9.7.0/arm/man.named-checkzone.html
/usr/share/doc/bind97-9.7.0/arm/man.named-journalprint.html
/usr/share/doc/bind97-9.7.0/arm/man.named.html
/usr/share/doc/bind97-9.7.0/arm/man.nsec3hash.html
/usr/share/doc/bind97-9.7.0/arm/man.nsupdate.html
/usr/share/doc/bind97-9.7.0/arm/man.rndc-confgen.html
/usr/share/doc/bind97-9.7.0/arm/man.rndc.conf.html
/usr/share/doc/bind97-9.7.0/arm/man.rndc.html
/usr/share/doc/bind97-9.7.0/arm/managed-keys.xml
/usr/share/doc/bind97-9.7.0/arm/pkcs11.xml
/usr/share/doc/bind97-9.7.0/draft
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-6man-text-addr-representation-01.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-behave-dns64-01.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-axfr-clarify-13.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-dns-tcp-requirements-02.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-dnssec-bis-updates-09.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-dnssec-gost-06.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-ecc-key-07.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-interop3597-02.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-rfc2671bis-edns0-02.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-rfc2672bis-dname-18.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-rfc3597-bis-00.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsext-tsig-md5-deprecated-03.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsop-bad-dns-res-05.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsop-default-local-zones-09.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsop-inaddr-required-07.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsop-name-server-management-reqs-02.txt
/usr/share/doc/bind97-9.7.0/draft/draft-ietf-dnsop-respsize-06.txt
/usr/share/doc/bind97-9.7.0/draft/draft-kato-dnsop-local-zones-00.txt
/usr/share/doc/bind97-9.7.0/draft/update
/usr/share/doc/bind97-9.7.0/misc
/usr/share/doc/bind97-9.7.0/misc/dnssec
/usr/share/doc/bind97-9.7.0/misc/format-options.pl
/usr/share/doc/bind97-9.7.0/misc/ipv6
/usr/share/doc/bind97-9.7.0/misc/migration
/usr/share/doc/bind97-9.7.0/misc/migration-4to9
/usr/share/doc/bind97-9.7.0/misc/options
/usr/share/doc/bind97-9.7.0/misc/rfc-compliance
/usr/share/doc/bind97-9.7.0/misc/roadmap
/usr/share/doc/bind97-9.7.0/misc/sdb
/usr/share/doc/bind97-9.7.0/misc/sort-options.pl
/usr/share/doc/bind97-9.7.0/named.conf.default
/usr/share/doc/bind97-9.7.0/rfc
/usr/share/doc/bind97-9.7.0/rfc/index.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1032.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1033.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1034.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1035.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1101.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1122.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1123.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1183.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1348.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1535.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1536.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1537.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1591.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1611.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1612.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1706.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1712.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1750.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1876.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1886.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1912.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1982.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1995.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc1996.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2052.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2104.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2119.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2133.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2136.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2137.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2163.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2168.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2181.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2230.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2308.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2317.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2373.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2374.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2375.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2418.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2535.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2536.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2537.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2538.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2539.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2540.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2541.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2553.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2671.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2672.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2673.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2782.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2825.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2826.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2845.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2874.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2915.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2929.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2930.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc2931.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3007.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3008.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3071.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3090.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3110.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3123.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3152.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3197.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3225.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3226.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3258.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3363.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3364.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3425.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3445.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3467.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3490.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3491.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3492.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3493.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3513.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3596.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3597.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3645.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3655.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3658.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3755.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3757.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3833.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3845.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc3901.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4025.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4033.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4034.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4035.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4074.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4159.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4193.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4255.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4294.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4339.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4343.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4367.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4398.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4408.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4431.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4470.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4471.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4472.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4509.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4634.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4635.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4641.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4648.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4697.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4701.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4892.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4955.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc4956.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5001.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5011.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5155.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5205.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5452.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5507.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5625.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc5702.txt.gz
/usr/share/doc/bind97-9.7.0/rfc/rfc952.txt.gz
/usr/share/doc/bind97-9.7.0/rfc1912.txt
/usr/share/doc/bind97-9.7.0/sample
/usr/share/doc/bind97-9.7.0/sample/etc
/usr/share/doc/bind97-9.7.0/sample/etc/named.conf
/usr/share/doc/bind97-9.7.0/sample/etc/named.rfc1912.zones
/usr/share/doc/bind97-9.7.0/sample/var
/usr/share/doc/bind97-9.7.0/sample/var/named
/usr/share/doc/bind97-9.7.0/sample/var/named/data
/usr/share/doc/bind97-9.7.0/sample/var/named/my.external.zone.db
/usr/share/doc/bind97-9.7.0/sample/var/named/my.internal.zone.db
/usr/share/doc/bind97-9.7.0/sample/var/named/named.ca
/usr/share/doc/bind97-9.7.0/sample/var/named/named.empty
/usr/share/doc/bind97-9.7.0/sample/var/named/named.localhost
/usr/share/doc/bind97-9.7.0/sample/var/named/named.loopback
/usr/share/doc/bind97-9.7.0/sample/var/named/slaves
/usr/share/doc/bind97-9.7.0/sample/var/named/slaves/my.ddns.internal.zone.db
/usr/share/doc/bind97-9.7.0/sample/var/named/slaves/my.slave.internal.zone.db
/usr/share/man/man1/arpaname.1.gz
/usr/share/man/man5/named.conf.5.gz
/usr/share/man/man5/rndc.conf.5.gz
/usr/share/man/man8/ddns-confgen.8.gz
/usr/share/man/man8/dnssec-dsfromkey.8.gz
/usr/share/man/man8/dnssec-keyfromlabel.8.gz
/usr/share/man/man8/dnssec-keygen.8.gz
/usr/share/man/man8/dnssec-revoke.8.gz
/usr/share/man/man8/dnssec-settime.8.gz
/usr/share/man/man8/dnssec-signzone.8.gz
/usr/share/man/man8/genrandom.8.gz
/usr/share/man/man8/isc-hmac-fixup.8.gz
/usr/share/man/man8/lwresd.8.gz
/usr/share/man/man8/named-checkconf.8.gz
/usr/share/man/man8/named-checkzone.8.gz
/usr/share/man/man8/named-compilezone.8.gz
/usr/share/man/man8/named-journalprint.8.gz
/usr/share/man/man8/named.8.gz
/usr/share/man/man8/nsec3hash.8.gz
/usr/share/man/man8/rndc-confgen.8.gz
/usr/share/man/man8/rndc.8.gz
/var/log/named.log
/var/named #/var/named目录下的生成的文件全都是区域文件
/var/named/data
/var/named/dynamic
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves
/var/run/named
#其它生成的文件全都是文档
[root@www ~]#

        所以说我们在配置DNS服务端的时候,只需配置好主配置文件和区域文件即可,服务端的主配置文件是/etc/named.conf:

        

[root@www ~]# cat /etc/named.conf 
//
// 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 {    #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     { localhost; };
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";
};

logging {    #logging部分指的是日志,表示如何生成和保存日志
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {    #zone部分就是真正用来定义区域类型和区域文件名的
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones"; #include关键字表示将zone部分的其他内容保存在include后面的文件中了
                                    #即include是将该配置文件分片了,要想全部定义在一个文件中也可以
                                    #要想分片定义使用include即可

[root@www ~]# cat /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

zone "localhost.localdomain" IN {
	type master;
	file "named.localhost";
	allow-update { none; };
};

zone "localhost" IN {
	type master;
	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; };
};

[root@www ~]#

    配置文件都是我们在安装bind之后自动生成的,我们只需要在它们上面略作修改即可。

·/var/named目录

    该目录下面有三个目录四个文件:

    wKiom1h9jsTTdE1aAAAPbYvsEcA670.png

    -> named.ca

        该文件里面记录的是13个根DNS服务器的地址:

        Bind97服务安装以及配置_第10张图片

        本机如果无法解析目标地址就得去找根DNS服务器,而该文件中定义的就是去×××根DNS服务器,如果我们安装好bind97之后,没有该文件也没有关系,我们可以使用/usr/sbin/dig命令自动生成,dig命令是一个非常常用的DNS客户端命令。

·dig(domain information gropher)

    该命令是一个到域名服务器里面去查找相关信息的命令:

    dig -t(指定资源记录的类型)

    dig -t NS .命令表示查找根域的NS记录,可以查找到根域DNS服务器区域文件中的所有NS记录,前提是我们的Linux主机能够连接互联网,我们只需要将Linux主机的/etc/resolv.conf文件里面的nameserver指定一台可以访问互联网的主机,我们的Linux主机即可访问互联网:

    wKiom1h9xLHjNQ2XAAAE2IN8te8778.png

    根DNS服务器一共有13台,从a.root-server.net --> m.root-server.net13台,我们也可以到任意一台主机上面去查找对应主机的NS记录:

    wKiom1h9xVmSPcGVAAAGT9wWHWU652.png

    dig命令表示不借助于本地的DNS服务器,而直接到g根DNS服务器上面查找对应的NS记录。

    -> name.localhost文件

        localhost表示本地主机,该文件中的内容表示将名为localhost的主机的地址解析为127.0.0.1:

        Bind97服务安装以及配置_第11张图片

        为了避免DNS配置错误,我们将localhost解析为一个正常地址,每一个主机都是使用localhost这个主机名来访问本机,所以有一个特定的区域叫做named.localhost,专门负责将localhost主机名解析为ipv4的127.0.0.1以及ipv6的::1,这称为本地回环地址。

    -> named.loopback文件

        该区域文件中的内容实现将127.0.0.1解析为localhost,即反向解析:

        Bind97服务安装以及配置_第12张图片

    以上两个文件实现本机主机名的正反向解析。

    因此我们只要将当前的这个named进程启动起来,DNS服务器就能够正常执行了:

    wKiom1h9x7_iEZq0AAAN31OVdz8565.png

·DNS服务监听的协议以及端口

    DNS服务监听的是tcp和udp协议的53号端口:

    Bind97服务安装以及配置_第13张图片

    Bind97服务安装以及配置_第14张图片

    默认情况下,客户端发起的查询请求都是使用udp协议,因为udp协议的速度快,一般来讲主从DNS服务器进行数据传输数据的时候为了保证数据的可靠传输使用的都是tcp协议,并且是tcp协议的53号端口,除了上面两个端口外,DNS服务还会使用tcp协议的953端口,这个套接字是rndc用来连接named进程使用的,所以由上图可以知道,我们将DNS服务启动起来之后,53和953这两个端口就被同时监听了,而且该DNS服务器可以作为缓存DNS服务器直接工作,任何发往该主机的查询请求都会被缓存下来,/etc/named.conf文件中的options部分就是用来定义DNS服务端的全局选项的:

 options {
 11     listen-on port 53 { 127.0.0.1; }; #listen-on表示所监听的套接字
 12     listen-on-v6 port 53 { ::1; };   #listen-on-v6表示监听的ip地址为ipv6的格式
 13     directory   "/var/named";
 14     dump-file   "/var/named/data/cache_dump.db";
 15         statistics-file "/var/named/data/named_stats.txt";
 16         memstatistics-file "/var/named/data/named_mem_stats.txt";
 17     allow-query     { localhost; };
 18     recursion yes;

·套接字(Socket)

    IP:PORT就是一个套接字,Unix通信编程里面的套接字编程的主要目的就是使得客户端能够通过这样一种机制让位于两个不同主机上面的进程进行通信,很多的应用软件都是C/S架构的,而C/S架构的软件一般都分为客户端和服务端,那么理所当然的客户端和服务端就得互相建立通信,而套接字就是客户端向服务端发起请求的入口,因此每一个服务器如果想让位于两台不同的主机上的进程能够通信的话,服务端进程必须监听在某个套接字上等待客户端的连接,而套接字就是客户端访问服务端的入口,127.0.0.1这个地址称为本地回环地址,它的客户端和服务端都是本地主机,因此服务端如果监听在127.0.0.1:53这个套接字上,那么意味着服务端只能接受来自于本地主机的请求,而无法接受来自外部的请求,要想接受来自外部主机的域名解析请求,是要将套接字改为0.0.0.0:53即可,在服务端只有被监听为套接字的ip地址,才可以向服务端发起域名解析请求,服务端在接收到客户端的请求之后,会在本地处理客户端的请求,处理完成之后会将处理结果返回给客户端。

·套接字的意义

    两个位于不同主机上的进程要想通信,一般来讲服务端进程会在某个位置上等待着客户端的请求,而这个位置叫做套接字,如果没有套接字的话,服务端是没有办法接受客户端的请求的,因此web服务器要监听套接字,ftp服务器同样要监听套接字,只要是接受客户端请求的服务端程序都要监听套接字。


    因此/etc/named.conf文件中的options部分中的listen指令就是用来说明DNS服务端监听的套接字的:

    Bind97服务安装以及配置_第15张图片

    如果监听的是如上图所示的套接字的话那么我们的DNS服务端就无法接受来自外部的请求,所以要想使得我们的DNS服务器能够对外工作,得将listen指令监听的套接字修改,如果我们想要使得我们的DNS服务端能够对所有主机提供服务的话,可以在listen指令后面省略ip地址不写,只写上监听的53号端口即可,options部分中的内容在DNS服务端的主配置文件中的格式是参数+参数的值,options部分就是用来定义bind软件的工作属性的,options部分称为全局选项,全局选项对每一个zone都会生效,zone会受到options中每一个选项的控制,但是在全局选项中对我们而言最关键的参数只有一个,叫做directory,该参数明确说明了我们DNS服务器的区域文件所在的路径,即我们只需要告诉DNS服务器到哪里去查找区域文件即可,其他的参数都不用理会,recursion参数表示是否允许和客户端主机进行递归,allow-query参数表示允许查询的主机,但是这个原装的主配置文件配置起来会很麻烦,所以我们在配置DNS服务的时候可以新建一个主配置文件,但是在新建这个文件之前,我们先得查看原有文件的权限和属主属组:

    wKiom1h9157wL6HkAAAOU-dr7_Q683.png

    新建文件的元数据也得如此修改:

    Bind97服务安装以及配置_第16张图片

    接下来编辑该配置文件即可。

·/etc/named.conf文件的语法

    1,该文件中的每一条完整的语句都一定要使用";"进行结尾

    2,花括号和字符之间得有空格

    如下:

    wKiom1h92SnSJdhzAAAJfP6FZno906.png

    在该文件中,logging部分并非是必须配置的,接下来就该配置区域zone了,zone的定义格式:

    zone "区域名称" IN {

        #花括号里面的内容是区域的属性

        type(指定区域类型) {master|slave|hint(根区域)|forward};

        file(指定区域文件的路径) #这里的区域文件的路径可以是一个相对路径,是相对                                #于directory参数指定的路径而言的

        #如果是从DNS服务器的话,还得指定主DNS服务器的地址

        master { master1_ip;master2_ip;...; };#多个主DNS服务器地址之间用分号隔开

    };

    根区域定义示例:

    wKiom1h92zjAyn6xAAAKNhLKWzA889.png

    localhost区域定义示例:

    wKioL1h926Ph6bwuAAANwkTAK9M398.png

    localhost的反向区域定义示例:

    wKiom1h93AGD9SL2AAAQDG_A8i8897.png

    配置完成之后,使用named-checkconf命令来检查主配置文件的语法错误:

    wKiom1h93IWCoLpNAAAGb8wBSKo130.png

    没有错,接下来使用named-checkzone命令来检查区域文件的语法错误,使用该命令的时候得分别指定区域名和区域文件名:

    Bind97服务安装以及配置_第17张图片

    最后启动DNS服务即可:

    wKioL1h93aagBMxDAAARuOKjqpY562.png

    服务启动之后,我们可以通过查看日志文件/var/log/messages文件来查看有无报错:

    Bind97服务安装以及配置_第18张图片

    但是要想DNS能够正常工作,selinux不可以启动起来,我们可以使用getenforence命令来查看当前selinux的状态:

    wKioL1h93nOiy4LRAAAG-jQfnyk745.png

    我们可以使用setenforce 0命令来临时性的关闭selinux:

    wKiom1h93tDTQdthAAAI8WS2fIs492.png

    虽然selinux对DNS没有什么影响,但是我们还是得将它关掉以防万一,使用setenforce 1命令可以重新启动selinux:

    wKiom1h930OwQpqQAAAJlw7Xjh0300.png

    Permissive表示selinux处于没有影响的状态,Disabled表示selinux处于关闭的状态,只有selinux处于Enforcing状态的时候我们才需要将它关闭。

    要想永久性的关闭selinux得编辑/etc/selinux/config文件,将里面的SELINUX的值改为permissive或者disabled,但是这种改法不会立即生效:

    Bind97服务安装以及配置_第19张图片

    接下来使用netstat命令来查看本地监听的tcp和udp连接:

    Bind97服务安装以及配置_第20张图片

    接下来修改/etc/resolv.conf中的nameserver指向,使得它指向我们的本机:

    wKioL1h95hSwvm-wAAAGRqrLEVY632.png

    接下来使用dig命令,看我们本机能否查看根域DNS服务器的NS记录:

    Bind97服务安装以及配置_第21张图片

    Bind97服务安装以及配置_第22张图片

    dig成功,说明我们的DNS服务器已经可以到互联网上面去解析地址了,接下来使用chkconfig命令将named服务设置成为开机自动启动:

    Bind97服务安装以及配置_第23张图片

    至此,我们的缓存DNS服务器就配置完成了,但是仅仅是一个缓存服务器。

    假设此时我们在互联网上面注册了一个域名叫做zhubo.com,并且有一个对应的网段192.168.0.0/24,而且我们已经在.com域上得到了授权,那么怎么才能让我们这台主机在互联网上面扮演一个DNS服务器的角色呢?那我们就得着手定义自己所负责的zhu.com.这个域了。

    1,在/etc/named.conf文件中定义一个正向区域

        wKioL1h9_WrjX19CAAANrfNZlKQ855.png

    2,使用named-checkconf命令检查配置文件的语法错误

        wKioL1h9_cvTutgLAAAIM2SDEnM690.png

      3,重启DNS服务

        Bind97服务安装以及配置_第24张图片

        报错了,报错是因为我们还没有添加区域文件。

    4,手动建立正向区域文件zhu.com.zone

        区域文件里面放置的都是资源记录,而且第一条一定是SOA记录,并且每一条记录都有对应的TTL值,但是在每一条资源记录的TTL值都一样的情况下,我们可以在区域文件中定义一个全局的TTL。

    5,添加资源记录

        第一条SOA记录的区域名称可以使用@代替,因为我们在named.conf文件中的zone后面已经指定过该区域的名称了:

        Bind97服务安装以及配置_第25张图片   

        第二条NS记录,用来说明我们这个域的DNS服务器是哪个,如果NS记录的区域名称和上一条记录的区域名称一样的话则可以省略不写,还可以添加邮件服务器的MX记录,NS记录和MX记录都得有A记录,所以一般情况下NS记录和MX记录是和A记录写在一起的:

        Bind97服务安装以及配置_第26张图片

        NS和MX记录中的FQDN可以简写为ns1和mail,A记录中的FQDN也可以简写为ns1、mail以及www,CNAME记录中的VALUE必须是某个FQDN,并且区域文件的权限是640,属主属组分别是root和named:

        Bind97服务安装以及配置_第27张图片

    6,使用named-checkzone命令检查区域文件的语法错误

        Bind97服务安装以及配置_第28张图片

        会报错,这个报错是因为我们在区域文件中定义全局的TTL值时使用了错误的引用符号,应该使用$,因为这里定义的是一个TTL宏,任何时候声明一个宏的时候都要使用$:

        Bind97服务安装以及配置_第29张图片

                还有一定要记住MX记录的优先级一定写在MX的后面,接下来使用named-checkzone命令检查区域文件的语法错误就不会报错啦:

        wKioL1h-CBmhMTNwAAARoZ95tFg170.png

    7,重启DNS服务

        wKiom1h-CFjTYDV9AAARyhrDbII871.png

    接下来使用dig命令来检测该DNS服务器能否解析我们这个域。

·dig命令的用法

    格式:dig -t RRT FQDN(RRT和FQDN一定得配对)

    示例:dig -t NS zhubo.com.命令表示查看该域内DNS服务器上区域文件中的NS记录:

        Bind97服务安装以及配置_第30张图片

        dig -t RRT 域名 主机FQDN->该命令表示到该域内的某台主机上查询

        Bind97服务安装以及配置_第31张图片

    dig -t A FQDN命令可以查看对应主机的A记录信息:

    Bind97服务安装以及配置_第32张图片

    由上图,我们可以知道dig命令的输出结果是由几个部分组成的:

        ->ANSWER SECTION表示我们要查询答案

        ->AUTHORITY SECTION表示权威部分

        ->ADDITIONAL SECTION表示补充部分

            补充部分表示任何一个NS记录都会有一个A记录与之相随。

    当我们再次查找该www主机的A记录时,所查找到的ip会调转次序,这就是DNS的负载均衡功能:

    Bind97服务安装以及配置_第33张图片

    Bind97服务安装以及配置_第34张图片

    Bind97服务安装以及配置_第35张图片

        Bind97服务安装以及配置_第36张图片

    dig命令还可以进行反向查询,命令格式:

        dig -x ip->表示查找ip对应的FQDN,dig命令是我们第一个常用的DNS客户端命令。

    第二个常用的DNS客户端命令叫做host。

·host

    格式:host -t RRT FQDN,该命令无法使用@,该命令也可以查询某个FQDN对应的ip地址,但是输出结果要比dig简洁的多:

    Bind97服务安装以及配置_第37张图片

    同样可以负载均衡。

    Bind97服务安装以及配置_第38张图片

    该命令可以将SOA记录中定义的时间属性的单位全部转换为秒钟。

     第三个常用的DNS客户端命令叫做nslookup

        这是一个交互式的命令,它有两种工作模式,可以工作在交互式模式下,也可以工作在命令模式下,Windows也支持nslookup命令,在DOS下使用该命令的方法:

        wKiom1h-DtTyzZ3QAAAFoKIEO5M343.png   

        输入nslookup命令进入nslookup命令行

        wKioL1h-DxGgBbTpAAAGasoy7lo182.png

        输入server命令指定新的DNS服务器

        Bind97服务安装以及配置_第39张图片

        输入set q=RRT命令指定资源记录类型,接下来输入对应的FQDN,查询即可。

·如何配置反向区域

    1,编辑/etc/named.conf,添加反向区域

        wKiom1h-EAnRYOsEAAATVJlNbjU616.png

    2,检查配置文件语法错误

        wKioL1h-EDKzpUljAAAISS_PPK8947.png

    3,添加区域文件

        我们这里可以直接将正向区域复制一份再稍加修改即可,复制的时候使用cp -p命令复制源文件的元数据:

        wKiom1h-ELKh8eYWAAASduDXMvs377.png

        接下来添加资源记录,但是要注意的是反向区域里面的NS记录的FQDN不能简写,反向区域里面没有A记录和MX记录,将正向区域文件里面的A记录全部改为PTR记录,反向区域里面只需要保留SOA、NS和PTR记录,也可以由CNAME记录,但是一般很少用到,正反向区域的SOA记录除了区域名称以外其他都是一样的:

        Bind97服务安装以及配置_第40张图片

    4,检查区域文件语法错误

        wKioL1h-FMqQhIzMAAAU1Nr72bA088.png

    5,重启DNS服务

        wKiom1h-FQLCsTRJAAARl81PqGo418.png

    6,检测是否可以正常解析该区域

        ->Windows上使用nslookup解析:

          Bind97服务安装以及配置_第41张图片

       ->Linux上使用dig命令解析:

        Bind97服务安装以及配置_第42张图片

    在godaddy.com上面可以注册域名!