1 什么是DNS

初学者可能不理解DNS到底是什么,干什么用。我是在1998年大学毕业时才听说这个词的。那时我在聊天室碰到潍坊信息港的一个网管,我恬不知耻地说我也是个网管,他说也维护DNS吗?我说,DNS是什么?

——DNS,DomainName Service,或者Domain Name Server,域名服务/域名服务器。

你在你的浏览器里面输入http://www.linuxsir.com之后,之所以可以上去,就是因为有了DNS。

简单地说,DNS把一串名字,转换成了IP地址。你可能会说:如果我直接使用IP地址,那就不需要DNS了吗?对!不过,请你接着往下看。

2 为什么需要DNS

2.1 互联网需要DNS

现在几乎整个互联网都是基于TCP/IP的。在这个世界里,不管你访问哪个网站、哪台机器,必须得知道它的IP地址才可以。好,我告诉你,202.106.185.203这个地址,是新浪网的IP地址,你每次上网,都得再浏览器的地址栏里面输入http://202.106.185.203 才可以访问新浪。你可能会说:没问题,不就一串数字嘛,我记得住!可是,你想一下,在Internet上,有多少台主机啊!你可能会记住其中几台甚至几十 台的IP地址,但是你肯定记不住全部。

正是由于IP地址不好记,人们才想了个办法,让你只需要记住名字,然后系统通过这个名字,到数据库里面去查找它的IP地址,然后再把查到的IP地址反馈给你,比如反馈给浏览器,最后,浏览器用这个由DNS给的IP地址去访问你想去的站点。

2.2 局域网需要DNS

那么,在局域网内部呢?需要DNS吗?

太需要了!你不要觉得,单位就这么几台机器,用hosts解析,不也一样吗?你可千万记住这个教训,当公司越来越大,hosts的维护量将大的惊人!我所在的公司,前不久就面临了这种尴尬。所以,一定要有一台DNS,然后在公司内部定义一个规范的主机命名规则,这才是个好网管,呵呵。

3 BIND介绍

Bind是使用最广泛的DomainName Server,它是Berkeley Internet Name Domain Service的简写,伯克里大学编写的。这个大学可真厉害,写了不少著名程序。

原本bind的版本一直在4.8.x 4.9.x 左右,后来一口气跳到8.1.x,是因为大幅度改进了功能,并修复了漏洞。现在bind有两个版本在同时发展,bind 8.x 和 bind 9.x,最新版本是8.3.3和9.2.1。

3 安装

3.1 软件版本

目前debian的sid,同样提供了8版本的bind和9版本的bind,后者的软件包名字叫做bind9.deb,版本是最新的9.2.1版。

3.2 安装

安装过程非常简单:

# apt-get install bind9

4 配置

由于我们前面第三章在配置邮件服务器的时候,使用了hosts文件来解析IP地址,现在我们需要把它去掉,让系统通过DNS来解析它所需要的IP地址。

我们制作基本的配置。至于高级功能,我们将在本文的下一个版本里描述。

4.1 去掉hosts信息

如果你阅读过本文第三章,你就会知道,我有两台机器,一台笔记本电脑安装了win2000,名字叫notepad;另一台台式机装了Debian,机器名叫debian。他们都属于test.com这个域,这个域名没有在ISP那里注册,是我们内部用 的。我分别编辑win2000机器上的\winnt\system32\drivers\etc\hosts这个文件和debian机器上的/etc/hosts,去掉下面的这些行:

192.1.110.120debian.test.com debian

192.1.110.122notepad.test.com notepad

这时你可以在win2000机器上启动OutlookExpress,做一下收取邮件的动作,它会说找不到debian.test.com——这就对了,因为hosts文件里面没有指向这个名字的IP地址, 而且,我们也没有给win2000指定DNS服务器,所以它肯定找不到debian.test.com。

4.2 在客户机上设置DNS

在我的Win2000机器里面,在桌面上右击“网上邻居”选择属性,在出现的窗口中右击“本地连接”选择属性,然后双击TCP/IP,在右下角的“首选DNS”里面,输入192.1.110.120。这是我的Debian机器在局域网上的IP地址。如果你用的是 win98,那么情况差不多,在一个叫做DNS的标签里面设置首选DNS。我很久不用98了,差不多忘了。

如果你是个急性子,你会发现,诶?怎么设上了DNS了,我的OutlookExpress还是说找不到debian.test.com?呵呵,别急别急,我们的DNS服务器还没弄好呐!

4.3 在Debian上设置DNS

我们要事先把Debian机器的DNS指向它自己。修改/etc/resolv.conf,修改成:

search test.com

nameserver192.1.110.120

你不会把我的IP地址也抄上吧,呵呵。

4.4 配置DNS服务器

4.4.1 应用环境

我们把实验环境重新描述一下。

◆一个C类网段地址(本例中假定是192.1.110.0)

◆企业域名为test.com,没有在ISP注册。(主域名服务器地址 192.1.110.120,主机名为 debian.test.com)

◆企业网通过路由器与Internet连接

假如你的应用环境与上述条件不同,也请往下看,本文会在上述例子的基础上针对以下情况作修正:

◆多个网段

◆封闭的内部网

◆只能访问局部公共网的情况(如169网、上海热线等)

我们将使用一个叫做rndc的工具,rndc可以用于启动、中止、重启动、刷新DNS数据、输出DNS数据等多种调试功能。

4.4.2 配置named.conf

DNS服务器的主体是域名服务器进程 named ,named 启动后向DNS客户机提供域名解析服务,把域名转换成IP地址。

named启动时需要读取一个初始化文件,缺省情况下是 /etc/bind/named.conf,这是bind的基本配置文件,不过这里面并不包含DNS数据。

注意,你也许会在网上找到一些教程,这些教程有的是以bind 4.x为蓝本的,所以它的 named.conf里面的注释符号是分号“;”,但是自动bind 8开始,语法变了。下面我们来说一下:

; 这是bind4.x的注释,前面用分号

//不过从bind8开始,有三种注释符号可以用: C样式, C++样式, 或者shell样式:

/*这是C样式的注释符号 */

//这是 C++样式的注释符号

#这是shell样式的注释符号

请你先把默认的/etc/bind/named.conf备份一下,我将给大家写一个简单的named.conf,用于做Caching-only的DNS配置。

// 指定 named 从 /var/cache/bind 目录下读取 DNS 数据文件。

// 这个目录用户可自行指定并创建,指定后所有的DNS 数据文件都存放在此目录下。

options {

directory "/var/cache/bind";

};

// 指定 named 作为 test.com 域的主域名服务器。

// db.test 文件中包含所有*.test.com 形式的域名转换数据。

zone"test.com" in {

type master;

file "db.test";

};

// 指定 named 作为 192.1.110 网段地址转换主服务器。

// db.192.1.110 文件中包含了所有 192.1.110.* 形式的地址到域名的转换数据。

zone"110.1.192.in-addr.arpa" in {

type master;

file "db.192.1.110";

};

// 指定 named 作为127.0.0网段地址转换主服务器。

// db.127.0.0 文件中包含了127.0.0.* 形式的地址到域名的转换数据。

//(127.0.0网段地址是局域网接口的内部 loopback 地址)

zone"0.0.127.in-addr.arpa" in {

type master;

file "db.127.0.0";

};

// 指定 named 从 db.cache 文件中获得Internet 的顶层“根”服务器地址。

zone "."in {

type hint;

file "db.cache";

};

要注意第二和第三个区域中的网段地址是倒写的,另外,各个区域所使用的数据文件的文件名也是可以自行决定的。

请把上面的内容保存为你的/etc/bind/named.conf。

4.4.3 准备数据文件

上面的那个named.conf,相信你已经看明白了。那里面提到,在/var/cache/bind这个目录下面,应该有DNS数据文件db.test、db.192.1.110、db.127.0.0 还有  db.cache。下面我们就要建立这些文件。

4.4.3.1 建立 db.test 文件

根据/etc/bind/named.conf 的定义,我们在 /var/cache/bind 目录下建立 db.test,其中应该包括所有在test.com 域内的主机节点。但在机器数量较多时,为了调试方便,建议一开始只把几台节点的数据放入文件,待 named 正常工作后再把其他节点的数据补充进去。下面是 db.test的例子:

@ IN SOAdebian.test.com. root.debian.test.com. (

200211131 ; serial,todays date + todays serial #

28800 ; refresh,seconds

7200 ; retry,seconds

3600000 ; expire,seconds

86400 ) ; minimum,seconds

NS debian.test.com.

MX 10debain.test.com.

; 域名服务器列表

test.com.  IN NS debian.test.com.

; 计算机名称和地址

localhost.test.com.  IN A        127.0.0.1

debian.test.com.     IN A         192.1.110.120

notepad.test.com.    IN A        192.1.110.122

; 别名

www                  IN CNAME     debian.test.com.

ftp                  IN CNAME     debian.test.com.

其中第一行是SOA 记录,定义了域名数据的基本信息,依次是 DNS 服务器名、DNS 管理员邮件地址,括号内的第一个数字是文件版本号,每次本文件内容修改后,必须更改此号。其余数字与DNS服务器直接的数据交换有关,在这里我们不需要改 动。

括号后面有一条NS记录和一条MX记录,定义了域名服务器本身的域名和username@test.com形式邮件地址所对应的邮件服务器名字。

在此以下是各种域名/地址转换数据,其中A记录是DNS域名到IP地址的记录,是必须有的。

CNAME定义了一些主机的别名,比如我们将debian.test.com作为公司的www和ftp服务器,所以我们提供了www.test.com和ftp.test.com作为debian.test.com的别名,用户只需要根据习惯就可以访问公司的www、ftp服务 器了,如果将来我们换用别的主机作www和ftp服务器,只需要修改CNAME记录就可,对用户没有影响。

注意: CNAME记录最后的带域名的主机名后必须带一个“.”。

复制这个文件到bind的工作目录/var/cache/bind,这个目录是我们刚才在/etc/bind/named.conf里面定义的。

4.4.3.2 建立 db.127.0.0文件

这是个反向DNS数据文件。 反向数据文件是这样用的:知道 IP地址,查询主机名。每个网段分别有一个数据文件。

反向 DNS数据文件中的主要部分是 PTR 记录,PTR 记录中的 IP 地址都只有主机号,named 会根据 named.conf 的定义自动加上前面的网络号,注意后面的主机名要附加一个“.”

对于内部网段 127.0.0通常只有一个地址,即 127.0.0.1 loopback 地址,db.127.0.0 内容如下:

@ IN SOAdebian.test.com root.debian.test.com. (

2002111300 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NSdebian.test.com.

1            IN PTR            localhost.

把这个文件到复制/var/cache/bind目录下面。

4.4.3.2 建立 db.192.1.110 文 件

把所有相同网段的主机IP地址和主机名,都写在里面:

@ IN SOAdebian.test.com root.debian.test.com. (

2002111300 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NSdebian.test.com.

; 所有主机都写在这儿

120 PTRdebian.test.com.

122 PTRnotepad.test.com.

同样,要把这个文件到复制/var/cache/bind目录下面。

4.4.3.3 建立 db.cache 文件

默认情况下,我们在安装bind9的时候,应该有个文件在/etc/bind/db.root,这个文件就是我们的想要的根的定义。由于我们在 named.conf中指定的文件名是 db.cache,所以我们把它复制为db.cache:

# cp /etc/bind/db.root/var/cache/bind/db.cache

5 测试

我们使用rndc这个工具来控制bind。

5.1 让新配置文件生效

因为我们刚才改了配置,所以,需要重新加载一下:

# rndc reload

然后还需要重新配置一下:

# rndc reconfig

如果有问题,你可以使用debian为我们准备的脚本重新启动bind:

# /etc/init.d/bind9 restart

5.2 在win2000机器上测试

在win2000上(就是我们的notepad.test.com),使用OutlookExpress,收发邮件。

看,正常了吧!证明,我们的win2000通过192.1.110.120这台DNS服务器,找到了debian.test.com这台机器的IP地址了。

5.3 测试工具介绍

在debian上,我推荐大家使用dig或者host来测试DNS设置,因为nslookup快要退休了,以后版本的软件可能不再提供nslookup这个工具了。要使用这些工具,需要安装dnsutils:

# apt-get install dnsutils

然后,就可以使用dig来测试DNS了:

# dig -x 192.1.110.120

第一次运行,可能比较慢,别着急,等一会。

6 TODO

这是本文的0.1版,纯粹针对初学者的,仅仅实现了最普通的功能。

在下一个版本,我将深入讲解DNS的设置。

7 结束语

本文是《Debian服务器设置入门》系列教程之第五章,建议您按照顺序阅读,有问题可以和作者kanaka联系。

8 参考文献

《在Linux上建立DNS服务器》,曹江华,2001年12月27日。地址是:http://www.ccidnet.com/html/tech/os/2001/12/27/92_3895.html

让我们一起感谢原文作者!

在Debian上用Bind 配置DNS服务器的更多相关文章

  1. Ubuntu/CentOS使用BIND配置DNS服务器

    ------ubuntu server 12---------- 1.安装bind9 sudo apt-get -y install bind9 bind9utils 2.配置  /etc/bind/ ...

  2. 如何配置DNS服务器(局域网——域名指向某个IP地址)

    单击“开始”,指向“管理工具”,然后单击“DNS”,打开 DNS 管理器.   如有必要,向管理单元添加适用的服务器,然后连接该服务器.在控制台树中,单击适用的 DNS 服务器.   在“操作”菜单上 ...

  3. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

  4. 使用Bind服务配置DNS服务器

    bind是什么 bind是DNS服务器软件 ,他的服务名称是named 功能区分: 正向解析:根据主机名查找对应的IP地址 反向解析:根据IP地址查找对应的主机名(域名) 工作形式上区分: 主服务器: ...

  5. redhat配置dns服务器bind

    配置Oracle11g的RAC需要使用DNS服务器来解析SCAN IP,本文就是以此为例介绍bind服务器的使用.首先科普一下bind服务器,属于企业级产品了,还是开源的: Bind是Berkeley ...

  6. 烂泥:centos安装及配置DNS服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要在centos配置DNS服务器,要先安装DNS软件BIND.当然我们也可以安装其他的DNS软件,比如国内的开源DNS软件DNSPod. 在此我们以通过 ...

  7. Linux下搭建Oracle11g RAC(2)----配置DNS服务器,确认SCAN IP可以被解析

    从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP  ...

  8. CentOS7安装和配置dns服务器

    (1)dns介绍 1.基本介绍 名字解析: NetBIOS名:localhost wins hosts FQDN:完全限定域名,www.baidu.com hosts文件: 作用:实现名字解析,主要为 ...

  9. 在Unix上用 BIND建立名称服务器(naem server)

    在Unix上用 BIND建立名称服务器(naem server) 安装 apt install -y bind9 yum install -y bind bind-utils 下载源码并解压缩,htt ...

随机推荐

  1. border边框的宽度/样式/颜色 全部值

    border 用emmet写border的时候, 缩写是:bd. 不是b, 也不是bdr: b会扩展成bottom, bdr 会扩展成 border-right, border的宽度: 1px 基本上 ...

  2. 关于帧中继和ppp的补充笔记

    帧中继: · 两个设备都要启用 帧中继功能, 否则是不能 ping通的 · 两个设备上的接口serial要 no shutdown · · 一定要配置dlci地址(号). 否则就不能起来pvc 可以 ...

  3. fedora配置网络

    网络配置包括3个部分: ipadd的配置 gateway profile dns profile 格式区别: 1和2的格式都是: CONFIG_ITEM = value; 3的格式是: nameser ...

  4. SWFUpload 2.5.0版 官方说明文档 中文翻译版

    原文地址:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setFileUploadLimit SWFUpload v2 ...

  5. [原] Intellij IDEA开发Android,祝还在使用eclipse的早日脱离苦海

    注: 现在推荐使用Android Studio,以后google在Android Studio上个性差异化的东西越来越多, 所以越早使用Android Studio越好,看看更新文档,使我们开发更方便 ...

  6. [译]Mongoose指南 - Connection

    使用mongoose.connect()方法创建连接 mongoose.conect('mongodb://localhost/myapp'); 上面的代码是通过默认端口27017链接到mongodb ...

  7. 【Solr】copy字段的应用

    目录 界面查询应用 熟悉Schema.xml copy域的应用 回到顶部 界面查询应用 添加一个文档 查询添加的文档 以上详细介绍了query里面的参数详解. 当不输入任何条件时,进行查询,看看返回结 ...

  8. Javascript实现AutoComplete自动匹配功能

    功能分析: 避免客户端频繁的访问服务器,因此客户端需要一个timer,监听键盘按键间隔时间,300-600毫秒能够接受. 服务端对要查找的数据源如果不大的话,应该尽量缓存在服务端内存中,而不是每次查找 ...

  9. 使用 Intel HAXM 为 Android 模拟器加速,媲美真机

    http://www.cnblogs.com/beginor/archive/2013/01/13/2858228.html

  10. 跟着百度学PHP[4]-OOP面对对象编程-2-属性和方法

    简单的说 变量就是成员属性函数就是成员方法(方法有三:构造方法[即为__construct].成员方法.析构方法[__destruct]) 成员方法和成员属性都是可以加修饰词.比如封装性的方法或者属性 ...