1、通常 Linux 初学者会问:Linux 中有没有一个标准的配置文件格式?一句话,没有。不熟悉 Linux 的用户一定会感到沮丧,因为每个配置文件看起来都象是一个要迎接的新挑战。在 Linux 中,每个网管员都可以自由选择自己喜欢的配置文件格式。DNS 就是 Domain Name System, DNS 服务器可以分为三种,高速存服务器(Cache-only server) 、主服务器(Primary Name server) 、辅助服务器(Second Name Server) 。 DNS 的详细原理、工作流程、术语、概念,限于篇幅,这里就不说了。一、Linux 下主要 DNS 配置文件L
2、inux 下主要 DNS 配置文件见表一、二、三:表1 DNS 主要配置文件文件名称 中文名称 作用/etc/hosts 主机的一个列表文件 包含(本地网络中)已知主机的一个列表。如果系统的 IP 不是动态生成,就可以使用它。对于简单的主机名解析(点分表示法) ,在请求 DNS 或 NIS 网络名称服务器之前,/etc/hosts.conf 通常会告诉解析程序先查看这里。/etc/host.conf 转化程序控制文件 告诉网络域名服务器如何查找主机名。 (通常是 /etc/hosts,然后就是名称服务器;可通过 netconf 对其进行更改)/etc/resolv.conf 转化程序配置文件
3、在配置程序请求 BIND 域名查询服务查询主机名称时必须告诉程序使用那个域名服务器和 IP 地址来完成这个任务。Linux 上的域名服务由 named 守护进程控制,该进程从主文件: /etc/named.conf 中获取信息。它包括一族将主机名称映射为 IP 地址的各种文件:下面是 named 配置文件族详细内容。表2 named 配置文件族名称 中文名 作用/etc/named.conf 主文件 设置一般的 name 参数,指向该服务器使用的域数据库的信息源/var/named/named.ca 根域名配置服务器指向文件 指向根域名配置服务器,用于唯告诉缓存服务器初始化。/var/name
4、d/localhost.zoneLocalhost 区正向域名解析文件用于将本地 IP 地址(127.0.0.1)转化为回送方localhost 名字。/var/named/name.local Localhost 区反向域名解析文件用于将 localhost 名字转化为本地回送 IP 地址(127.0.0.1) 。/var/named/name2ip.conf用户配置区的正向解析文件 将主机名映射为 IP 地址的区文件。/var/named/ip2name.conf用户配置区的反向解析文件 将 IP 地址映射为主机名称的区文件named.conf 时 DNS 中的核心它的配置 见表三:表3
5、named.conf 文件的配置命令 语法acl 定义 IP 地址的访问控制清单 control 定义 rndc 使用的控制通道include 把其他文件包含到配置文件中 key 定义授权的安全密钥 logging 定义日志内容和位置 opitons 定义全局配置选项和缺省值server 定义远程服务器的特征 zone 定义一个区二、DNS 配置文件检查工具可以看出 Linux 下 DNS 配置文件比较复杂,不过我们可以通过一些工具来帮助你检查DNS 文件错误。ping 命令检查 DNS 配置最简单的方法是使用 Ping 命令,直接 Ping 主机名称。PING 是一种很好的方法,它能够决定当
6、特定主机处于开机运行状态时,网络是否正常运行。遇到 DNS 问题时检查的第一项是系统和网络的状态,而且首先检查并判断存在问题的 DNS 服务器是否有响应。如果能够 PING 到 DNS 服务器,则能确保与 DNS 服务器的连接无误。如果无法 PING 到 DNS 服务器,那么很有可能系统死机了。为了证实这是系统问题而非网络问题,再来检测 DNS 连接的路由器是否正常运行。为 DNS 排错时,应尽量使用 IP 地址替代 DNS 名称以减少由 DNS 服务器而不是主机产生问题的可能性。ping PING (192.168.1.1) 56(84) bytes of data64 bytes from
7、 192.168.1.1: icmp_seq=1 ttl=64 time=0.420 ms64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.374 ms64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.372 msnslookup 命令在 Linux 下配置好 DNS 服务器,添加了相应的记录之后,只要 IP 地址保持不变,一般情况下我们就不再需要去维护 DNS 的数据文件了。不过在确认域名解释正常之前我们最好是测试一下所有的配置是否正常。许多人会简单地使用 ping 命令检查一下就算了
8、。不过Ping 指令只是一个检查网络联通情况的命令,虽然在输入的参数是域名的情况下会通过DNS 进行查询,但是它只能查询 A 类型和 CNAME 类型的记录,而且只会告诉你域名是否存在,其他的信息一概欠奉。所以如果你需要对 DNS 的故障进行排错就必须熟练另一个更强大的工具 nslookup。nslookup 即名称服务器查找(Name Server Lookup) ,用来查找 DNS 服务器上的 DNS记录。这个命令可以指定查询的类型,可以查到 DNS 记录的生存时间还可以指定使用那个 DNS 服务器进行解释。运行 nslookup 需要安装 bind-utils,可以使用命令查询:rpm
9、qa|grep bind-utilsnslookup 有两种运行模式:交互式和非交互式运行模式。交互式运行模式允许用户通过域名服务器检索各种主机,并可以打印出主机名称列表。非交互式运行模式用来打印所请求的某个主机或域的特定的信息。进入“nslookup”交互式运行模式,运行下面的命令:nslookup在使用交互模式。此时会出现提示符“,nslookup 提供了许多可用命令。下面列举其中一些常用的详细说明。help 命令:显示帮助信息,及一些简单的命令的作用。exit 命令:退出 nslookup 命令。lserver 命令:查找指定的域名服务器并将其设置为默认的域名服务器。server 命令:
10、和 lserver 相似,解析另一台域名服务器并将其设置为默认的服务器,不同在于本命令使用当前的默认服务器来解析。set 命令:修改工作参数,它也是 nslookup 中最常用的命令。它可以包含下面的几种:set class:设置查询的类型,一般情况下为 Internet。set debug:设置调试模式。set nodebug:设置为非调试模式。set d2:设置详细调试模式。set nod2:设置为非详细调试模式。set nodefname:设置为 defname,会在所有没有加“o“的名字后,自动加上默认的域名。它是默认的方式。set domain:设置默认的域名。set port:DN
11、S 的默认端口为53,用本命令可以设置其他端口,一般用于调试。set q(querytype):改变查询的信息的类型。默认的类型为 A 纪录。set recurse:设置查询类型为递归;若为 set norecurse,查询类型为跌代;缺省为前者。set retry:设置重试的次数。默认的值为4。set root:设置默认的根服务器。set timeout:设置等待应答的限制时间(单位为秒) ,超出即为超时,如果还可以重试,就会将长超时值加倍,重新查询。默认的超时值为5秒。如果要进入 nslookup 非交互式运行模式,运行下面的命令 :nslookup 错误实例:#nslookup* Can
12、t find server name for address 192.168.2.1: Timed out* Default servers are not availableDefault Server: UnKnownAddress: 192.168.2.1错误原因:如果出现错误,该命令将不能启动。一般的错误都是数据库文件或配置文件笔误所至。比如少个“.” 或者文件明不正确等等。另外一个主要的原因是执行 nslookup 的系统所使用的 server(如 192.168.2.1) 不能查询其反解(1.2.168.192.in-addr.arpa)。解决方法:增加 server ip 所在的
13、 reverse zone (如 2.168.192.in-addr.arpa),确定其中有 server 本身的反解项目。3、 使用 dlint 软件检查 DNS 故障dlint 是一个专门检查 DNS 配置文件开放源代码软件,运行它系统要求安装 Perl 语言和DiG 命令(BIND 中一个软件包) :软件下载:dlint 软件主页是 http:/ 下载链接:http:/ 文件大小: 22KB。软件安装:系统会将 dlint 安装在/usr/bin/目录下。dlint 首先检查拼写错误。有 A 记录的主机名称必须有 PTR(称 pointer, PTR 反向解析)记录。如果有 A 记录的主
14、机名称没有 PTR,配置文件不能通过。Dlint 可以在用户配置文件中为 A 建立查找丢失的PTR 记录。dint 会检查 in-addr.arpa 区带(Zone)的每一条 PTR 记录是否有对应的 A 记录存在。dint 会以递归的方式检查子区带(Zone) ,查找配置问题。应用实例:; 后边是程序版本和解释语句,ERROR 后边是 Dlint 对 DNS 配置文件的检查结果。如果没有 ERROR 字段表示配置正确。Dlint 能检查的 DNS 配置文件主要错误:1. 没有增加 SOA (start of authority) RR 的 serial 值 这是最主要的 DNS 出错的原因
15、. 因为, serial 值没有增加, secondary server 就不会在 primary server 的配置文件改变后随之改变。 包括改变 SOA 里面其它的值, seconrary server 自己并不会发觉. 即使是修改 SOA RR 里面的资料, 也都要记得去改 SOA RR 的 serial 值 . 改了 serial 后,secondary 到时后查出有增加, 就会从 primary 作一次 zone transfer. 改了 SOA RR 后, 最好去测试一下 secondary server 是不是有更新. 目前有 dlint软件可以分析任何 DNS 区带。 2.
16、在 BIND 中的配置文件, 少写了一个点 (.) 少写了一个点, 看起来差不多 . 但是却造成了很大的问题 . BIND 的设定档案一定要小心的设定. 要不然很可能产生很多错误。3、错误的 resolv.conf 设定 resolv.conf 里面包含了 local domain, 当你没有把全部的 domain name 设定好时, 就会自动加上去这个东西. 然后机器就不会去查 DNS 而直接用这个 domain name 连出去了. 要是 resolv.conf 有不正确的 domain name entry, 那就有可能连到一堆不存在的地方 . (然后得到 error.)4. rndc
17、 命令rndc 指令是系统管理员用来管理域名服务器的操作的命令。rndc 主要命令:rndc reload 用来装入新的数据库。rndc status 查看目前 DNS 服务器状态。rndc stop 停止DNS 服务器。rndc restart 从新启动 DNS 服务器。rndc stats 生成 DNS 统计报表。rndc dumpdb 将所有缓存输入文件 named_dump.db。 5 、DNS 状态检测工具 -DNSTOP在维护 DNS 服务器时,网管员希望知道到底是哪些用户在使用 DNS 服务器,同时也希望能对 DNS 状态查询做一个统计。通常想到是 tcpdump i eth0
18、port 53 来查看 DNS 查询包,Tcpdump 是一个命令行方式的嗅探器。它可以根据需要显示出经过一个网络接口的所有数据包,供网络管理员对网络进行检测。但由于采用的是命令行方式,对这些数据包的分析可能会比较困难。这里我们可以使用 DNSTOP 查询 DNS 服务器状态:软件安装:DNSTOP 依赖 Tcpdump 和 pcap 库(libpcap)对网络上传输的数据包进行截获和过滤,所以你需要检查系统是否安装相应软件,可以使用命令:结果见图1。图1 运行 DNSTOP 必需软件和库函数 软件主页:http:/dns.measurement- 下载链接:http:/dns.measure
19、ment- 软件安装:运行软件:如果想查看通过 eth0 的 DNS 网络流量可以使用命令在运行 DNSTOP 的过程中,可以敲入如下命令: S,D,T,1,2,ctrl+R,ctrl+X,以交互方式来显示不同的信息。更详细信息可以查看 dnstop help。总结:在 Linux 下新手第一次配置 DNS 都会错,请留意出错信息。DNS 是一个很复杂的系统。用户可能会做错很多事,并且会使系统不能正常运行。伴随 DNS 建立出现的许多问题都会引起相同的结果,但起因却不同。但大多数问题是由于配置文件中的语法错误而导致的。关于如何配置 DNS 笔者不作赘述了,另外网络上有大量的文档、FAQ 和其他的资源。这些大量的文档对于很好的利用 DNS 的各种功能是非常重要的。这里介绍的工具如:ping、 nslookup、dlint 、 rndc、 dnstop 都是一些检查工具,如果你希望作为一名合格Unix/Linux 的网络管理员就应该从需求方案出发,以客户的需求为导向,配置出我们自己需要的 DNS 服务器,这样不但可以满足需要,还能大大减少我们的工作量,以上这些都是你应当掌握的工具,但并不是说你可以忽略对 DNS 本身的了解。文章转载自网管网:http:/