BIND/指南
本指南教读者如何为域名和本地网络安装和配置 BIND。
介绍
本教程将向您展示如何安装和配置 Internet 上最常用的 DNS 服务器 BIND。我们将使用不同的配置为域名配置 BIND,一种用于本地网络,另一种用于世界其他地方。将使用两个视图来执行此操作:
- 查看内部区域(你的本地网络)。
- 查看外部区域(世界其他地区)。
示例中用到的数据
关键字 | 解释 | 示例 |
---|---|---|
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协议。
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 "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服务器的人们)解析全部其它域名。
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的最后一部分是日志策略。
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地址。注意几乎全部(不是全部)域名以“.”(点)结尾。
$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)。
$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文件。
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 -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.