BIND/指南

From Gentoo Wiki
< BIND
Jump to:navigation Jump to:search
This page is a translated version of the page BIND/Guide and the translation is 93% complete.
Outdated translations are marked like this.
Other languages:

本指南教读者如何为域名和本地网络安装和配置 BIND。

介绍

本教程将向您展示如何安装和配置 Internet 上最常用的 DNS 服务器 BIND。我们将使用不同的配置为域名配置 BIND,一种用于本地网络,另一种用于世界其他地方。将使用两个视图来执行此操作:

  1. 查看内部区域(你的本地网络)。
  2. 查看外部区域(世界其他地区)。

示例中用到的数据

关键字 解释 示例
YOUR_DOMAIN 你的域名 gentoo.org
YOUR_PUBLIC_IP ISP给你的公网 ip 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 文件区的修改日期,加上一个数字 2009062901

配置BIND

安装

首先,安装net-dns/bind

root #emerge --ask net-dns/bind

配置/etc/bind/named.conf

第一件要配置的事是/etc/bind/named.conf。这一步骤的第一部分是指定bind的根目录、IP上的监听端口、pid文件和一行针对IPv6协议。

文件 /etc/bind/named.conf选项部分
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的第二部分是用于我们本地网络的内部视图。

文件 /etc/bind/named.conf内部视图
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的第三部分是用于在世界上的其它地方的外部视图和为我们(和想使用我们DNS服务器的人们)解析全部其它域名。

文件 /etc/bind/named.conf外部视图
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的最后一部分是日志策略。


文件 /etc/bind/named.conf外部视图
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:

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

创建内部区域文件

我们使用网络示例图中的主机名和IP地址。注意几乎全部(不是全部)域名以“.”(点)结尾。

文件 /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

创建外部区域文件

这里我们只有我们希望针对外部客户端的子域名(www、mail和ns)。

文件 /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到默认启动级别:

root #rc-update add named default

配置客户端

现在你可以在所有在你的内部网络上的计算机中使用我们的DNS服务器去解析域名。修改所有在你的内部网络上的计算机中的/etc/resolv.conf文件。

文件 /etc/resolv.conf
search YOUR_DOMAIN
nameserver YOUR_DNS_SERVER_IP

注意YOUR_DNS_SERVER_IP是和我们在这篇文档中的YOUR_LOCAL_IP一样。在示例图片中是192.168.1.5。

测试

我们有能力测试我们的新DNS服务器。首先,我们需要启动服务。

root #/etc/init.d/named start

现在,我们将对一些域名使用一些host命令。我们可以使用任何在我们内部网络中的计算机来完成这个测试。如果你没有安装net-dns/host,你可以使用ping来代替。或者,先运行emerge host

user $host www.gentoo.org
www.gentoo.org has address 209.177.148.228
www.gentoo.org has address 209.177.148.229
user $host hell
hell.YOUR_DOMAIN has address 192.168.1.3
user $host router
router.YOUR_DOMAIN has address 192.168.1.1

使用iptables保护这台服务器

运行 DNS 服务时,可以使用以下规则配置 iptables 以增加保护:

代码 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 --dport 53 -j ACCEPT

This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Vicente Olivert Riera, nightmorph
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.