Gentoo Logo

Gentoo BIND 指南

内容:

1.  摘要

这个教程将向你展示怎样安装与配置BIND,这个Internet上用得最多的DNS服务器。我们将采用不同的配置文件来配置bind,一个用来配置你的本地网络,另外一个配置外部网络。我们采用视图(view)来完成这个功能。你的内部区域(zone)(本地网络)使用一个视图(view),外部zone(外部网络)使用另外一个view。

2.  示例中所使用的数据

关键字 注释 示例
YOUR_DOMAIN 你的域名 gentoo.org
YOUR_PUBLIC_IP 公网ip是网络提供商(ISP)分配给你的 204.74.99.100
YOUR_LOCAL_IP 内部ip地址 192.168.1.5
YOUR_LOCAL_NETWORK 本地网络 192.168.1.0/24
SLAVE_DNS_SERVER 域中从DNS服务器的ip地址 209.177.148.228
ADMIN DNS服务器的管理员名称 root
MODIFICATION zone文件的修改时间,用数字表示 2009062901

图示 2.1: 网络示意图

Fig. 1: network

3.  配置BIND

安装

首先,安装net-dns/bind

代码 3.1: 安装bind

# emerge net-dns/bind

配置/etc/bind/named.conf文件

需要配置的第一个文件便是/etc/bind/named.conf。此文件的第一部分包括设定bind的根目录,ip和监听端口,pid文件以及ipv6协议。

代码 3.2: 选项(options)区域

options {
        directory "/var/bind";

        listen-on-v6 { none; };
        listen-on port 53 { 127.0.0.1; YOUR_LOCAL_IP; };

        pid-file "/var/run/named/named.pid";
};

named.conf文件的第二个部分是为你的本地网络设置内部视图(view)。

代码 3.3: 内部视图(Internal view)

view "internal" {
        match-clients { YOUR_LOCAL_NETWORK; localhost; };
        recursion yes;

        zone "YOUR_DOMAIN" {
                type master;
                file "pri/YOUR_DOMAIN.internal";
                allow-transfer { any; };
        };
};

named.conf文件的第三部分是外部视图(external view)配置,它负责为其他网络解析我们的内部域名,并且为我们自己(以及任何使用本DNS服务器的人)解析其他所有域名。

代码 3.4: 外部视图(External view)

view "external" {
        match-clients { any; };
        recursion no;

        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "127.in-addr.arpa" IN {
                type master;
                file "pri/127.zone";
                allow-update { none; };
                notify no;
        };

        zone "YOUR_DOMAIN" {
                type master;
                file "pri/YOUR_DOMAIN.external";
                allow-query { any; };
                allow-transfer { SLAVE_DNS_SERVER; };
        };
};

named.conf文件的最后一个部分是日志策略。

代码 3.5: 外部视图(External view)

logging {
        channel default_syslog {
                file "/var/log/named/named.log" versions 3 size 5m;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
       category default { default_syslog; };
};

/var/log/named/目录必须存在并且属于named

代码 3.6: 创建一个日志文件

# mkdir -p /var/log/named/
# chmod 770 /var/log/named/
# touch /var/log/named/named.log
# chmod 660 /var/log/named/named.log
# chown -R named /var/log/named/
# chgrp -R named /var/log/named/

创建一个内部区域文件

我们使用示例图片中的主机名和ip地址。注意几乎所有的(不是全部)域名都以点号(".")结束。

代码 3.7: /var/bind/pri/YOUR_DOMAIN.internal

$TTL 2d
@	IN SOA	ns.YOUR_DOMAIN.	ADMIN.YOUR_DOMAIN. (
	MODIFICATION	; serial
	3h	; refresh
	1h	; retry
	1w	; expiry
	1d )	; minimum

YOUR_DOMAIN.		IN MX	0 mail.YOUR_DOMAIN.
YOUR_DOMAIN.		IN TXT	"v=spf1 ip4:YOUR_PUBLIC_IP/32 mx ptr mx:mail.YOUR_DOMAIN ~all"
YOUR_DOMAIN.		IN NS	ns.YOUR_DOMAIN.
YOUR_DOMAIN.		IN NS	SLAVE_DNS_SERVER
www.YOUR_DOMAIN.	IN A	192.168.1.3
ns.YOUR_DOMAIN.		IN A	192.168.1.5
mail.YOUR_DOMAIN.	IN A	192.168.1.3
router.YOUR_DOMAIN.	IN A	192.168.1.1
hell.YOUR_DOMAIN.	IN A	192.168.1.3
heaven.YOUR_DOMAIN.	IN A	192.168.1.5
desktop.YOUR_DOMAIN.	IN A	192.168.1.4

创建外部区域(external zone)文件

这里我们只有几个为外部客户端(网页www,邮件mail以及域名ns)服务的子域。

代码 3.8: /var/bind/pri/YOUR_DOMAIN.external

$TTL 2d
@	IN SOA	ns.YOUR_DOMAIN.	ADMIN.YOUR_DOMAIN. (
	MODIFICATION	;serial
	3h	;refresh
	1h	;retry
	1w	;expiry
	1d )	;minimum

YOUR_DOMAIN.		IN MX	0 mail.YOUR_DOMAIN.
YOUR_DOMAIN.		IN TXT	"v=spf1 ip4:YOUR_PUBLIC_IP/32 mx ptr mx:mail.YOUR_DOMAIN ~all"
YOUR_DOMAIN.		IN NS	ns.YOUR_DOMAIN.
YOUR_DOMAIN.		IN NS	SLAVE_DNS_SERVER
www.YOUR_DOMAIN.	IN A	YOUR_PUBLIC_IP
ns.YOUR_DOMAIN.		IN A	YOUR_PUBLIC_IP
mail.YOUR_DOMAIN.	IN A	YOUR_PUBLIC_IP

完成配置

你需要将named加入default runlevel:

代码 3.9: 加入default runlevel

# rc-update add named default

4.  配置客户端

现在你可以在本地网络的所有机器上使用此DNS服务器了。请修改内部机器的/etc/resolv.conf文件。

代码 4.1: 编辑/etc/resolv.conf

search YOUR_DOMAIN
nameserver YOUR_DNS_SERVER_IP

注意我们在文档中使用的YOUR_DNS_SERVER_IP和YOUR_LOCAL_IP地址是相同的,在示例图片中都是192.168.1.5 。

5.  测试

我们可以开始测试我们的新域名服务器了。首先,启动服务。

代码 5.1: 手动开启服务

# /etc/init.d/named start

现在,我们将要针对一些域名运行一些host命令。当然可以使用本地网络中的任何一台电脑来做测试。如果你还没有安装net-dns/host,可以用ping来代替;当然也可以运行emerge host先安装。

代码 5.2: 开始测试

$ host www.gentoo.org
www.gentoo.org has address 209.177.148.228
www.gentoo.org has address 209.177.148.229

$ host hell
hell.YOUR_DOMAIN has address 192.168.1.3

$ host router
router.YOUR_DOMAIN has address 192.168.1.1

6.  使用iptables保护服务器

如果你使用iptables保护你的服务器,你可以为DNS服务添加这样一些规则:

代码 6.1: Iptables规则

iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT


打印

更新于2009年 8月 21日

本翻译的原始版本已经不再被维护

总结: 本指南教你如何为你的域及本地网络安装和配置BIND

Vicente Olivert Riera
作者

Joshua Saddler
编辑

楚石
译者

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.