l 第一部分,Bind简介与安装配置
浏览网站对我们来说是一件简单的人人都会做的事情,可以我们有没有考虑过一个问题.数据包在网络中传输是经过路由器层层转发而达到目的地的,而路由器的转发机制是依赖ip寻址,可是访问一个网站的时候我们并没有在浏览器中输入ip这个东东吧!那计算机是怎么把我们的请求送到正确的目的地呢?
这就需要在我们的网络中存在一个服务器,这个服务器可以把我们在浏览器中输入的类似www.google.com网站地址转换为ip地址。随着互联网规模的扩大,单单一台服务器肯定不能担此重任。这就需要一种机制,把这些保存着众多由主机地址和ip地址的信息的数据库分层存放,DNS就是这次分层存放的解决办法。而Bind就是这种机制的实现软件。
一、Bind的安装配置
首先我来说清楚几个容易让人混淆的概念,我们的服务协议是DNS,提供服务的程序叫bind,而程序运行时候进程名叫named。是不是很诡异?好了,我们来安装bind吧。
(养成一个习惯,安装后先查询一下生成了哪些文件,这里简要列举一下我们能常用到的。)
[root@localhost ~]# yum install bind [root@localhost ~]# rpm -ql bind .... /etc/named /etc/named.conf-----------------------主程序的配置文件 /etc/named.rfc1912.zones------------区域文件列表 /etc/sysconfig/named-----------------程序启动脚本配置文件 ......... /usr/lib64/bind /usr/sbin/named------------------------主程序二进制文件 /usr/sbin/named-checkconf-----------检查配置文件语法 /usr/sbin/named-checkzone-----------检查区域文件语法 /usr/sbin/named-compilezone /usr/sbin/named-journalprint ...... /var/named/slaves----------------------辅助dns的数据库文件 /var/run/named-------------------------程序运行锁文件
二、配置文件介绍
1. 主配置文件
配置文件中必须包含三个区域,根区域,localhost区域和127.0.0.1区域,如果是用rpm安装的,则安装包也会在/var/named下自动生成这个三个区域文件的数据库文件,/var/named/{named.localhost, named.loopback, named.ca}
因为我们是使用rpm包安装的,所以会自动生成一个配置文件/etc/named.conf,可以在这个配置文件上修改,也可以自己写一个配置文件。先来带大家看一下安装包生成的配置文件吧
[root@localhost ~]# vim /etc/named.conf
2. 定义区域的文件
[root@localhost ~]# cat /etc/named.rfc1912.zones ..... zone "localhost" IN { type master;------------------------------类型为主dns file "named.localhost";------------------对应的数据库文件相对路径 allow-update { none; };---------------用分号隔开的格式书写 };
3. 这些是rpm自动给我们生产的数据库文件
[root@localhost ~]# ls /var/named/ data/ named.ca named.localhost slaves/ dynamic/ named.empty named.loopback
l 第二部分,实例讲解bind实现主从,子域授权,转发,view功能的实现
一、正向解析,反正解析.
实例:
假设我们有一个域名为nyist.com的域名,域中有两台域名服务器
主dns-----ns1.nyist.com: ip:172.16.20.61
辅dns-----ns2.nyist.com: ip:172.16.20.65
1. 编辑主dns的主配置文件。
注意:如果是使用rpm包提供的主配置文件的时候记得把监听的端口改一下,改成主机的网卡ip。或者直接将监听端口那一行注释掉,表示默认监听所以端口。(唉,博主有一次失误,害得我吧!唉,不说了...)
(记得除了我们需要的nyist区域以为还要包含另外3个区域哦。。。)
root@station57 ~]# vim /etc/named.conf 1 options { 2 directory "/var/named"; 3 }; 4 5 zone "." IN { 6 type hint; 7 file "named.ca"; 8 9 10 }; 11 zone "loalhost." { 12 type master; 13 file "named.localhost"; 14 }; 15 zone "1.0.0.127.in-addr.arpa." { 16 type master; 17 file "named.loopback"; 18 }; 19 zone "nyist.com" { 20 type master; 21 file "nyist.com.zone"; 22 };
配置文件中几个安全控制选项(man named.conf请自查)
Allow-transfer {};允许传送
Allow-query{}:开发查询功能
Allow-recursion{};递归白名单
Allow-upsate { none }:允许动态更新数据库白名单
2. 修改主配置文件权限和属主属组
[root@station57 ~]# ll /etc/named.conf -rw-r--r-- 1 root root 253 Mar 9 23:01 /etc/named.conf [root@station57 ~]# chown root:named /etc/named.conf [root@station57 ~]# chmod 640 /etc/named.conf [root@station57 ~]# ll /etc/named.conf -rw-r----- 1 root named 253 Mar 9 23:01 /etc/named.conf
3. 检查主配置文件的语法
[root@station57 ~]# named-checkconf
4. Ok,语法没有错误我们就可以启动了
[root@station57 ~]# service named start Starting named: named: already running [ OK ]
5. 增加自定义nyist的区域文件
[root@station57 ~]# vim /var/named/nyist.com.zone 1 $TTL 1D 2 @ IN SOA @ nyist.com. ( 3 2014031302 ; serial 4 1D ; refresh 5 1H ; retry 6 1W ; expire 7 3H ) ; minimum 8 IN NS ns1 9 IN NS ns2 10 ns1 IN A 172.16.20.61 11 ns2 IN A 172.16.20.51 12 www IN A 172.16.20.61 13 ftp IN A 172.16.20.63
6. 检查区域文件语法
[root@station57 ~]# named-checkzone "nyist.com" /var/named/nyist.com.zonezone nyist.com/IN: loaded serial 2014031302 OK
7. 没有问题我们就可以启动了,此时主机dns1就已经可以工作了。
可以用dig验证
[root@station57 ~]# dig -t A ftp.nyist.com @172.16.20.61
8. 配置反向
(先在配置文件中添加区域文件)
[root@station57 ~]# vim /etc/named.conf zone "20.16.172.in-addr.arpa."IN{ type master; file "172.16.20.zone"; };
(再添加反向数据库文件)
[root@station57 named]# vim 172.16.20.zone 1 $TTL 1D 2 @ IN SOA ns1.nyist.com adm.nyist.com. ( 3 2014031302 ; serial 4 1D ; refresh 5 1H ; retry 6 1W ; expire 7 3H ) ; minimum 8 IN NS ns1 9 IN NS ns2 10 61 IN PTR ns1.nyist.com. 11 51 IN PTR ns2.nyist.com. 12 61 IN PTR www.nyist.com. 13 63 IN PTR ftp.nyist.com.
(检查区域文件语法)
[root@station57 named]# named-checkzone "20.16.172.in-addr.arpa." /var/named/172.16.20.zone zone 20.16.172.in-addr.arpa/IN: loaded serial 2014031302 OK [root@station57 named]# dig -x 172.16.20.63 @172.16.20.61
二、主从配置
1. 完全区域传送
[root@localhost ~]# dig -t axfr nyist.com @172.16.20.65
(如果在区域文件中定义allow-transfer 限制,则被限制的主机不能完成区域传送)
zone "nyist.com." IN { type slave; masters { 172.16.20.61; }; file "slaves/nyist.com"; allow-transfer { none; };----------------禁止所有主机区域传送
2. 配置从服务器区域文件。
[root@localhost ~]# vim /etc/named.rfc1912.zones zone "nyist.com" IN { type slave; masters { 172.16.20.61; }; file "slaves/nyist.com"; };
3. 因为是从服务器,所以区域文件不用自己写,重启一下服务从服务器就可以工作了。
[root@localhost ~]# service named restart
4. 此时从服务器就会自动去主服务器那里完成第一次完全区域传送。
传送的内容在/var/named/slaves/nyist.com中。
5. 好了,用dig试一下你的从服务器工作情况吧,可以通过tail命令及时查看服务器工作信息呀。
[root@station57 named]# tail -F /var/log/messages
三、Rndc的几个用法
Rndc是bind的一个远程管理工具,是bind软件中的一个管理组件,它的配置文件在/etc/rndc.conf。通过它可以安全的管理我们的bind运行,可以通过他让bind重读配置文件,打开日志开关、清空缓存,定义调试级别等等。干说不练不行,带大家看一下它的几个主要用法吧。
1. 重载区域文件
[root@localhost ~]# rndc reload WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf) server reload successful
2. 重读配置文件并加载新增区域
[root@station57 named]# rndc reconfig
3. 关闭或开启查询日志
建议正常工作时候关闭查询日志,因为查询日志会造成大量硬盘写操作,会降低性能。
[root@station57 named]# rndc querylog
4. 查看bind运行详情
[root@station57 named]# rndc status version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 CPUs found: 2 worker threads: 2 number of zones: 20 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is ON recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running
5. 改变debug级别
把级别调为4
[root@station57 named]# rndc status 4
6. 如果rndc无法正常工作,可尝试使用rndc-confgen 生成/etc/rndc.conf配置文件,并将配置文件中的后半部分复制到BIND的主配置文件中并按指示启用即可
[root@station57 named]# rndc-confgen [-r /dev/urandom] > /etc/rndc.conf
四、子域授权
如果一个公司有几个比较大的部分,一个域可能就无法完成需求,这就需要划分子域了。而子域要能正常解析工作就需要父域来授权。
(接上边案例扩展)
假设我们有一个域名为nyist.com的域名,域中有两台域名服器
主dns-----ns1.nyist.com: ip:172.16.20.61
辅dns-----ns2.nyist.com: ip:172.16.20.65
现在为nyist.com增加一个子域 soft.nyist.com
dns--------ns3.soft.nyist.com ip:172.16.20.51
1. 首先在父域的主dns上为子域soft.nyist授权
在父域的nyist的区域文件中添加一个子域的ns记录
2. Ok,父域已经授权,那么让我们去配置子域dns吧。
[root@station64 ~]# vim /etc/named.rfc1912.zones zone "soft.nyist.com." IN { type master; file "soft.nyist.com.zone"; };
3. 编辑添加文件
[root@station64 ~]# vim /var/named/soft.nyist.con.zone $TTL=600 @ IN SOA dns.soft.nyist.com. xuqimin.nyist.com.( 2014031401 1H 5M 6D 12H) IN NS dns IN MX 10 mail dns IN A 172.16.20.51 www IN A 172.16.20.51 ftp IN A 172.16.20.53 help IN CNAME www
4. 记得修改配置文件和区域数据库文件属主数组和权限640
[root@station64 named]# chown root:named /etc/named.rfc1912.zones [root@station64 named]# chown root:named /etc/named.conf [root@station64 named]# chown root:named /var/named/named*
5. 好了,检查配置文件并启动就可以工作了
五、子域转发机制(在ns3.soft.nyist.com上配置)
假设我们子域soft.nyist.com不能上互联网,它只负责管理它的子域的查询,那么如果有主机把dns指向了ns1.soft.nyist.com这个主机让它解析非soft.nyist.com的域的时候就需要用到dns的转发机制了。
(注意:配置转发的时候如果你使用的是rpm包生成的配置文件的时候,记得要将//include "/etc/named.root.key";这一个包含文件去掉。因为转发的时候它会验证合法性)
你要启用转发,请确保要转发的主机(ns1.nyist.com)开通了允许递归的选项. recursion yes;
Forward first;如果对发无应答,就去找跟继续查询
Forward only;如果对方无应答,不再去找跟查询。
1. 配置一个转发区间,转发父域负责的区域。
[root@station64 named]# vim /etc/named.rfc1912.zones zone "nyist.com." IN { type forward; forwarders { 172.16.20.61; }; forward only; };
2. 将所有子域不负责的区域都转发给父域
编辑主配置文件,在全局段添加一个转发配置
[root@station64 named]# vim /etc/named.conf
Ok.。。。转发配置好了,现在ns3.soft.nyist.com 这个台主机就可以把他不负责的区域的请求解析转发给ns1.nyist.com 这台dns解析了。
六、View的实现
View实现了将不同ip的请求解析为不同的服务器地址。解决了多个服务器满足不同网络、地区,人员的请求。分担了服务器的访问压力,提供了简单的负载均衡。
假如我们需要将来自172.16.120.0/16这个网络中的请求访问www.soft.nyist.com返回的解析结果为192.168.1.1.其他的返回跟上面实例一样。
(注意,使用view之后,所以区域都应该在view中包含,特别注意主配置文件中定义的跟区域,要将它包含在view中)
这里我们在子域soft.nyist.com中完成view的实现:
1. 编辑区域配置文件
view in { match-clients { 172.16.120.0/24; } zone "soft.nyist.com." IN { type master; file "soft.nyist.com.zone.in"; }; }; view default { match-clients { any; }; zone "." IN { type hint; file "named.ca"; }; ....... ........ zone "soft.nyist.com." IN { type master; file "soft.nyist.com.zone"; }; zone "nyist.com." IN { type forward; forwarders { 172.16.20.61; }; forward only; }; };
2. 编辑区域数据库文件
[root@station64 named]# vim /var/named/soft.nyist.com.zone.in $TTL 600 @ IN SOA ns.soft.nyist.com xuqimin.nyist.com ( 2014031401 1D 5M 6D 12H) IN NS ns ns IN A 192.168.1.1 www IN A 192.168.1.2 ftp IN A 192.168.1.3
3. 使用不同主机测试返回结果。
(nds服务器通过view实现了将来自不同网络的主机解析到不同的ip地址,这里的ip范围可以自由设定,本例子以最简单的一种方式实现了view的功能,能多复杂繁琐的设置也都是在这上面的扩展,慢慢研究吧!)