您的位置:首页 > 其它

安装配置域名服务器(dns)- bind

2009-08-11 11:11 686 查看
安装配置域名服务器(dns- bind
作者:zccst

原理篇
1,什么是DNS
——DNS,Domain Name Service,或者Domain Name Server,域名服务/域名服务器
当你在浏览器里输入:www.baidu.com之后,之所以可以上去,是因为有了DNS。
简言之,DNS把一串名字,转换成了IP地址。
2,什么是BIND
Bind是使用最广泛的Domain Name Server,它是Berkeley Internet Name Domain Service的简写,伯克里大学编写的。

实践篇
Ubuntu:
192.168.233.141

下载最新的Bind发行版:
http://www.isc.org
目前最新版本为:bind-9.6.1.tar.gz
一、安装
源文件:bind-9.6.1.tar.gz
进入源文件所在目录
tar -zxvf bind-9.6.1.tar.gz
cd bind-9.6.1
./configure --prefix=/usr/local/named --enable-threads
make
make install
安装到此完毕。下面查看安装版本号:
cd /usr/local/named
sbin/named -v

二、配置
(目前在/usr/local/named目录下)
mkdir dev
mkdir logs
(以上两个文件夹可选创)
1,创建etc目录
sudo mkdir etc
直接生成验证文件.rndc.conf 和密锁
sbin/rndc-confgen > etc/rndc.conf
但报错如下:
bash: etc/rndc.conf:Permission denied

本以为是本条指令的权限不对,于是
useradd named
chown -R named:named /usr/local/named/
锁定用户
passwd -l named
但仍然失败,郁闷。

后来在同事的帮助下,问题解决:
首先,sudo sbin/rndc-confgen > etc/rndc.conf的前半部分权限的对的,只是后半部分不对。而不是一开始自己以为的使用named用户。

修改root用户密码:
sudo passwd root
输入当前普通用户的密码后,便可重新设置root密码
切换用户角色,su - 进入root用户
输入root新设置的密码后,顺利进入root权限,以后的操作就方便多了。

在root权限下,执行
sbin/rndc-confgen > etc/rndc.conf
顺利生成rndc.conf控制命令的key文件(注:符号指向:’>’是覆盖,’>>’是添加)
然后cd etc/
从rndc.conf文件中提取named.conf用的key
tail -10 rndc.conf | head -9 | sed s/#/ //g > named.conf
自动在/usr/local/named/etc生成named.conf文件

2,创建 /var/named 目录
mkdir /var/named
cd /var/named

(1)vi localhost.zone
添加以下内容:
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

1D IN NS @
1D IN A 127.0.0.1

(2) vi named.local
添加以下内容:
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.

1 IN PTR localhost.

(3) dig命令直接生成named.root文件
dig > named.root

(4) vi test.zone(建立test.com域名正向解析文件:把网站名称转换成IP地址)
添加以下内容:
$ttl 1D
@ IN SOA test.com. root.test.com. (

1053891162
3H
15M
1W
1D )

IN NS test.com.
IN MX 5 test.com.
www IN A 220.202.19.82

(5)vi test.local(建立test.com域名反向解析文件:把IP地址转换为网站名称)
添加以下内容:
$TTL 86400
@ IN SOA test.com. root.test.com.(
20031001;
7200;
3600;
43200;
86400);
@ IN NS test.com.
82 IN PTR www.test.com.

注释一:
IN表示后面的数据使用的是INTERNET标准
SOA表示授权开始
@则代表相应的域名
test.com 授权主机
root.test.com 管理者信箱 root@test.com
NS:表示是这个主机是一个域名服务器,
A:定义了一条A记录,即主机名到IP地址的对应记录
MX 定义了一邮件记录
CNAME:定义了对应主机的一个别名
type类型有三种,它们分别是master,slave和hint它们的含义分别是:
master:表示定义的是主域名服务器
slave :表示定义的是辅助域名服务器
hint:表示是互联网中根域名服务器
zone关键字来定义域区的,一个zone关键字定义一个域区
PTR记录用来解析IP地址对应的域名

注释二:
Serial:其格式通常会是“年月日+修改次序”(但也不一定如此,您自己能够记得就行)。当 slave 要进行资料同步的时候,会比较这个号码。如果发现在这里的号码比它那边的数值“大”,就进行更新,否则忽略。不过设 serial 有一个地方您要留意:不能超过 10 位数字!
Refresh:这里是是告诉 slave 要隔多久要进行资料同步(是否同步要看 Serial 的比较结果)。
Retry:如果 slave 在进行更新失败后,要隔多久再进行重试。
Expire:这是记录逾期时间:当 slave 一直未能成功与 master 取得联系,那到这里就放弃 retry,同时这里的资料也将标识为过期( expired )。
Minimum:这是最小默认 TTL 值,如果您在前面没有用“$TTL”来定义,就会以此值为准。

3,主配置文件 named.conf
DNS 服务器的主体是域名服务器进程 named ,named启动后向DNS客户机提供域名解析服务,把域名转换成IP地址。
  named 启动时需要读取一个初始化文件,缺省情况下是 /etc/bind/named.conf,这是bind的基本配置文件,不过这里面并不包含DNS数据。

再次进入/usr/local/named/etc/
vi named.conf
添加以下代码(注:不是覆盖,里面已有部分代码)
options {
directory "/var/named"; #named区文件目录
pid-file "named.pid"; #进程id文件名
};

#controls {
# inet 127.0.0.1 allow { localhost; } keys { rndckey; };
#};
# 以上三行跟系统自动生成的代码重复,所以注释掉,不然启动时会出错。

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

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};

zone "test.com" IN {
type master;
file "test.zone";
allow-update { none; };
};

zone "19.202.220.in-addr.arpa" IN {
type master;
file "test.local";
allow-update { none; };
};

4,修改域名服务器为自己的主机IP(一定要相同,否则无法正确解析)
位置/etc/reslov.conf
nameserver 192.168.233.141
配置完毕

三、测试
1,启动
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf &
可以用ps –ef|grep named看是否有进程新进程启动
2,正向解析
输入:host www.test.com
输出:www.test.com has address 220.202.19.82
3,反向解析
输入:host 220.202.19.82
输出:82.19.202.220.in-addr.prpa domain name pointer www.test.com
4ping一下
ping www.test.com
PING www.test.com (220.202.19.82) 56(84) bytes of data.
如上显示表示正向解析正常

安装配置完毕。

四、总结

一、杀死named进程
killall -HUP named
ps –ef |grep named
kill 进程号
(注:每次修改配置文件后需重新启动才能生效。)

二、清除DNS缓存
网络重启
service networking restart
重新获取IP
dhclient
方法1:rndc flush
rndc = remote name daemon control

方法2:/etc/init.d/nscd restart
nscd 是Name Switch Cache Daemon(nscd)
下载nscd
apt-get install nscd

三、最后,梳理一下几个文件的关系:
在/var/named里有六个文件,其中named.pid为自动生成文件,其余五个文件配置时需要自己添加:
localhost.zone
named.local
named.root
test.zone
test.local
其中,localhost.zone,named.local,named.root属于系统配置,在第一次安装bind时配置好就行了,以后只需要配置所需解析网站的正反向解析文件(test.zone,test.local)即可。

四、应用(一个例子)
我自己搭建了apache服务器,默认为80端口。位置在另一台虚拟机redhat上。为了能使Ubuntu能访问RedHat上的服务器。照猫画虎,我在/var/named/写了两个文件:
(1)vi apache.zone
$ttl 1D
@ IN SOA apache.com. root. apache.com. (

1053891162
3H
15M
1W
1D )

IN NS apache.com.
IN MX 5 apache.com.
www IN A 192.168.233.129

(2)vi apache.local
$TTL 86400
@ IN SOA apache.com. root. apache.com.(
20031001;
7200;
3600;
43200;
86400);
@ IN NS apache.com.
129 IN PTR www.apache.com.

(3)在/usr/local/named/etc/named.conf
添加两端对应代码:
zone " apache.com" IN {
type master;
file " apache.zone";
allow-update { none; };
};

zone "233.168.192.in-addr.arpa" IN {
type master;
file " apache.local";
allow-update { none; };
};
(4)保存后,再修改nameserver为本机IP(在/etc/resolv.conf里面)
访问成功!!!

但是当我准备用www.apache.com 访问 RedHat上的Apache服务器时,却出现全英文版Apache的网站,不是我预想的结果。
后来发现:在什么照虎画猫的过程中,在配置www.apache.com成功前,就用浏览器访问,当然出现的英文版网站,原来是浏览器cookie中仍保留有英文网站的记录导致无法访问自己指定的服务器。
根本原因:没搞清楚系统自带的nameserver不是本机IP,而现在让本机的IP做nameserver,这两个nameserver是两个不同的IP,是两回事。
系统只带的域名服务器IP能够把各种网站名称解析成相应的IP地址。(注:在/var/named/named.root有域名服务器的IP的设置)
自己设定的域名服务器IP只能把指定网站名称解析成相应的IP地址,其他的网站名称都不能解析,此时在浏览器上不能用网站名称访问相应网站,但不能代表主机不能上网,直接输入IP地址即可上网。(谷歌IP:203.208.39.160)
唉,我在一开始把两者搞混了。加之浏览器cookie在里面捣乱,浪费了大量时间,还不知道错在什么地方。

上述问题解决后,把nameserver设为本机IP,用www.apache.com访问RedHat上Apache服务器,访问成功!

一切尘埃落定,然而问题并没有就此结束,还有很多不懂的地方,有待继续学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: