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

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

作者:zccst

 

 

 

原理篇

1,什么是DNS

——DNSDomain 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,slavehint它们的含义分别是:

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

方法1rndc  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.zonenamed.localnamed.root属于系统配置,在第一次安装bind时配置好就行了,以后只需要配置所需解析网站的正反向解析文件(test.zonetest.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,而现在让本机的IPnameserver,这两个nameserver是两个不同的IP,是两回事。

系统只带的域名服务器IP能够把各种网站名称解析成相应的IP地址。(注:在/var/named/named.root有域名服务器的IP的设置)

自己设定的域名服务器IP只能把指定网站名称解析成相应的IP地址,其他的网站名称都不能解析,此时在浏览器上不能用网站名称访问相应网站,但不能代表主机不能上网,直接输入IP地址即可上网。(谷歌IP203.208.39.160

唉,我在一开始把两者搞混了。加之浏览器cookie在里面捣乱,浪费了大量时间,还不知道错在什么地方。

 

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

 

一切尘埃落定,然而问题并没有就此结束,还有很多不懂的地方,有待继续学习。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值