Solaris 10虽然自带了BIND 9.2.4版本,但它并不是Sun公司的产品,Internet Software Consortium负责BIND软件的更新,我们应当到 http://www.isc.org/ 网站下载最新版本的BIND软件,因为新的版本的软件可以防止某些漏洞。
  下面我们来介绍如何配置DNS服务器。
  一、从源代码安装配置DNS服务器
  (1)为了下载最新的BIND软件,我们到 http://www.isc.org/products/BIND/ 下载,本例子下载的是bind-9.3.2.tar.gz。
  (2)将下载的软件放到系统中的某个目录下,本例中放在usr/local/src目录下。
  #cd usr/local/src
  # wget http://ftp.isc.org/isc/bind9/9.3.2/bind-9.3.2.tar.gz
  # cp bind-9.3.2.tar.gz ..
  # cd ..
  # gzip -d bind-9.3.2.tar.gz
  # tar -vxf bind-9.3.2.tar
  # rm bind-9.3.2.tar
  # cd bind-9.3.2
  # ./configure
  # make
  # make install
  # cd /usr/sbin
               (3)生成的可执行文件位于/usr/local/sbin目录下。最重要的可执行文件为named和rndc。
  # /usr/local/sbin/rndc-confgen > /etc/rndc.conf
  # cat /etc/rndc.conf
  输出为:
  # Start of rndc.conf
  key "rndc-key" ...{
  algorithm hmac-md5;
  secret "y9xvvfQjdWv9f/Fo7wquBg==";
  };
  options ...{
  default-key "rndc-key";
  default-server 127.0.0.1;
  default-port 953;
  };
              # End of rndc.conf
  # Use with the following in named.conf, adjusting the allow list as needed:
  # key "rndc-key" ...{
  # algorithm hmac-md5;
  # secret "y9xvvfQjdWv9f/Fo7wquBg==";
  # };
  # controls ...{
  # inet 127.0.0.1 port 953
  # allow ...{ 127.0.0.1; } keys ...{ "rndc-key"; };
  # };
  # End of named.conf
  (9)创建rndc.key文件。将rndc.conf文件中注释部分拷贝生成如下文件:
  # vi /etc/rndc.key
  key "rndc-key" ...{
  algorithm hmac-md5;
  secret "y9xvvfQjdWv9f/Fo7wquBg==";
  };
               controls ...{
  inet 127.0.0.1 port 953\
  allow ...{ 127.0.0.1; } keys ...{ "rndc-key"; };\
  };
  检查rndc是否正常工作:
  #/usr/local/sbin/named -g
  Jan 11 11:56:45.075 starting BIND 9.2.3 -g
  Jan 11 11:56:45.076 using 1 CPU
  Jan 11 11:56:45.079 loading configuration from '/etc/named.conf'
  ......
  #/usr/local/sbin/rndc status
  (10)编辑named.conf配置文件。
  # vi /etc/named.conf
  第一段的内容如下:
  // generated by named-bootconf.pl
  options ...{
  directory "/var/named";
  /**//*
                      * If there is a firewall between you and nameservers you want
  * to talk to, you might need to uncomment the query-source
  * directive below. Previous versions of BIND always asked
  * port by default.
  */
  // query-source address * port 53;
  };
  上面的部分是在这个文件开头的options设定的,首先用directory指定了named的资源记录(RR - Resource Record文件目录所在位置为:“/var/named”。也就是说,它会到这个目录下面寻找DNS记录文件)。所以,我们在后面部分所指定的文件,就无须使用绝对路径了,但它们一定要放在这个目录下面。
  那一段被注释文字,如果你仔细阅读一下,它大致意思是如果你要设定的 DNS 服务器和client之间隔着防火墙的话,要将“//query-source address * port 53;”前面的注解符号“//”拿掉(当然,也必须要设定好你的火墙)。不过,这只对早期的版本有影响,而在bind 8.1之后则无须担心这个设定。接下来再让我们看下一段句子:
  //
  // a caching only nameserver config
  //
  zone "." IN ...{
  type hint;
  file "named.root";
  };
               通过这几行语句,我们为named定义了DNS系统中的根区域“.”(root zone)的设定,同时它是一个internet(IN)的区域类别。这里还指定了root zone的服务器种类(type)为“hint”(也只有这个zone会使用这样的种类)。最后,用file指定这个区域记录文件为:“named.root”,也就是“/var/named/named.root”文件。在root zone后面,你应该还会看到如下这两段:
  zone "localhost" IN ...{
  type master;
  file "localhost.zone";
  allow-update ...{ none; };
  };
  zone "0.0.127.in-addr.arpa" IN ...{
  type master;
  file "named.local";
  allow-update ...{ none; };
  };
  这里是定义出关于本机名称的DNS解释:第一个zone是localhost的正解zone,其服务器种类是master,记录档名称是localhost.zone(在/var/named目录下面),但这个zone不允许客户主机(或服务器)自行更新DNS的记录。而第二个zone则是本机区域的反向解析zone。
  再看下面的两段,这两段是cjh.com域的正向和反向解析。
  zone "cjh.com" IN ...{ //新加cjh.com的域
  type master;
  file "cjh.com.zone";
  allow-update ...{ none; };
  };
                zone "9.168.192.in-addr.arpa" IN ...{ //新加域的反向解析
  type master;
  file "named.192.168.9";
  allow-update ...{ none; };
  };
  最后一行是bind 9.x版本的新功能,用来进行区域转移或DNS更新所用的加密处理。
  include "/etc/rndc.key";
  (11)创建/var/named目录。
  # mkdir /var/named
  # cd /var/named
  (12)匿名登录到ftp站点 FTP.RS.INTERNIC.NET,获取/domain目录下的named.root文件,将该文件置于/var/named目录下。
  (13)创建localhost.zone文件。
  # vi /var/named/localhost.zone
  $TTL 86400
  $ORIGIN localhost.
  @ 1D IN SOA @ root (
  42 ; serial (d. adams)
                3H ; refresh
  15M ; retry
  1W ; expiry
  1D ) ; minimum
  1D IN NS @
  1D IN A 127.0.0.1
  (14)创建named.local文件。
  # vi named.local
  $TTL 86400
  @ IN SOA localhost. root.localhost. (
  2005022700 ; Serial
  28800 ; Refresh
  14400 ; Retry
  3600000 ; Expire
  86400 ) ; Minimum
  IN NS localhost.
  1 IN PTR localhost.
                  [root@Linux etc]# mkdir /var/named
  //进入/var/named
  [root@Linux etc]# cd /var/named
  //建立localhost.zone文件
  [root@Linux named]#vi localhost.zone
  $TTL 86400
  $ORIGIN localhost.
  @ 1D IN SOA @ root (
  42 ; serial (d. adams)
  3H ; refresh
  15M ; retry
  1W ; expiry
  1D ) ; minimum
  1D IN NS @
  1D IN A 127.0.0.1
  //建立named.local文件
  [root@Linux named]#vi named.local
                   $TTL 86400
  @ IN SOA localhost. root.localhost. (
  1997022700 ; Serial
  28800 ; Refresh
  14400 ; Retry
  3600000 61.177.252 ; Expire
  86400 ) ; Minimum
  IN NS localhost.
  1 IN PTR localhost.
  
  (15)创建cjh.com.zone文件。
  # vi cjh.zone
  $TTL 1D
  @ IN SOA cjh.com. root.cjh.com. (
  
  1053891162
  3H
  15M
  1W
  1D )
              IN NS cjh.com.
  IN MX 5 cjh.com.
  www IN A 192.168.9.9
  
  (16)创建named.192.168.9文件。
  # vi named.192.168.9
  $TTL 86400
  @ IN SOA cjh.com. root.cjh.com.(
  20031001;
  7200;
  3600;
  43200;
  86400);
  @ IN NS cjh.com.
  9 IN PTR dns.cjh.com.
                 (17)在Solaris 10操作系统中启动DNS服务。
  #svcadm enable /network/dns/server
  查看:
  # svcs -l /network/dns/server
  fmri svc:/network/dns/server:default
  name Internet domain name server (DNS)
  enabled true
  state online
  next_state none
  restarter svc:/system/svc/restarter:default
  contract_id 25
  dependency require_all/none svc:/system/filesystem/minimal (online)
  dependency require_all/none file://localhost/etc/named.conf (online)
  dependency require_any/error svc:/network/loopback (online)
  dependency optional_all/error svc:/network/physical (online)
               (18)测试DNS反向解析是否成功。
  # host 192.168.9.9
  9.9.168.192.in-addr.arpa domain name pointer dns.cjh.com.
  (19)测试DNS解析是否成功。
  # nslookup
  > http://www.cjh.com/
  Server: 192.168.9.9
  Address: 192.168.9.9#53
  Name: http://www.cjh.com/
  Address: 192.168.9.9
  >
  出现上面的提示,说明DNS服务已经启动成功。
  应用说明:
  Solaris 10 基本上就已经安装好 Bind 9 DNS Server,所以,跟本就不存在安装的问题。但为什么还要写这编文章呢?在某程度上跟和 Solaris 10 的新功能 Service Management Facility (SMF)有关,而且,这编文章也有助于对 SMF的深入了解。
       Solaris 10 以前版本的DNS服务器启动和停止方法是:
  启动 DNS Server 命令:
  /etc/init.d/named start
  停止 DNS Server命令:
  /etc/init.d/named
  Solaris 10版本的DNS服务器启动和停止方法是:
  启动 DNS Server 命令:
  svcadm enable dns/server 或 svcadm enable dns/server:default
  停止 DNS Server命令:
  stop svcadm disable dns/server 或 svcadm disable dns/server:default 二、让DNS 服务器在“牢监”中运行
  所谓“监牢”就是指通过chroot机制来更改某个软件运行时所能看到的根目录,即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。这样即使出现被破坏或被侵入,所受的损伤也较小。将软件chroot化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot目录中,通常称这个目录为chroot jail(chroot“监牢”)。如果要在“监牢”中运行dns,而事实上根本看不到文件系统中那个真正的目录。因此需要事先创建目录,并将dns文件复制到其中。图-1中的例子,说明了 牢监 中的环境状态
  图 1 “监牢”环境示意图
  以下是具体步骤:
        为 DNS Server 建立监牢目录
  建立 /chroot/dns 目录
  # mkdir /chroot/dns
  建立一个空壳目录架构
  # cd /chroot/dns
  # mkdir -p etc/named var/run
  复制 /etc/named.conf 到监牢中
  # cp /etc/named.conf /chroot/dns/etc/named.conf
  复制 /etc/named 目录中的文件到 Jail 监牢中
  # cp /etc/named/* /chroot/dns/etc/named/
  更改 /chroot/dns/var/run 目录的权限
  # chmod 770 /chroot/dns/var/run
  # chown noaccess:root /chroot/dns/var/run
  为 Solaris 10 建立一个新服务
  原本的 DNS Server Service 名称为 dns/server。
  建立新服务 后,以后要启动旧版本的 DNS服务时,不能只启动 dns/server,而要改为 dns/server:default。
  新 DNS Server Chroot 服务 名称为, dns/server:chroot
  开始建立新 服务
  # cd /var/svc/manifest/network/dns
  # cp server.xml server-chroot.xml
  编辑 server-chroot.xml
       寻找
  instance name='default' enabled='false'
  改为
  instance name='chroot' enabled='false' 
  寻找
  exec='/usr/sbin/named'
  改为
  exec='/usr/sbin/named -t /chroot/dns'
  寻找
  privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,file_dac_read,file_dac_search,sys_resource' />
  改为
  privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,priv_proc_chroot,priv_file_dac_read,file_dac_search,sys_resource' />
  寻找
  user='root'
  改为
  user='noaccess'
  保存文件退出。
  停止原来的 DNS服务
  # svcadm disable dns/server:default
  加入新的 DNS Server Chroot service
  # svccfg import server-chroot.xml
  启动 chroot DNS service
  # svcadm enable dns/server:chroot
  # svcs dns/server
       STATE STIME FMRI
  disabled 6:21:03 svc:/network/dns/server:default
  online 6:27:01 svc:/network/dns/server:chroot
  Bind 9 DNS Server 现在已经能够在“监牢” 环境中运行 
三、在Solaris环境下,DNS客户端程序的配置非常容易,它只需要几个简单的步骤就可以完成。
  (1)除了对/etc/inet/hosts文件或NIS/NIS+的主机名映射或者主机名(hostnames)表文件进行检查以外,还必须配置命名服务开关文件(/etc/nsswitch.conf),指定域名解析服务向DNS进行查询。为了确保DNS的正常工作,在/etc/nsswitch.conf文件中必须包括下行的内容:
  hosts: files dns
  这行的意思是如果需要命名服务,首先查找/etc/inet/hosts文件,如果找不到,就到DNS中去查找。
  (2)我们需要将主机的本地域名输入到/etc/defaultdomain文件中。例如,主机 http://www.cjh.net/的/etc/defaultdomain文件应有如下的输入项:
  cjh.net
  (3)我们需要在/etc/resolv.conf文件中包含本地域名、本地基本DNS服务器的IP地址,以及辅助的DNS服务器的IP地址。这意味着本地DNS服务器出现故障,我们仍可以通过辅助的NDS服务器来提供最新的外部主机信息,而不必依赖/etc/hosts文件中的数据来解析本地地址。例如,/etc/resolv.conf文件的内容可能是这样:
  domain cjh.net
  nameserver 202.104.0.20
  nameserver 53.58.31.2
  它表明本地域是cjh.net,本地域有两台基本DNS服务器。其中,202.104.0.20为主DNS服务器,53.58.31.2为辅助DNS服务器。
  (4)下面我们可以启动DNS客户端软件了。
  #svcadm enable svc:/network/dns/client
  (5)使用nslookup命令来检查DNS客户端配置是否正确。
  #nslookup
  > www. cjh.net 四、升级Solaris 10自带BIND 9.2.4版本到9.3.2的步骤
  如果您正在使用Solaris 10自带的BIND 9.2.4版本,升级步骤如下:
  首先编译源代码同上。
  # cd /usr/sbin
  # mv named named.orig
  # mv named-checkconf named-checkconf.orig
  # mv named-checkzone named-checkzone.orig
  # cp /usr/local/sbin/named .
  # cp /usr/local/sbin/named-checkconf .
  # cp /usr/local/sbin/named-checkzone . 
  检查新安装的 BIND 9 DNS Server 版本 命令如下:
  # /usr/sbin/named -v
  BIND 9.3.2
  从新启动 Chroot Jail 了的 DNS 服务
  # svcadm disable dns/server:chroot
  # svcadm enable dns/server:chroot
  # svcs dns/server
              STATE STIME FMRI
  disabled 6:21:03 svc:/network/dns/server:default
  online 6:27:01 svc:/network/dns/server:chroot
  # ps -elf | grep named
  noaccess 133 1 0 20:31:29 ? 0:00 /usr/sbin/named -t /chroot/dns
  新的 Bind 9 DNS Server Version 9.3.2 现在已经安装好了。
  总结:本文介绍了如下内容:
  ? 怎样启动和停止 Bind 9 DNS Server?
  ? 如何设定 Bind 9 DNS Server?
  ? 什么是监牢?
  ? Bind 9 DNS Server 怎样使用 Chroot Jail (保安监牢)功能来防止***者进入系统?
  ? 怎样建立新的 SMF Service 来启动 Chroot Jail 后的 DNS Server?
  ? DNS 客户端设置
  ? 如何把 Solaris 10 内的 Bind 9 DNS Server升级到最新版本?
  正如其他的Internet协议一样,DNS由几个Internet的RFC规范(最初是RFC 882、883和973)。不过要理解DNS服务器的工作原理最好的标准还是RFC 1035。你可以在Internet上的好几个地方找到RFC 1035。正如你可能想到的那样,RFC具有相当的技术性,你不大可能会对超出DNS服务器一般操作的细节感兴趣。但是如果你想做个服务器管理员,那么就记住RFC吧。在Internet的命名服务中最常用的恐怕就是网络域名服务(DNS)了,所以Solaris 10操作系统主要应用是BIND 9 DNS服务器。本文介绍如何设置和管理DNS服务器。