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