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: 网络示意图 |
 |
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
|
|