欢迎来到CentOS问吧,从这里您能进入CentOS世界!

CentOS问吧

当前位置: 主页 > CentOS服务器 > DNS >

centos平台采用chroot模式安装运行DNS服务器Bind

时间:2011-06-30 11:40来源:未知 作者:admin 点击:
说明 公司内部局域网,有些服务器(部分网段)不能直接访问internet,则在用某台可直接访问Internet的服务器设置 iptables MASQUERADE,采用NAT方式让这些内部服务器访问Internet。此外,我希

说明

公司内部局域网,有些服务器(部分网段)不能直接访问internet,则在用某台可直接访问Internet的服务器设置 iptables MASQUERADE,采用NAT方式让这些内部服务器访问Internet。此外,我希望采用内部部署一台简单的DNS服务器,提供内部主机DNS解 析。这台DNS服务器也同时采用forward方式对内部客户端提供DNS服务。
优点:

    可以提供内部服务器的DNS解析:例如,内部域名example.com,则客户端可以通过主机名解析方式轻松访问公司内部服务器。
    对于某些特殊的访问可以采用DNS欺骗方式(自己声明权威域解析,解析指向特定IP地址),这在一些内部测试环境中可以采用。

以下是采用chroot模式安装运行DNS服务器软件Bind,这种方式比常规直接运行Bind软件有安全上的优势。虽然这里没有提供完整配置域名解析的实例(我计划以后完整实践复杂的DNS服务器部署),但是对Bind软件安装和基本运行的步骤是比较简明可参考的。
参考

    Bind: Quick install guide to install and setup Bind (DNS server) in secure (chroot) environment in Linux (CentOS, Redhat Enterprise (RHEL), Fedora).
    CentOS 4 : chroot DNS with BIND

 
准备工作

    创建用户和目录结构

01     echo "named:x:200:200:Nameserver:/chroot/named:/bin/false" >> /etc/passwd
02     echo "named:x:200:" >> /etc/group
03     mkdir -p /chroot/named
04     cd /chroot/named
05     mkdir -p dev etc/namedb/slave var/run
06     chown -R named:named /chroot/named/etc/namedb/slave
07     chown named:named /chroot/named/var/run
08     mknod /chroot/named/dev/null c 1 3
09     mknod /chroot/named/dev/random c 1 8
10     chmod 666 /chroot/named/dev/{null,random}
11     cp /etc/localtime /chroot/named/etc/

    编辑 /etc/sysconfig/syslog

编辑包含SYSLOGD_OPTIONS开头的配置行,配置类似如下

1     SYSLOGD_OPTIONS="-m 0 -a /chroot/named/dev/log"

然后重启syslog
1     /etc/init.d/syslog restart

    设置目录安全


1     chown root /chroot
2     chmod 700 /chroot
3     chown named:named /chroot/named
4     chmod 700 /chroot/named
5     cd /chroot/named
6     chattr +i etc/localtime var

    如果系统中曾经安装过bind则删除
1     rpm -qa |grep bind
2     rpm -e --nodeps <copy-paste-all-the-packages-separated-by-space>
安装bind

    编译bind
1     wget http://ftp.isc.org/isc/bind9/9.7.1-P2/bind-9.7.1-P2.tar.gz
2     tar zxpfv bind-*.gz
3     cd bind*
4     ./configure
5     make && make install
1     mv /etc/init.d/named /etc/init.d/named.bak

    添加以下启动脚本 /etc/init.d/named
01     #!/bin/sh
02     #
03     # named This shell script takes care of starting and stopping
04     # named (BIND DNS server).
05     #
06     # chkconfig: 345 55 45
07     # description: named (BIND) is a Domain Name Server (DNS)
08     # that is used to resolve host names to IP addresses.
09     # probe: true
10     #
11     # Source function library.
12     . /etc/rc.d/init.d/functions
13     #
14     # Source networking configuration.
15     . /etc/sysconfig/network
16     #
17     # Check that networking is up.
18     [ ${NETWORKING} = "no" ] && exit 0
19     #
20     [ -f /usr/local/sbin/named ] || exit 0
21     [ -f /chroot/named/etc/named.conf ] || exit 0
22     #
23     # See how we were called.
24     case "$1" in
25     start)
26     # Start daemons.
27     echo -n "Starting named: "
28     daemon /usr/local/sbin/named -u named -t /chroot/named -c /etc/named.conf
29     echo
30     touch /var/lock/subsys/named
31     ;;
32     stop)
33     # Stop daemons.
34     echo -n "Shutting down named: "
35     kill `pidof named`
36     echo
37     rm -f /var/lock/subsys/named
38     ;;
39     status)
40     status named
41     exit $?
42     ;;
43     restart)
44     $0 stop
45     $0 start
46     exit $?
47     ;;
48     reload)
49     /usr/local/sbin/rndc reload
50     exit $?
51     ;;
52     probe)
53     # named knows how to reload intelligently; we don\'t want linuxconf
54     # to offer to restart every time
55     /usr/local/sbin/rndc reload >/dev/null 2>&1 || echo start
56     exit 0
57     ;;
58     #
59     *)
60     echo "Usage: named {start|stop|status|restart|reload}"
61     exit 1
62     esac
63     #
64     exit 0
设置启动脚本可执行
1     chmod +x /etc/init.d/named

    设置named启动时启动
1     chkconfig --add named
配置DNS

    准备rcdc.key
1     rndc-confgen -a
2     cp /etc/rndc.key /chroot/named/etc/

    设置配置文件/chroot/named/etc/named.conf
01     include "/etc/rndc.key";
02       
03     options {
04         directory "/etc/namedb"; // Working directory
05         pid-file "/var/run/named.pid"; // Put pid file in working dir
06         statistics-file "/var/run/named.stats";
07         query-source address * port 53;
08         version "Bind 10";
09       
10         allow-recursion {
11             127.0.0.1;
12             192.168.0.0/16;
13             10.1.9.0/24;
14         };
15         // 允许递归查询,这样可以对内部服务器提供DNS服务而不是只解析自己负责的domain;
16         // 因为我是期望作为内部DNS来运行服务的
17       
18         forwarders {
19             202.96.209.133; //ip of dns server to forward requests to
20             202.96.209.5;
21         };
22       
23         listen-on {
24             127.0.0.1;
25             192.168.7.189;
26             10.1.9.189;
27         };
28         //只监听内网接口,避免外部访问
29       
30     };
31     controls {
32         inet 127.0.0.1 port 953
33         allow { 127.0.0.1; } keys { "rndc-key"; };
34     };
35     // Root server hints
36     zone "." {
37         type hint;
38         file "root.hint";
39     };
40     // Provide a reverse mapping for the loopback address 127.0.0.1
41     zone "0.0.127.in-addr.arpa" {
42         type master;
43         file "db.127.0.0";
44         notify no;
45     };

    设置配置文件 /chroot/named/etc/namedb/root.hint(这个配置文件指示DNS根服务器)
01     ; This file holds the information on root name servers needed to
02     ; initialize cache of Internet domain name servers
03     ; (e.g. reference this file in the "cache . <file>"
04     ; configuration file of BIND domain name servers).
05     ;
06     ; This file is made available by InterNIC
07     ; under anonymous FTP as
08     ; file /domain/named.root
09     ; on server FTP.INTERNIC.NET
10     ;
11     ; last update: Nov 5, 2002
12     ; related version of root zone: 2002110501
13     ;
14     ;
15     ; formerly NS.INTERNIC.NET
16     ;
17     . 3600000 IN NS A.ROOT-SERVERS.NET.
18     A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
19     ;
20     ; formerly NS1.ISI.EDU
21     ;
22     . 3600000 NS B.ROOT-SERVERS.NET.
23     B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
24     ;
25     ; formerly C.PSI.NET
26     ;
27     . 3600000 NS C.ROOT-SERVERS.NET.
28     C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
29     ;
30     ; formerly TERP.UMD.EDU
31     ;
32     . 3600000 NS D.ROOT-SERVERS.NET.
33     D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
34     ;
35     ; formerly NS.NASA.GOV
36     ;
37     . 3600000 NS E.ROOT-SERVERS.NET.
38     E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
39     ;
40     ; formerly NS.ISC.ORG
41     ;
42     . 3600000 NS F.ROOT-SERVERS.NET.
43     F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
44     ;
45     ; formerly NS.NIC.DDN.MIL
46     ;
47     . 3600000 NS G.ROOT-SERVERS.NET.
48     G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
49     ;
50     ; formerly AOS.ARL.ARMY.MIL
51     ;
52     . 3600000 NS H.ROOT-SERVERS.NET.
53     H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
54     ;
55     ; formerly NIC.NORDU.NET
56     ;
57     . 3600000 NS I.ROOT-SERVERS.NET.
58     I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
59     ;
60     ; operated by VeriSign, Inc.
61     ;
62     . 3600000 NS J.ROOT-SERVERS.NET.
63     J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
64     ;
65     ; housed in LINX, operated by RIPE NCC
66     ;
67     . 3600000 NS K.ROOT-SERVERS.NET.
68     K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
69     ;
70     ; operated by IANA
71     ;
72     . 3600000 NS L.ROOT-SERVERS.NET.
73     L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
74     ;
75     ; housed in Japan, operated by WIDE
76     ;
77     . 3600000 NS M.ROOT-SERVERS.NET.
78     M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
9     ; End of File

    设置iptables允许访问服务器udp端口53(查询DNS只需要访问UDP端口53,TCP端口是用来进行区传送的)

在 /etc/sysconfig/iptables 同添加
1     -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

重启iptables
1     /etc/init.d/iptables restart
启动服务
1     /etc/init.d/named start
配置自己负责的权威域解析

后续补充
错误排除

刚开始的时候,没有添加 rndc.key配置,启动named时有如下报错

Jul 31 06:34:05 kvm1 named[25481]: /etc/named.conf:14: unknown key \'rndc-key\'
Jul 31 06:34:05 kvm1 named[25481]: loading configuration: failure
Jul 31 06:34:05 kvm1 named[25481]: exiting (due to fatal error)

则补上rcdc.key
1     rndc-confgen -a
2     cp /etc/rndc.key /chroot/named/etc/

然后在 /chroot/named/etc/named.conf 的第一行添加
view source
print?
1     include "/etc/rndc.key";

然后就可以正常启动named了。

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
栏目列表
推荐内容