建立和实施域名系统(DNS)对于建立和运行你的无线局域网代理服务器环境是非常重要的。本文是关于使用一个Linux基础建立安全的无线局域网的《路由器专家》系列讲座的一部分,主要介绍建立BIND(伯克利互联网域名)的基础知识以及建立DNS的问题。 运行你自己的DNS实体是无线局域网解决方案的一个要求。首先,你需要提供一些方法让用户解析域名请求。由于在无线局域网环境中仅允许使用http/https通讯,DNS服务器需要能够在本地访问。如果你不想运行一台DNS服务器,或者如果你已经有了一台用于你的域名的DNS服务器(你不介意无线局域网用户访问),你可以使用在IOS路由器上的反向NAT(网络地址转换)提供对你的服务器的本地IP级访问。此外,你需要为代理服务器设置一些基本的主机登录项,以便让代理服务器自动使这个功能生效。如果你已经拥有了一台本地DNS服务器,你可以仅增加域名和主机登录项,跳过建立DNS服务器这一项。 DNS服务器由三部分组成: 1.名为“named”的Unix/Linux守护程序。named是许多与DNS相关的发布的二进制程序之一,是互联网系统协会(ISC)维护的BIND发布版软件。BIND发布版软件是大多数Linux系统、Sun Solaris操作系统和苹果的OS X操作系统使用的“标准的”DNS发布版软件。这个软件目前的发布版本是9.3.2。保持你的BIND发布版软件处于最新的状态是一个好主意。DNS是一项重要的网络服务,而且其安全漏洞刚刚使用补丁很快就会被利用。除了named之外,DNS服务器查询工具dig、DNS解析工具host以及价值已经下降但是仍很有用的DNS解析工具nslookup等都是BIND发布版软件的一部分。 2.配置文件“named.conf”。虽然从技术上说这个文件被认为是“named”的一部分,但是,named.conf文件是你的DNS发布的基础。这个文件定义守护程序如何应答来自不同主机的DNS请求。named界面将监听有关DNS数据库文件在什么地方的查询以及服务器将提供什么域名的应答。 3.DNS数据库或者“区域”文件。不用深入了解DNS的工作原理,DNS系统是一个以倒置树层次的方式工作的DNS服务器的全球网络。在顶端是根DNS服务器,负责统领其它的DNS服务器,可对其它DNS服务器行使权利。这意味着这些服务器是其具体DNS域的把域名解析为IP地址的主要参考。在一个域内,可能有一台以上的DNS服务器用于备份和分担负载。在这种设置中,一台服务器将作为这个域的主服务器,其它的是从服务器。从服务器定期与主服务器通话并且更新其DNS区域文件。区域文件分为两类:向前查询和反向查询。对于DNS服务器有权限的每一个域来说,向前查询和反向查询数据库文件是必要的。 建立BIND 建立BIND的过程是很简单的。然而,由于我们要在一台连接到我们的安全网络和我们的无线局域网网段的服务器上运行这个服务,我们要尽可能地保持那台服务器的安全。最好是在“chroot jail”环境中运行named,尽管这样做比使用标准的程序要多做一些工作。 首先,我们要从isc.org得到代码: root@tridant root# wget http://ftp.isc.org/isc/bind9/9.3.2/bind-9.3.2.tar.gz --12:55:08-- http://ftp.isc.org/isc/bind9/9.3.2/bind-9.3.2.tar.gz => `bind-9.3.2.tar.gz' Resolving ftp.isc.org... done. Connecting to ftp.isc.org[204.152.184.110]:80... connected. HTTP request sent, awaiting response... 200 OK Length: 5,302,112 [application/x-gzip] 100%[=========================================================================== ==========================================>] 5,302,112 257.60K/s ETA 00:00 12:55:29 (257.60 KB/s) - `bind-9.3.2.tar.gz' saved [5302112/5302112] 然后,我们使用tar软件释放这些压缩的build文件: root@tridant root# tar xvfz bind-9.3.2.tar.gz 一旦我们下载了这个来源并且把这些源文件释放到一个build目录,我们需要通过建立jail目录来建立chroot jail并且创建named用户和组。 root@tridant root# mkdir -m 700 /usr/local/named root@tridant root# mkdir -p /usr/local/named/etc root@tridant root# mkdir -p /usr/local/named/lib root@tridant root# mkdir -p /usr/local/named/dev root@tridant root# mkdir -p /usr/local/named/usr/sbin root@tridant root# mkdir -p /usr/local/named/var/named root@tridant root# mkdir -p /usr/local/named/var/run root@tridant root root# adduser named -s /bin/nologin 建立jail之后,我们可以移动到build目录,方法是使用“-prefix”前缀选项运行设置,这样,这个应用程序就可以安装到jail中了。接下来,我们运行make命令,进行安装。 root@tridant root# cd bind-9.3.2 root@tridant root#./configure --prefix=/usr/local/named root@tridant root# make root@tridant root# make install 在完成BIND安装过程之后,我们就要完成构建这个单元。首先,我们要设置这个单元二进制和数据库目录的合适的拥有者: root@tridant root# chown -R named /usr/local/named root@tridant root# chgrp -R named /usr/local/named 第二,我们为这个单元创建设备文件: root@tridant root# mknod -m 666 /usr/local/named/dev/null c 1 3 这个单元安装过程的最后一步是找到和复制named二进制库的依据。不访问这些共享的库,这个named服务就不能运行。这是因为当运行完了chroot jail之后,这个守护程序没有系统级的访问这些库的权限。要找出这些库的依据,我们需要执行ldd命令。这个命令能够显示出共享的库和它们的位置。 root@tridant root# ldd /usr/local/named/sbin/named libcrypto.so.4 => /lib/libcrypto.so.4 (0xb74f2000) libnsl.so.1 => /lib/libnsl.so.1 (0xb74dd000) libc.so.6 => /lib/tls/libc.so.6 (0xb73a6000) libdl.so.2 => /lib/libdl.so.2 (0xb73a3000) libz.so.1 => /usr/lib/libz.so.1 (0xb7395000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000) 我们一旦拥有这些信息,我们仅需要在这个jail中重新创建这个库的目录并且把这些库复制一遍就可以了。 root@tridant root# mkdir /usr/local/named/lib/tls root@tridant root# mkdir /usr/local/named/usr/lib root@tridant root# cp /lib/libcrypto.so.4 /usr/local/named/lib/ root@tridant root# cp /lib/libnsl.so.1 /usr/local/named/lib/ root@tridant root# cp /lib/tls/libc.so.6 /usr/local/named/lib/tls/ root@tridant root# cp /lib/libdl.so.2 /usr/local/named/lib/ root@tridant root# cp /usr/lib/libz.so.1 /usr/local/named/lib/ root@tridant root# cp /usr/lib/libz.so.1 /usr/local/named/usr/lib root@tridant root# cp /lib/ld-linux.so.2 /usr/local/named/lib/ 家政任务 完成BIND安装之后,还有一些Linux家政事务需要料理。因为我们是在标准的目录树(也就是, /usr/bin、 /usr/local/bin等)之外安装的BIND,说明文件还不能访问,用户执行的dig、host和nslookup等二进制命令还不是新的命令,而是安装Linux系统的时候安装的那些命令。一旦这些二进制命令编译完成,还需要对$PATH和$MANPATH语句进行调整。这些路径语句定义这些目录,让外壳程序搜索并找到你在命令提示符之下输入的这些二进制或者说明文件的目录。$PATH语句设置在几个地方,整个系统范围的路径设置位于/etc/profile目录下。要在整个系统范围的路径中包含/usr/local/named/bin,你可以编辑/etc/profile文件: root@tridant root# vi /etc/profile # Path manipulation if [ `id -u` = 0 ]; then pathmunge /sbin pathmunge /usr/sbin pathmunge /usr/local/sbin pathmunge /usr/local/named/bin <- Add this path to the end of the list fi :wq root@tridant root# 替代的方法是,如果你仅仅要修改你的路径并且保持系统范围的路经不变,你可以在你的主机目录中修改.bashrc文件并且添加修改路径的语句: root@tridant root# vi .bashrc # .bashrc PATH=$PATH:/usr/local/named/bin <- Add new path statement # User specific aliases and functions :wq root@tridant root# $MANPATH也可以在你的$HOME/.bashrc文件中定义。但是,系统范围的变量要在/etc/man.config文件中设定。 root@tridant root# vi /etc/man.config # Every automatically generated MANPATH includes these fields # MANPATH /usr/share/man MANPATH /usr/man MANPATH /usr/local/share/man MANPATH /usr/local/man MANPATH /usr/X11R6/man MANPATH /usr/local/named/man <- Add this line to the end of the list . . : wq root@tridant root# 现在,路径语句应该全都设置完了。(要使修改生效,你需要登出,然后再重新登录)。我们需要关闭老的dig、host和nslookup等二进制命令,在启动过程中配置服务器装载named。你可以使用RPM命令删除这个软件包。但是,由于RPM命令是相互依赖的,删除这个软件包也许会造成其它软件包损坏,即使你安装了正确的二进制命令也是如此。要卸载这个bind-utils软件包,你可以进行如下操作: 找到软件包。 root@tridant root# rpm -qa | grep bind-* bind-utils-9.2.2-21 ypbind-1.12-1 root@tridant root# 然后卸载这个软件包。 root@tridant root# rpm -e bind-utils 替代的方法是仅仅修改这些二进制程序的名称。这种方法可以消除依赖于RPM的用户可能提出的投诉。如果发现问题,你还可以使用这些老的二进制程序。但是,你有可能在你的服务器上留下一些你可能永远也不会使用的文件。这个选择由你决定。 root@tridant root# mv /usr/bin/host /usr/bin/host.old root@tridant root# mv /usr/bin/dig /usr/bin/dig root@tridant root# mv /usr/bin/nslookup /usr/bin/nslookup.old 经常阅读本网站内容的读者应该能够回忆起Unix/Linux启动执行脚本位于/etc/rc.d目录中,特别是位于/etc/rc3.d目录中。有许多方法可以找到这个启动程序。第一个和最简单的方法是向rc.local file /etc/rc3.d/S99local或者/etc/rc.local文件增加一个命令(这两个文件是一样的)。 root@tridant root# vi /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /usr/local/named/sbin/named -u named -c /usr/local/named/etc/named.conf <- Add this line :wq root@tridant root# vi 上述操作将在启动时开始一项服务,仅此而已。现在,由于named基本上是一个数据库服务器,而且数据库需要不断地更新,因此你在对DNS域文件进行修改之后(如增加或者删除一个主机)不用每一次都重新启动服务器。如果你每一次更新区域文件时都使用rc.local的方法,你将需要重新装载这个服务器。使用kill命令加上-HUP或者hang-up选项可以完成这个工作。这个命令将重新装载服务器。要这样做,你需要找到named的进程ID: root@tridant root# ps -aux | grep named named 9890 0.0 0.2 4472 2392 ? S 18:46 0:00 /usr/local/named/sbin/named -u named -c /usr/local/named/etc/named.conf root@tridant root# 然而,执行Kill命令: root@tridant root#kill -HUP 9890 <- That's the named process ID 替代这种操作的方法是建立一个rc装载器脚本,你把这个脚本安装到/etc/rc3.d目录下。这不仅能够在启动时装载这个服务,而且还有一个重新装载的选项。这样,你每一次对区域文件进行修改时你都可以输入如下命令:root@tridant root#/etc/rc3.d/S98named reload 这个过程将重新开始并且装载区域文件。下面是我们刚刚建立的named实施的一个装载器脚本: #$!/bin/sh # rc loader script for named # program variables: PID="/usr/local/named/var/run/named.pid" BIN="/usr/local/named/sbin/named" CONF="/usr/local/named/etc/named.conf" PROG="$BIN -u named -c $CONF" # # Check that networking is up. if [ "$NETWORKING" = "no" ]; then echo "no net serv"; exit 0 fi prog=named # start() { echo $"Starting $prog " if [ -f $CONF ]; then $PROG > /dev/null 2>&1 else echo "No $prog config" exit 1 fi } # reload() { echo $"Reloading $prog " kill -HUP `cat $PID`;exit } # stop() { echo $"Stopping $prog " kill -9 `cat $PID`;exit } # case "$1" in start) start ;; reload) reload ;; stop) stop ;; *) echo $"Usage: $0 {start|reload|stop}" exit 1 esac 你拷贝下来这个脚本并且把它粘贴到一个名为/etc/rc3.d/S98named的文件中,你就可以运行了。最后一个窍门:如果你在让named运行的过程中遇到什么问题,你需要看一下这个服务器在做什么。开发人员提供了一个在前面运行named的选项,并且提供了调试的输出。要在这种模式下运行named,你可以在这个命令句法的开头加上-g: [root@euc-ux-01 zones]# /usr/local/named/sbin/named -g -u named -c /usr/local/named/etc/named.conf 25-Jun-2006 19:38:45.381 starting BIND 9.3.2 -g -u named -c /usr/local/named/etc/named.conf 25-Jun-2006 19:38:45.383 loading configuration from '/usr/local/named/etc/named.conf' 25-Jun-2006 19:38:45.387 no IPv6 interfaces found 25-Jun-2006 19:38:45.387 listening on IPv4 interface lo, 127.0.0.1#53 25-Jun-2006 19:38:45.388 listening on IPv4 interface eth0, 172.30.40.2#53 25-Jun-2006 19:38:45.389 ignoring config file logging statement due to -g option 25-Jun-2006 19:38:45.390 zone 0.0.127.in-addr.arpa/IN: loaded serial 5 25-Jun-2006 19:38:45.390 zone 75.109.156.in-addr.arpa/IN: loaded serial 5 25-Jun-2006 19:38:45.391 zone cell.outland.net/IN: loaded serial 5 25-Jun-2006 19:38:45.391 zone localhost/IN: loaded serial 5 25-Jun-2006 19:38:45.391 running 25-Jun-2006 19:38:45.392 zone 0.0.127.in-addr.arpa/IN: sending notifies (serial 5) 25-Jun-2006 19:38:45.392 zone localhost/IN: sending notifies (serial 5) 25-Jun-2006 19:38:45.392 zone 75.109.156.in-addr.arpa/IN: sending notifies (serial 5) 25-Jun-2006 19:38:45.392 zone cell.outland.net /IN: sending notifies (serial 5) 现在让我们建立named.conf文件。 named.conf文件配置 我们将设置的服务器可以作为解析程序、有授权能力的或者没有授权能力的DNS服务器。一个DNS解析服务器也称作缓存名称服务器,主要从事外部主机的DNS查找工作。它实施主机查找工作并且把DNS查找请求发送给其它的DNS服务器。有授权能力的服务器包含你的域的主DNS服务器的记录。当需要作为这个域的一部分的主机的名称和IP地址信息时,有授权能力的服务器将接受本地和外部的查询。这种服务器是全球DNS网络的一部分并且列为你的域名注册的一部分。一个有授权能力的服务器是你的域的主机信息的绝对权威。这种服务器还能为这个域中的用户查找这个域以外的主机名。没有授权能力的DNS服务器仅在本地实施查找并且仅托管与本地有关的区域信息,不接受域外部的查询。我们的无线局域网环境需要一个没有授权能力的DNS服务器。 解决named.conf文件的最简单的方法是分三个部分观察这个文件: 第一部分:服务器行为和选项语句 第二部分:本地主机区域和根服务器配置 第三部分:本地域区域文件 第一部分:服务器行为和选项语句 这个文件开头的语句是定义二进制和支持文件所在的目录。这个语句包括监听查询的IP接口和绑定监听者的服务端口: // Section One: daemon operation options { directory "/usr/local/named/var/named"; query-source port 53 ; listen-on { 192.168.40.2; 127.0.0.1;}; }; 除了这些基本的定义之外,考虑实施接入控制也是一个好主意。有两种类型的接入控制。第一种允许你控制谁向这个服务器发送DNS请求(并且可以期待一个答复)。 首先,你需要创建这个用户组ACL。例如,我们假设这个无线局域网支持三个不同的用户组:第一组仅有未进行身份识别的互联网http接入,第二组有经过身份识别的互联网http/https接入,第三组有未进行身份识别的互联网http/https接入和通过一个有身份识别的VPN连接建立的专用网络。组的分类是通过节点IP地址管理的。当你加入这个无线局域网时,你将被分配一个反映你的用户类别的IP地址。现在,要支持这些不同的组,网络基础设施需要允许这些网段之间进行路由。然而,我们让第一组和第二组用户使用一个DNS服务器,让第三组使用另一个DNS服务器。这样,我们就创建了二个ACL组。一个命名为“WLAN-Private”,另一个命名为“WLAN-CELL”。WLAN-Private组拥有通过VPN访问的专用网络接入。WLAN-CELL组拥有http/https接入。 acl WLAN-Private { 172.30.40.32/28 }; acl WLAN-CELL { 192.168.20.0/27 192.168.30.0/24 localhost }; options { blackhole { WLAN-Private; }; allow-query { WLAN-CELL; }; } ACL语句是使用NETWORK/PREFIX语句定义的。此外,有四个预先定义的列表: Any - 与所有的IP地址相匹配。 Localhost - 与这个服务器使用的IP地址相匹配。 Localnets - 与这个服务器直接连接的任何网络的IP地址相匹配。 None - 不与任何IP地址相匹配。 第二个接入控制要素一般仅与你的DNS服务器有关,而且只有在你的DNS服务器是有授权能力的并且支持其它域查询的一个域才有关系。 Options { allow-transfer { none; }; 这个选项关闭了一位未知用户下载你的DNS区域文件的能力。这个做法最初看起来似乎有些奇怪,因为对数据库中列出的每一个主机进行查询都是允许的。这里的区别是这个域以外的用户一般仅使用你的域中的一、二个主机,如一个域的邮件或者http服务器。允许一个未经授权的用户下载你的区域数据库能够使他们得到这个域中的每一个主机的镜像。如果你恰当地为你的环境加密,ICMP扫描等类似的活动就不会暴露你的域有多少台主机。当坏蛋经常监视一个目标的时候,他们设法做的第一件事情就是下载你的DNS服务器的区域文件。作为一项安全防护措施,最好把这一部分增加到任何服务器设置中。 第二部分:本地主机区域和根服务器配置 现在我们来介绍第二部分或者是解析服务器部分。每一台DNS服务器至少由一套区域文件。那套文件是本地主机使用的,是一套标准的区域文件。这套文件包含一个向前查询数据库和一个反向查询数据库和一个线索文件。这个线索文件称作“root.hints”,是一个所有互联网根名服务器的列表,可以从ftp.rs.internic.net网站下载。这个线索文件位于/usr/local/named/var/named目录中。这个区域数据库文件位于/usr/local/named/var/named/zones目录中。获得这个线索文件的最佳方法是使用下载工具wget直接从适当的目录下载。 root@tridant root# wget ftp://ftp.rs.internic.net/domain/named.root > /usr/local/named/var/named/root.hints --16:22:19-- ftp://ftp.rs.internic.net/domain/named.root => `named.root' Resolving ftp.rs.internic.net... done. Connecting to ftp.rs.internic.net[198.41.0.6]:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD /domain ... done. ==> PASV ... done. ==> RETR named.root ... done. Length: 2,517 (unauthoritative) 100%[================================================================== ====================================================>] 2,517 27.01K/s ETA 00:00 16:22:21 (27.01 KB/s) - `named.root' saved [2517] root@tridant root# 这个named.root文件每个月更新一次。一个好主意是设置一个定时工作,每个月下载一次这个文件以保持你的DNS服务器处于最新的状态。 根据你的DNS管理员的喜好,这个root.hints文件也可以称作named.ca、named.root或者named.hint。线索和区域文件名并不是一成不变的。你给这些文件起什么名字都可以。但是,合适的做法是使用一些标准约定的名称,如root或者hints、或者in-addr(用于反向区域)和db.domain或者domain.zone(用于向前区域文件)。下面是解析服务器部分的一个例子: \\ Root Name Servers zone "." IN { type hint; file "root.hints"; }; \\ Localhost reverse zone zone "0.0.127.in-addr.arpa" IN { type master; file "zones/in-addr-0.0.127"; }; \\ Localhost forward zone zone "localhost" IN { type master; file "zones/localhost.zone"; }; 第三部分:本地域区域文件 named.config文件的第三部分是本地区域文件的位置镜像。如果你的服务器就是一台解析服务器,那么,你可以跳过创建这个区域文件部分以建立本地主机数据库。如果你在实施一个有授权能力的或者没有授权能力的服务器,你要创建这个域和子域的登录项(和数据库文件)。下面是本地域的一个语句的例子: \\ Local Zone Files \\ rev zone for 172.30.40.32 zone "32.40.30.172.in-addr.arpa" IN { type master; file "zones/in-addr-32.40.30.172"; allow-update { none; }; }; \\ fw zone file for wlan.outlan.net zone "wlan.outlan.net" IN { type master; file "zones/outlan.zone"; allow-update { none; }; }; 一旦你创建了你的named.conf文件,剩下要做的事情就是检查这个文件。ISC提供了一个名为“named-checkconf”的named.conf语句检查工具。这个工具位于/usr/local/named/sbin目录下。运行这个工具很容易,告诉这个工具软件你要检查的文件在什么地方就可以了。如果你运行这个工具并且没有得到反馈,这个文件就是正确的。如果有一些错误,这个工具软件就会告诉你是什么错误和发生在什么地方。 创建区域文件 DNS服务器区域文件是平坦文件数据库文件,由不同的DNS资源记录组成。区域文件有两种:向前查询区域文件,用于把主机名解析为IP地址;反向查询区域文件,用于将IP地址解析为主机名。正如你早就知道的那样,大多数基本的DNS服务器至少需要两个文件:一个Localhost.zone向前查询区域文件和一个1.0.0.127.in-addr.arpa反向查询区域文件。这些区域文件由30多个DNS资源记录组成。这些DNS资源记录目前在“IN Internet”互联网资源类中。还有另外两个正式命名的类:Hesiod和Chaos。这两个类也是经常使用的。在IN资源中的30多个可用的资源记录中,第六类是最常用的: TypeIANA valueRFC A1 – 主机地址RFC 1035 NS2 – 域名服务器rRFC 1035 CNAME5 – 标准名RFC 1035 SOA6 – Start of zone authorityRFC 1035 PTR12 – 域名指针RFC 1035 MX15 – 邮件交换RFC 1035 转发区数据库包含一个SOA记录、NS记录和任何数量的A、CNAME和MX记录。反向区域数据库包含一个SOA记录、NS记录和PTR记录。现在你知道这两种类型的区域数据库的组成了。让我们再深入研究一下这些记录代表什么,它们的使用和格式。 A记录是最普通的资源记录类型。A资源记录时向前查询区域数据库中使用的。它把人类的名字翻译成IP地址以支持向前的DNS查询。A记录时所有连接到网络的由DNS系统的支持的计算机所需要的基本的DNS记录。A记录的格式是完全合格的域名,结尾是一个句号。A记录的后面是资源记录类、记录类型和记录值。下面是一个例子: rtr-01.outlan.net. IN A 172.30.80.1 ns.outlan.net. IN A 172.30.80.24 smtp.outlan.net. IN A 172.30.80.16 大多数网络使用子域把IP子网解析为一个named层阶。采用这种方法需要为每一个子域创建区域文件(或者至少在发送区域数据库创建区域文件)。下面是一个子域的A记录的例子: rtr-02.cell.outlan.net.net IN A 192.168.20.1 NS记录是定义一个区域有授权能力的DNS服务器的一种特殊的记录。向前和反向查询区域数据库中使用NS资源记录。这些记录一般是在SOA记录之后的区域文件中第一个登录项。NS资源记录的格式是域或者子域、记录类、记录类型NS,以及zone. pre> outlan.net IN NS ns.outlan.net这个区域的具有授权能力的域名服务器的A记录。 CNAME资源记录提供一个别名的功能。CNAME资源记录用于向前查询区域数据库中,能够让管理员为拥有合法A记录的物理主机建立域名指针。例如,我们说,我们要把每一个子网的默认网关路由器称作“gw.sub-domain.domain.net”。我们将为每一个子域/IP子网建立CNAME资源记录。CNAME资源记录的格式是完全合格的域名(结尾是一个句号),后面是记录类和记录类型CNAME,数据值与目标主机的A记录相同: gw.cell.outlan.net. IN CNAME rtr-02.cell.outlan.net. SOA资源记录包含这个区域的运行属性。SOA是每一个发送区域和反向区域数据库文件的第一个资源记录。它的前面只有(可选择)区域文件的生存时间值。SOA值以组合方式表达:日期=d#、小时=h#、分钟=m#或者秒=#。SOA记录包含下列信息: 1.这个区域主要DNS服务器的域名。 2.这个区域负责方面的电子邮件地址,以电子邮件-id.domain.com的格式表示。(也就是hostmaster.outlan.net) 3.区域文件的序号。备份DNS服务器可使用这个序号查看这个区域数据是否改变了。这个数字可以是任何值。如果备份服务器拥有的序号低于主机的号码,备份服务器可以实施一项区域传输。最常用的格式是使用日期、月和年的格式。 4.刷新,备份DNS服务器应该多长时间进行一次检查,以查看是否做出了区域改变。 5.重试,如果刷新失败,备份DNS服务器应该多长时间进行一个改变。 6.过期,在一次刷新之后,区域信息应该保留多长时间有效。在这个时间过期之后,这个数据应该删除。 7.最低生存时间,新区域数据库记录的生存时间。 SOA资源记录的格式一开始是域名(也就是outlan.net)、变量$ORIGIN或者@( 当使用$ORIGIN或者@时,这个域是根据named.conf区域定义选择的)。这后面是记录类、记录类型SOA和SOA数据字段。下面是带区域生存时间声明的一个SOA的例子: $TTL 24H ; outlan.net IN SOA ns.outlan.net. hostmaster.outlan.net. ( 5 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL PTR资源记录是一个反向的A记录。它提供IP地址至域名的镜像。PTR资源记录用于反向查询区域数据库。由于反向的IP地址解析的值表面上看是容易理解的,并不需要PTR记录。这些记录已经成为某些互联网应用程序的一个后门安全检查,但是,这些记录并不总是存在。这主要是由于这样一个事实,PRT记录的责任由IP地址领域的所有者负责。多数情况是,提供网络服务的ISP负责这个记录,而不是由这个域的所有者或者管理这个域的域名注册机构负责。然而,如果你拥有/管理你自己的IP地址空间(或者像我们对待无线局域网解决方案那样保持一个专有域名),你就要负责创建一个包含这个域的A记录的发送区域文件并且创建一个包含这个域的PTR记录的反向区域文件。PTR记录的格式是子网IP地址的最后一个八位字节,或者是第四、第三、第二、第一个八位字节.in-addr.arpa.、记录类、记录类型PTR和这个主机的A记录。 1 IN PTR rtr-01.outlan.net. 或者 1.80.30.172.in-addr.arpa. IN PTR rtr-01.outlan.net. MX资源记录是定义邮件服务器或者一个域的服务器的一种特殊的记录。MX资源记录用于向前查询区域数据库。MX记录把域名(或者子域名)镜像到一台邮件服务器或者一组邮件服务器。当定义多台服务器时,每一个MX记录都有一个优先值。拥有最低值的记录处于优先的位置。每一个MX值必须指向一个合法的A记录。MX资源记录的格式是域名或者子域名、资源记录类、资源记录类型MX、优先等级和邮件服务器的A记录: pre> outlan.net. IN MX 10 smtp.outlan.net. outlan.net IN MX 20 smtp.svr.outlan.net. 下面是完整的前方localhost.zone(本地主机区域): ; localhost.zone $TTL 12H ; @ IN SOA ns.outlan.net. hostmaster.outlan.com. ( 5 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL ; IN NS ns.outlan.net. localhost. IN A 127.0.0.1 ;end 为上述named.conf配置文件转换in-addr-0.0.127文件看起来是这样的: ; in-addr-0.0.127 $TTL 12H @ IN SOA ns.outlan.net. hostmaster.outlan.com. ( 5 ; Serial 8H ; Refresh 2H ; Retry 4W ; Expire 1D) ; Minimum TTL ; IN NS ns.mckinsey.com 127.0.0.1 IN PTR localhost. ;end 这两个文件都使用@域名声明,因此,这两个文件可作为创建你自己的向前和反向区域文件的模板。 虽然这篇文章还不是有关实施BIND和一台DNS服务器的最完整和最可靠的结论,但是,本文应该向你提供了在我们的无线局域网环境中实施必要的DNS支持所需要的足够的信息。下一次,我们将开始介绍实施最后的组件squid代理服务器和实施Web代理自动发现协议(WPAD)。 |
Powered by Discuz!
© 2003-2024 广州威思信息科技有限公司