%2f//SZ:
第三章. 域名服务器配置 %2f//SZ:
目录 %2f//SZ:
3.1. %2f//SZ:
范例配置 %2f//SZ:
3.2. %2f//SZ:
负载平衡 %2f//SZ:
3.3. %2f//SZ:
Notify %2f//SZ:
3.4. %2f//SZ:
域名服务器操作 %2f//SZ:
本章我们提供一些典型应用的建议配置,并说明这样写配置的原因。 %2f//SZ:
3.1. 范例配置 %2f//SZ:
3.1.1. 只有缓存功能的域名服务器 %2f//SZ:
下面这个例子是一个公司内部的只作缓存使用的域名服务器的例子,它拒绝所有从外部网络到达的查询。 %2f//SZ:
// 只允许从两个子网访问 Two corporate subnets we wish to allow queries from.acl "corpnets" { 192.168.4.0/24; 192.168.7.0/24; }; // 定义一个访问列表 “corpnets”options { directory "/etc/namedb"; // 定义工作目录 Working directory pid-file "named.pid"; // 在工作目录中设置进程文件Put pid file in working dir allow-query { "corpnets"; }; // 引用前面定义的访问列表”corpnets”};// 根服务器设定Root server hintszone "." { type hint; file "root.hint"; }; // 定义根域,类型为hint,文件名是root.hint// 提供本地回环127.0.0.1的映射Provide a reverse mapping for the loopback address 127.0.0.1zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; notify no;}; %2f//SZ:
3.1.2. 只有主域名服务功能的配置 %2f//SZ:
这个例子中,服务器对域"example.com"做管理服务器,对子域 "eng.example.com"做从属服务器。 %2f//SZ:
options { directory "/etc/namedb"; // 工作目录Working directory pid-file "named.pid"; // 设置工作目录中的PID文件 Put pid file in working dir allow-query { any; }; // 这个是默认配置,允许任何客户机进行查询This is the default recursion no; // 不提供递归查询 Do not provide recursive service};// Root server hintszone "." { type hint; file "root.hint"; }; // Provide a reverse mapping for the loopback address 127.0.0.1zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; notify no;};// 对example.com来说,这是管理域 We are the master server for example.comzone "example.com" { type master; // 设置类型,是主管理型 file "example.com.db"; // 设置数据库名称 // 设置允许作为此主服务器的从属DNS服务器的IP地址 IP addresses of slave servers allowed to transfer example.com allow-transfer { 192.168.4.14; 192.168.5.53; };};// 设置成子域eng.example.com的从属服务器 We are a slave server for eng.example.comzone "eng.example.com" { type slave; file "eng.example.com.bk"; // 设置子域eng.example.com的管理服务器地址IP address of eng.example.com master server masters { 192.168.4.12; };}; %2f//SZ:
3.2. 负载平衡 %2f//SZ:
简单的负载平衡可以用一个名字使用多个A记录来实现。 %2f//SZ:
例如,如果有三个WWW服务器,地址分别是10.0.0.1, 10.0.0.2 和10.0.0.3, 一组如下的记录表示一个客户机有三分之一可能性连接到其中一台服务器: %2f//SZ:
Name %2f//SZ:
TTL %2f//SZ:
CLASS %2f//SZ:
TYPE %2f//SZ:
Resource Record (RR) Data %2f//SZ:
www %2f//SZ:
600 %2f//SZ:
IN %2f//SZ:
A %2f//SZ:
10.0.0.1 %2f//SZ:
%2f//SZ:
600 %2f//SZ:
IN %2f//SZ:
A %2f//SZ:
10.0.0.2 %2f//SZ:
%2f//SZ:
600 %2f//SZ:
IN %2f//SZ:
A %2f//SZ:
10.0.0.3 %2f//SZ:
当客户机查询时,BIND将会轮流以不同顺序回应客户机,例如,客户机随机可能得到的顺序是1, 2, 3; 2, 3, 1;或者3, 1, 2,大多数客户机都会使用得到序列的第一个记录,忽略剩余的记录。 %2f//SZ:
关于查询顺序更多的细节,可以看rrset-order 相关options 陈述,在 %2f//SZ:
RRset Ordering %2f//SZ:
. 这个子句在BIND 9中并不支持, 必须在and only the ordering scheme described above is available. %2f//SZ:
3.3. 告知(Notify) %2f//SZ:
DNS的Notify(告知)机制允许管理服务器通知他们的从属服务器区域数据的改变。对应于管理服务器的NOTIFY(告知)特性,从属服务器会检查区域数据版本,如果不对,从属服务器就启动数据传送。 %2f//SZ:
DNS的告知特性完整描述在RFC 1996中,在also-notify也有描述,参看 %2f//SZ:
Section 6.2.14.6 %2f//SZ:
,更多相关知识,参看 %2f//SZ:
Section 6.2.14.1 %2f//SZ:
. %2f//SZ:
3.4. 域名服务器操作(Nameserver Operations) %2f//SZ:
3.4.1. 使用域名服务器的程序 %2f//SZ:
对系统管理员来说,有几个相互独立的诊断、管理和监控工具,他们可以用来控制和对域名服务器排错。本节讨论 %2f//SZ:
3.4.1.1. 诊断工具 %2f//SZ:
dig %2f//SZ:
dig是domain information groper (groper:澳大利亚隆头鱼)的简称,是一个命令行工具,可以用来收集域名服务器的信息。它有两种工作方式,简单交互式查询方式用于单一的查询,和批处理模式用于查询列表中的服务器,所有选项都用命令行模式。 %2f//SZ:
格式: %2f//SZ:
dig [@server] domain [query-type] [query-class] [+query-option] [-dig-option] [%comment] %2f//SZ:
简单的格式也可以象: %2f//SZ:
dig @server domain query-type query-class %2f//SZ:
更多的信息请参看dig man 。 %2f//SZ:
host %2f//SZ:
host工具提供一个命令行的简章DNS查询,默认这个工具对主机名和IP地址相互进行转换,但它的功能远不只这些。 %2f//SZ:
格式: %2f//SZ:
host [-aCdlrTwv] [-c class] [-N ndots] [-t type] [-W timeout] [-R retries] hostname [server] %2f//SZ:
更多的信息请参看host man 。 %2f//SZ:
nslookup %2f//SZ:
nslookup用来查询互联网的域名服务器,它有两种工作方式,交互式和非交互式,交互式允许用户 通过交互式输入查询多个主机名,非交互式用来只查询一个域或主机。 %2f//SZ:
格式: %2f//SZ:
nslookup [-option...] [host-to-find | - [server]] %2f//SZ:
不带任何参数的nslookup就会进入交互模式, (此时使用默认的DNS服务器) ,如果第一个参数是连接符(`-') ,第二个参数是主机名或者是互联网地址或域名服务器,也会进入交互式。 %2f//SZ:
当互联网地址或者主机名称是第一个参数时,进入非交互式。第二个可选项是指明域名服务器地址或名称。 %2f//SZ:
由于它神秘的用户界面和经常怪异的表现,我们不推荐您使用它,用dig吧。 %2f//SZ:
3.4.1.2. 管理工具 %2f//SZ:
(Administrative tools play an integral part in the management of a server.)!!! %2f//SZ:
named-checkconf %2f//SZ:
named-checkconf 检查named.conf的语法是否正确。 %2f//SZ:
格式:named-checkconf [-t directory] [filename] %2f//SZ:
named-checkzone %2f//SZ:
named-checkzone 检查管理区域文件语法 %2f//SZ:
格式:named-checkzone [-dq] [-c class] zone [filename] %2f//SZ:
rndc %2f//SZ:
是remote name daemon control 的缩写,(rndc) 允许系统管理员操作域名服务器,如果运行rndc 时不加任何选项,它会显示如何使用。 %2f//SZ:
格式:rndc [-c config] [-s server] [-p port] [-y key] command [command...] %2f//SZ:
command包括以下几个: %2f//SZ:
reload %2f//SZ:
重新装入配置文件和区域数据文件。 %2f//SZ:
reload zone [class [view]] %2f//SZ:
重新装入指定的区域文件。 %2f//SZ:
refresh zone [class [view]] %2f//SZ:
按计划维护指定的区域数据文件。 %2f//SZ:
reconfig %2f//SZ:
重新装入配置文件和区域数据文件,但是不装入原来的区域数据文件,即使这个数据文件已经改变。这比完全重新装入要快,当有许多区域数据文件时,它比较有效,因为它避免了检查区域文件是否改变。 %2f//SZ:
stats %2f//SZ:
把服务器统计信息写到统计文件中。 %2f//SZ:
querylog %2f//SZ:
记录查询日志。也可以使用queries category 到一个channel 在named.conf的logging部分。 %2f//SZ:
dumpdb %2f//SZ:
将服务器缓存中的内容存成一个dump文件。 %2f//SZ:
stop %2f//SZ:
停止域名服务的运行,一定要确定动态更新的内容和IXFR已经存入主管理文件。 ;~-M$a
}4
halt ;~-M$a
}4
立即停止服务运行。最近动态更新的内容和IXFR没有存入主管理文件,但当服务重新开始时,它会从日程文件中继续。(journal files ) ;~-M$a
}4
trace ;~-M$a
}4
增加一级服务器的debug等级。 ;~-M$a
}4
trace level ;~-M$a
}4
把服务器的debug等级设置成一个数。 ;~-M$a
}4
notrace ;~-M$a
}4
将服务器的debug级别设为0。 ;~-M$a
}4
flush ;~-M$a
}4
清理(Flush)服务器缓存。 ;~-M$a
}4
status ;~-M$a
}4
显示服务器运行状态。注意区域总数包括了内部的bind/CH 区域和默认隐蔽区域./IN(如果没有明确配置根区)。 ;~-M$a
}4
在BIND 9.2中,rndc支持BIND 8的所有命令,ndc应用除了 ndc start,这个命令在ndc's channel中也取消了。 ;~-M$a
}4
虽然服务器间所有的通讯都是依赖于公钥加密,但配置文件仍是必不可少的。没办法只使用密钥而不使用配置文件。默认的rndc 配置文件是/etc/rndc.conf, 也可以用-c 选项指定一个位置。如果找不到配置文件, rndc 也会在/etc/rndc.key (或者其它BIND编译时配置的sysconfdir)。rndc.key 文件是由rndc-confgen -a 产生的,它的使用参见 ;~-M$a
}4
Section 6.2.4 ;~-M$a
}4
. ;~-M$a
}4
配置文件的格式类似于named.conf,但是只有4个语句:options, key, server和include 。这些语句与服务器密钥相关,通过这些语句,密钥被共享。这些语句对顺序没有要求。 ;~-M$a
}4
Options语句有三个子句:default-server, default-key,和default-port。default-server 指明一个主机名或者是地址,如果在命令行上没有使用-s 选项,这里就指明要连接的服务器。default-key 的参数是密钥的名字,就像key 语句定义的一样。default-port 指明rndc用 哪个端口连接服务器,在命令行上没有指明连接端口时并且server语句中也没有指明时有效。 ;~-M$a
}4
key 语句给一个字符串命名,这个字符串是服务器需要的有效的域名(valid domain name),虽然它不需要分等级,这样,像 "rndc_key" 就是一个有效的名字。key 语句有两个字句, algorithm (规则)和secret ,虽然配置分析器允许任何字符作为参数,但当前只有"hmac-md5" 有意义,密钥是64字节长的字符串。 ;~-M$a
}4
server 语句用key 子句与服务器中的key定义子句(key-defined)联系。Server的参数是主机名或地址(地址必须是双引号内?double quoted)。Key子句的参数是key语句中定义的名字。port 子句指定rndc连接指定服务器所用的端口。 ;~-M$a
}4
一个简单的配置文件如下: ;~-M$a
}4
key rndc_key { algorithm "hmac-md5"; secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";};options { default-server localhost; default-key rndc_key;}; ;~-M$a
}4
这个文件如果像/etc/rndc.conf一样安装,就会允许下面的命令: ;~-M$a
}4
$ rndc reload ;~-M$a
}4
连接本地127.0.0.1端口 953,并且使域名服务重新启动,如果域名服务在本地,并有以下控制语句: ;~-M$a
}4
controls { inet 127.0.0.1 allow { localhost; } keys { rndc_key; };}; ;~-M$a
}4
并且并且在rndc_key中有同样的key语句。 ;~-M$a
}4
运行rndc-confgen程序,可以方便的建立一个rndc.conf文件,同时也会显示需要添加到named.conf中对应的controls 语句。也可以运行rndc-confgen -a 来建立一个rndc.key文件,这样就不需要改变named.conf。 ;~-M$a
}4
3.4.2. 信号(Signals) ;~-M$a
}4
一定的UNIX信号会导致域名服务器产生特定的动作,如下表所描述。这些信号可以由kill 命令产生。 ;~-M$a
}4
SIGHUP ;~-M$a
}4
使服务器读named.conf并且重新装入数据库 。 ;~-M$a
}4
SIGTERM ;~-M$a
}4
使服务器清理干净并退出。(干净的退出?) ;~-M$a
}4
SIGINT ;~-M$a
}4
使服务器清理干净并退出。 ;~-M$a
}4
;~-M$a
}4