This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.

Please visit our production wiki at https://wiki.gentoo.org

BIND/指南

From Gentoo Wiki (test)
< BIND
Jump to:navigation Jump to:search
This page is a translated version of the page BIND/Guide and the translation is 98% complete.
Other languages:

This guide teaches the reader how install and configure BIND for a domain and a local network.

介绍

这个教程将向你展示如何安装及配置BIND,这个互联网上使用最多的DNS服务器。我们使用不同的配置文件来为你的域名配置bind:针对本地网络和针对世界上的其它地方。我们将使用视图来做那件事。一个视图针对你的内部区域(你的本地网络),另一个视图针对外部区域(世界上的其它地方)。

  1. View of the internal zone (your local network).
  2. View for the external zone (rest of the world).

示例中用到的数据

关键词 解释 示例
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协议。

CODE 选项部分
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的第二部分是用于我们本地网络的内部视图。

CODE 内部视图
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服务器的人们)解析全部其它域名。

CODE 外部视图
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的最后一部分是日志策略。

CODE 日志部分
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地址。注意几乎全部(不是全部)域名以“.”(点)结尾。

FILE /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)。

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

FILE /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保护这台服务器

如果你使用iptables来保护你的服务器,你可以针对DNS服务添加这些规则。

CODE 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.