昔我往矣

【翻译】DNS配置第一部分--DNS缓存服务器

2012年03月26日

前两天搭建DNS服务器没学好,在RedHat官网上找到一篇关于这个的文章,就把它翻译成了中文。
原文的链接如下:http://www.redhat.com/magazine/025nov06/features/dns/

译文如下:

一、域名系统
域名系统(DNS)在将数字的ip地址转换成人工易记的主机名,方便人们通讯方面起着决定性的作用。DNS是世界上最重要、最大的分布式数据库之一,负责处理每天收到的数以亿计的公网ip地址查询。目前,大多数的公共DNS服务器都是由ISP和商业公司负责管理,但是私有的DNS服务器对于私有的家庭网络也很有用。这篇文章将探讨在家庭网络中搭建各种DNS服务器的一些优势。

二、为什么要搭建私有的DNS服务器?
这是一个很好的问题,这个问题的答案取决于你家的网络环境。在一个包含一台路由器和少量计算机的家庭网络里面,对大多数用户来说,只需要维护各个客户机的host文件里的IP/主机名映射就足够了。如果你的网络里面包含更多的机器,那么,搭建一台私有的DNS服务器是十分值得和具有吸引力的。优点如下:

1、维护:管理网络中每一台客户机的host文件是十分乏味的事情。事实上,如果客户机是动态ip的移动笔记本电脑,或者聚会上临时的局域网主机,这种维护方式甚至可能是不可行的,使用DNS管理host信息和主机名将变得更加有效。
2、高性能缓存:DNS服务器可以缓存DNS信息,使得用户不用接入到公共名字服务器就能获得DNS信息。这种性能的提高,会增加其它比如网络浏览的任务的性能。
3、原型设计:一个内部私有的DNS服务器,是最终建立公共可接入的DNS服务器的第一步,以方便访问内部网络的其它诸如web服务器的其它主机服务。从内部网络服务器的问题中学习,可以防止在公共DNS服务器上放同样的,可能会导致外部用户失去服务的错误。注意:当托管一个家庭网络环境时,有些ISP要求用户具备静态的IP或者定制业务。
4、酷:展开了来说,我搭建第一台网络DNS服务器的时候,就是受到了一些cool因素的影响。创建一个内部域映射到各台主机,不用交付注册域名的费用,就可以向你的客户发布域名是非常酷的一件事情。当你设定的域名在你朋友笔记本电脑上显示出来的时候,这种cool的感觉就会更加的强烈。

下面我们就开始着手搭建一台只具备缓存功能的名字服务器,用来处理客户机的DNS查询请求。

三、名字缓存服务器
幸好,使用RHEL(Red Hat Enterprise Linux)或者Fedora rpm包来搭建名字缓存服务器是十简单的。作为名字服务器,一定要先安装如下的一些rpm软件包(使用rpm -q来查看这些软件包是否已经安装过了)。

  1、 bind (包含 DNS server,named)
  2、 bind-utils (utilies 用来查询DNS服务器的主机信息)
  3、 bind-libs (libraries 被bind server和utils软件包使用)
  4、 bind-chroot (使bind在chroot模式运行)
  5、 caching-nameserver (简单名字缓存服务器的配置文件)

名字缓存服务器向上级名字服务器转发查询,并且缓存查询结果。打开/var/named/chroot/etc/named.conf文件,向里面的global option段增加如下几行。

forwarders { xxx.xxx.xxx.xxx; xxx.xxx.xxx.xxx; }; #IP of upstream ISP nameserver(s)
forward only; #rely completely on our upstream nameservers

上面这个块会使得缓存DNS服务器向上层ISP名字服务器转发它所不能解析的请求。保存named.conf文件,并分配644的权限。chmod 644 named.conf
使用bind RPM包的named-checkconf工具检查语法。named-checkconf named.conf
改正named-checkconf报告的语法错误。
检查/var/log/messages文件有助于调试错误。
然后,设置本地解析器指向它自己作为DNS解析。修改/etc/resolv.conf文件:nameserver 127.0.0.1

假如你正在路由器上运行DHCP服务器,请确保/etc/resolv.conf文件不会在刷新时被覆盖。为了防止发生这种事情,,修改/etc/sysconfig/network-scripts/ifcfg-eth0(把eth0替换成你自己的网络接口),确保设置如下:

BOOTPROTO=dhcp
PEERDNS=no
TYPE=Ethernet

以root身份开启名字服务器,设置服务启动级别2-5:

# service named start
# chkconfig named on

测试
bind-utils RPM包包含了测试缓存服务器的工具。使用host、dig查询redhat.com测试nameserver。

# dig redhat.com
.
.
;;Query time:42 msec
;;SERVER: 127.0.0.1 #53(127.0.0.1)

在前面的DNS查询缓存以后,将42毫秒下降到1毫秒。缓存开始工作了!下面,我们通过配置客户机来使用新的缓存名字服务器!
客户端配置
对Linux和Windows客户端,有一套选项用来配置解析器,这取决于你的网络环境。
1、如果,你拥有一台路由器,并且你的客户机ip地址是路由器通过DHCP给你分配的,那么,你可以在客户机发送DHCP租用情求的时候,使路由器分配主名字服务器。登录到路由器,确保你的主名字服务器在路由器的DHCP设置中指向缓存服务器的ip地址。
2、对linux客户机来说,你可以使用和名字服务器一样的方法,通过修改/etc/resolv.conf文件来设置解析器。而windows用户需要在控制面板->网络链接->TCP/IP->属性->使用DNS名字服务器选项来设置名字服务器ip地址。注意:windows的DNS服务选项可能会因系统版本不同二不一样。

使用dig测试新配置的客户端。windows用户可以使用nslookup命令。DNS请求应该和之前直接测试名字服务器时候具有相似的响应时间。

注意:如果在DNS服务器上正运行着防火墙,需要开放53号端口。例如下面对192.168.15.0子网的设置:

#iptables -A INPUT -s 192.168.15.0/24 -p udp --dport 53 -j ACCEPT
#service iptables save

四、总结:
按照上面的步骤,你就可以花费很少的精力搭建一台高性能的缓存服务器。现在,客户端就可以向缓存名字服务器查询DNS信息,缓存里面不存在的,它将向上一层的ISP名字服务器发送请求。在下一篇文章里,我们将学习如何搭建一台主名字服务器,负责内部客户的权威主机名信息。权威的名字服务器也默认的带有缓存功能,但是,它使用带特殊标签的区域文件同时可以管理静态和动态ip的客户机。祝你使用新的缓存名字服务器愉快,同时,想想稍候为你的权威名字服务器建立一个创造性的域和主机名。

五、关于作者
香农·休斯 是红帽的网络工程师,喜欢使用开源软件解决复杂的项目。当他不是在编写代码,调试服务器或者提出新的红帽网络项目,那么,他一定是和他的妻子在花园里忙活植物,和他的两个孩子与小狗一起看Scooby Doo的重播,或者为他的教堂采纳最新的开源项目。

当前暂无评论 »

添加新评论 »