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