构建DNS服务的最基础的软件是bind,DNS服务的进程名是named。为了增强安全性,我们要安装最新版的bind软件,但最新版的bind版本为bind-9.9.0,网上没有rpm包,只有源代码包,此时,我们只能通过手动编译安装bind了。

一、要准备好bind-9.9.0的源代码包,放到root目录下,一般是bind-9.9.0.tar.gz.通过命令

 
  
  1. #tar xvf bind-9.9.0.tar.gz 
  2. #cd bind-9.9.0 

1.初始化

编译的前提是系统已经安装好了“Development Tools”和“Development Libraries”两个包组。要想简单并方便的安装包组,就需要使用yum命令:

(使用yum的前提是已经配好yum源。)

 
  
  1. #yum groupinstall "Development Tools" 
  2. #yum groupinstall "Development Libraries" 
  3. #./configure --sysconfdir=/etc --disable-ipv6 --enable-largefile --prefix=/usr/local/named --disable-openssl-version-check --localstatedir=/var 

此时正在定义安装路径等一系列的初始化,等待完成后,使用make命令调用编译器工具。

2.调用编译器工具进行编译

 
  
  1. #make 
  2. #make install 

二、编写/etc/named/named.conf配置文件

 

 
  
  1. #vim /etc/named/named.conf 
  2.  
  3. options { 
  4. directory "/var/named"; 
  5. }; 
  6.  
  7. zone "." IN { 
  8.         type hint; 
  9.         file "named.ca"; 
  10. }; 
  11.  
  12. zone "localhost" IN { 
  13.        type master; 
  14.         file "localhost.zone"; 
  15. }; 
  16.  
  17. zone "0.0.127.in-addr.arpa" IN { 
  18.         type master; 
  19.         file "named.local"; 
  20. }; 
  21.  
  22. #mkdir /var/named 
  23. #cd /var/named 
  24. #dig -t NS .t > named.ca 
  25. #vim localhost.zone 
  26. $TTL 600 
  27. localhost. IN SOA localhost. admin.localhost.( 
  28.                 2012030801 
  29.                 1H 
  30.                 4M 
  31.                 5D 
  32.                 1D) 
  33.           IN NS localhost. 
  34.           IN A  127.0.0.1 
  35. #vim named.local 
  36. $TTL 600 
  37. @ IN SOA localhost. admin.localhost.( 
  38.                2012030801 
  39.                 1H 
  40.                 4M 
  41.                 5D 
  42.                 1D) 
  43.           IN NS localhost. 
  44. 1         IN PTR localhost. 

保存以上三个文件并退出。

三、添加named用户及组并改变文件的权限

 
  
  1. # groupadd -r named 
  2. # useradd -g named -r -s /sbin/nologin named  
  3. # chown -R :named /etc/named/named.conf /var/named/{named.ca localhostr.zone named.local} 

四、手动编辑脚本named

 
  
  1. #vim /etc/rc.d/init.d/named 
  2.  
  3. #!/bin/bash 
  4. #named           
  5. #This shell script takes care of starting and stopping 
  6. # named (BIND DNS server). 
  7. # chkconfig: - 13 87 
  8. # description: named (BIND) is a Domain Name Server (DNS) \ 
  9. # that is used to resolve host names to IP addresses. 
  10. # probe: true 
  11. # Source function library. 
  12. . /etc/rc.d/init.d/functions 
  13. # Source networking configuration. 
  14. [ -r /etc/sysconfig/network ] && . /etc/sysconfig/network 
  15. namednamed=named 
  16. named_conf="/etc/named/named.conf" 
  17. ROOTDIR="/usr/local/named" 
  18. CHKCONF="$ROOTDIR/sbin/named-checkconf" 
  19. CHKZONE="$ROOTDIR/sbin/named-checkzone" 
  20. RNDC="$ROOTDIR/sbin/rndc" 
  21.   
  22. start() { 
  23.                 echo -n $"Starting $named: " 
  24.         if [ -n "`/sbin/pidof -o %PPID $named`" ]; then 
  25.                 echo -n $"$named: already running" 
  26.                 failure 
  27.                 echo 
  28.                 return 1 
  29.         fi 
  30.        
  31.         conf_ok=0
  32.         if [ -x $CHKCONF ] && [ -x $CHKZONE ] && $CHKCONF ${named_conf} >/dev/null 2>&1; then 
  33.            conf_ok=1
  34.         else 
  35.            RETVAL=$?; 
  36.         fi 
  37.         if [ $conf_ok -eq 1 ]; then 
  38.            daemon $ROOTDIR/sbin/$named -u named; 
  39.            RETVAL=$?; 
  40.            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/named 
  41.            echo 
  42.           return $RETVAL 
  43.         fi: 
  44. }  
  45. stop() { 
  46.        # Stop daemons. 
  47.         echo -n $"Stopping $named: " 
  48.         $RNDC stop >/dev/null 2>&1 
  49.         RETVAL=$? 
  50.         [ "$RETVAL" -eq 0 ] || killproc "$named" -TERM >/dev/null 2>&1 
  51.   
  52.         if [ $RETVAL -eq 0 ]; then 
  53.             rm -f /var/lock/subsys/named &> /dev/null 
  54.             rm -f /var/run/named.pid &> /dev/null 
  55.         fi;     
  56.  
  57.         if [ $RETVAL -eq 0 ]; then 
  58.             success 
  59.         else 
  60.             failure 
  61.         fi; 
  62.         echo 
  63.         return $RETVAL 
  64.       
  65. restart() { 
  66.         stop 
  67.         sleep 2 
  68.         start 
  69.   
  70. status() { 
  71.        $RNDC status 
  72.         status $ROOTDIR/sbin/$named 
  73.         return $? 
  74.  
  75. reload() { 
  76.         echo -n $"Reloading $named: " 
  77.         p=`/sbin/pidof -o %PPID $named` 
  78.         RETVAL=$? 
  79.         if [ "$RETVAL" -eq 0 ]; then 
  80.            $RNDC reload >/dev/null 2>&1 || /bin/kill -HUP $p; 
  81.             RETVAL=$? 
  82.         fi 
  83.        [ "$RETVAL" -eq 0 ] && success $"$named reload" || failure $"$named reload" 
  84.         echo 
  85.         return $RETVAL 
  86.  
  87. checkconfig() { 
  88.         if [ -x $CHKCONF ] && [ -x $CHKZONE ] && $CHKCONF ${named_conf}  ; then 
  89.             return 0; 
  90.         else 
  91.             return 1; 
  92.         fi 
  93.  
  94. case "$1" in 
  95.         start) 
  96.                start 
  97.                 ;; 
  98.         stop) 
  99.                 stop 
  100.                 ;; 
  101.         status) 
  102.                 status 
  103.                 ;; 
  104.         restart) 
  105.                 restart 
  106.                 ;; 
  107.         reload) 
  108.                 reload 
  109.                 ;; 
  110.         checkconfig|configtest|check|test) 
  111.                 checkconfig 
  112.                 ;; 
  113.         *) 
  114.                 echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|configtest|probe}" 
  115.                 exit 2 
  116.                 ;; 
  117. esac  
  118.  
  119. exit $? 

保存退出。

五、启动dns服务

 
  
  1. #cd /usr/local/named/sbin/ 
  2. #./named -u named 

即可启动dns服务了。