1.1DNS概述:

   在Internet中使用IP地址来确定某台计算机的唯一地址,而IP地址不太容易记忆。为了方便网络中计算机的访问,我们给计算机起了一个名字,通过将每台计算机名称与IP地址建立一个映射关系,将计算机名称与IP地址的映射关系保存并提供相关功能的系统称为域名解析系统。

1、DNS域名称空间:它指定用于组织名称的域的层次结构

2、资源记录(RR):它将DNS域名映射到特定类型的资源信息,以供在名称空间中注册或解析名称时使用。在Linux系统中,通常“名称解析库(文本文件,位于/var/named/)”中的每一行称作一个资源记录。

3、DNS服务器:它存储和应答资源记录的名称查询

4、DNS客户端(解析程序):它查询从服务器来的搜索及将名称解析为查询中指定的资源记录类型。

DNS系统的作用

正向解析:根据主机名称(域名)查找对应的IP地址

反向解析:根据IP地址查找对应的主机域名

DNS系统的层次结构:目前DNS是Internet的一项核心服务,在DNS中采用的分层结构,包括根域,顶级域,二级域及主机名称。

wKiom1Yjimvhq4pjAAHVqX9N2iQ261.jpg

顶级域:由两三个字母组成的名称,用于指示国家(地区)或使用名称的单位的类型。如:

组织域:.net, .com, .org, .mil, .edu, .gov, .cc, .mobi

国家域:.jp, .tw, .hk, .iq, .ir, .cn, .uk, .us

主机名:主机名在域名空间中是最底层,由主机名和域名共同组成FQDN(Fully Qualified Domain Name,完全合格的域名)。每个FQDN最多由255个字节组成。

1.2DNS查询过程

DNS的查询过程是指在客户端是通过DNS服务器将一个IP地址转化为一个FQDN,将一个FQDN转化为一个IP地址或查询一个区域的邮件服务器的过程。

1.2.1按查询方式分类

递归查询:大多数客户机向DNS服务器解析域名的方式

迭代查询:大多数DNS服务器向其他DNS服务器解析域名的方式


1.2.2按查询内容分类:

正向查询:由域名查找IP地址

反向查询:由IP地址查找域名

1.2.3实例

下面通过查询www.abc.com的例子来了解DNS查询的基本原理。

客户端将www.abc.com的查询提交给本地的DNS服务器。

本地DNS服务器检查区域数据库,由于此服务器没有abc.com的授权,因此它将查询提交给根服务器,请求解析主机名,根服务器就把“com.”DNS服务器IP地址返回给本地DNS服务器。

本地DNS服务器将请求发送给“com”这台服务器,此服务器有abc.com记录,它就把“abc.com”这台DNS服务器的IP返回给本地DNS服务器。

本地服务器向“abc.com”这台DNS服务器发送请求,由与此服务器有“www.abc.com”记录,因此它将www.abc.com的IP地址返回给本地DNS服务器。

本地DNS服务器将www.abc.com的IP地址返回给客户端。

1.3DNS资源记录类型

DNS服务器在提供名称解析服务时,它会查询自己的数据库,在该数据库中包含DNS区域资源信息的资源记录(RESOURCE RECORD,RR)。在DNS区域资源信息中常见的资源记录有以下几种

SOA:起始授权记录(start of authority record)在一个区域必须是唯一的,定义了区域的全局参数,进行整个区域的管理设置。

NS:名称服务器(name server)记录在一个区域至少有一条,记录了某个区域的授权服务器

A:地址(address)记录,把FQDN映射到IP地址

CNAME:别名(canonical name) 

PTR:反向地址(domain name pointER)记录,把IP知道映射到FQDN

MX:邮件交换(mail exchanger)记录,指向一个邮件服务器

SRV:服务资源记录(service resource record)一般是为微软的活动目录设置时的应用

TXT:(text)注释或非关键的信息

KEY:(public key)保存一个关于DNS名称的公钥

NXT:(next)指出一个特定名称不在域中

1.4DNS解析顺序

linux中DNS的解析是通过/etc/nsswitch.conf,/etc/host.conf配置文件决定的。

wKiom1YjioLTuQkCAAAd9n9l-0U259.jpg

其含义是先通过/etc/hosts文件进行解析,再尝试将请求发送到指定的DNS服务器。


2.BIND安装

BIND(Berkeley Internet Name Daemon)伯克利Internet域名服务。

wKioL1YjisqSn1hUAABP97LVj24693.jpg

2.1bind服务

service named start    启动

service named restart   重新启动

service named stop    暂停

service named reload   重载

service named status   状态

chkconfig named on    自启动

3.主要配置文件:/etc/named.conf

[root@lys ~]# cat /etc/named.conf

//

// named.conf

//

// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS

// server as a caching only nameserver (as a localhost DNS resolver only).

//

// See /usr/share/doc/bind*/sample/ for example named configuration files.

//


options {

listen-on port 53 { any; };

listen-on-v6 port 53 { ::1; };

directory "/var/named";

dump-file "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

allow-query     { any; };

recursion yes;  


dnssec-enable yes;

dnssec-validation yes;

dnssec-lookaside auto;


/* Path to ISC DLV key */

bindkeys-file "/etc/named.iscdlv.key";


managed-keys-directory "/var/named/dynamic";

};


logging {

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };

};

zone "." IN {

type hint;

file "named.ca";

};

我们还可以在named.conf中定义ACL:

acl string { address_match_element; ... };一般ACL语句放到配置文件的顶部,以方便调用。

options块用于指定BIND服务的参数,如下

listen-on port:用于指定BIND服务器侦听的端口

directory :指定区域配置文件所在的目录

allow-query :指定接受DNS查询请求的客户端

recursion yes :是否允许递归查询

allow-recursion:指定那些主机能够进行递归查询,可以接ACL

dump-file 当执行rndc dumpdb命令时,DNS服务器存放数据库文件的路径名

statistics-file :当执行rndc status命令时,服务器会将统计信息追加到的文件路径

memstatistics-file :DNS服务器输出的内存使用统计文件的路径名

主配置文件是通过zone定义当前BIDN可管辖的所有区域,定义方法如下

zone “” IN {

   参数

};

参数主要有:type, file,allow-update

master:主要区域,拥有该区域数据文件,并对此区域提供管理数据

slave:辅助区域,辅助区域从主区域同步所有区域数据

forward:转发区域

hint:使用hint区域中的信息来查找根域名服务器

3.1区域配置文件

[root@lys named]# cat  named.magedu.com 

$TTL 1D

@IN SOAmagedu.com. admin.magedu.com. (

0; serial  更新序列号

1D; refresh 刷新间隔

1H; retry   重试延时

1W; expire   失效时间

3H ); minimum 无效地址解析记录的默认缓存时间

        IN NSns1.magedu.com.;

        IN      NS      ns2.magedu.com.;

BIND中定义资源记录的基本格式如下

【名称】【TTL】【网络类型】 资源记录类型  数据

wKioL1Yjit_CpvkhAAIMekDNXNI166.jpg

$TTL(Time To Live,生存时间)记录

SOA(Start Of Authority,授权信息开始)记录

分号“;”开始的部分表示注释信息

4.构建简单的缓存服务器,只需修改listen-on port ,allow-query这两个参数。 

[root@lys ~]# cat /etc/named.conf

//

// named.conf

//

// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS

// server as a caching only nameserver (as a localhost DNS resolver only).

//

// See /usr/share/doc/bind*/sample/ for example named configuration files.

//

acl OURSLAVES {

   127.0.0.1;

   192.168.0.0/16;

};

options {

listen-on port 53 { any; };   

listen-on-v6 port 53 { ::1; };

directory "/var/named";

dump-file "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

allow-query     { any; };  //允许所有客户机的查询请求  

recursion { OURSLAVES;};  调用ACL语句

dnssec-enable yes;

dnssec-validation yes;

dnssec-lookaside auto;


/* Path to ISC DLV key */

bindkeys-file "/etc/named.iscdlv.key";


managed-keys-directory "/var/named/dynamic";

};


logging {

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };

};


zone "." IN {

type hint;

file "named.ca";

};

include "/etc/named.rfc1912.zones";

include "/etc/named.root.key";

以上就是缓存域名服务器的主配置文件,保存配置重启named服务就行了

[root@lys ~]# service named restart 

Stopping named: .                                          [  OK  ]

Starting named:                                            [  OK  ]

[root@lys ~]# 

而它的数据文件则在/var/named/named.ca ,这是软件自带的我们不需要做任何修改。全球13台根域名服务器的地址。

[root@lys ~]# cat /var/named/named.ca 

; <<>> DiG 9.9.4-P2-RedHat-9.9.4-12.P2 <<>> +norec NS . @a.root-servers.net

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26229

;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 24


;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 1472

;; QUESTION SECTION:

;.INNS


;; ANSWER SECTION:

.518400INNSa.root-servers.net.

.518400INNSb.root-servers.net.

.518400INNSc.root-servers.net.

.518400INNSd.root-servers.net.

.518400INNSe.root-servers.net.

.518400INNSf.root-servers.net.

.518400INNSg.root-servers.net.

.518400INNSh.root-servers.net.

.518400INNSi.root-servers.net.

.518400INNSj.root-servers.net.

.518400INNSk.root-servers.net.

.518400INNSl.root-servers.net.

.518400INNSm.root-servers.net.


;; ADDITIONAL SECTION:

a.root-servers.net.518400INA198.41.0.4

b.root-servers.net.518400INA192.228.79.201

c.root-servers.net.518400INA192.33.4.12

d.root-servers.net.518400INA199.7.91.13

e.root-servers.net.518400INA192.203.230.10

f.root-servers.net.518400INA192.5.5.241

g.root-servers.net.518400INA192.112.36.4

h.root-servers.net.518400INA128.63.2.53

i.root-servers.net.518400INA192.36.148.17

j.root-servers.net.518400INA192.58.128.30

k.root-servers.net.518400INA193.0.14.129

l.root-servers.net.518400INA199.7.83.42

m.root-servers.net.518400INA202.12.27.33

a.root-servers.net.518400INAAAA2001:503:ba3e::2:30

c.root-servers.net.518400INAAAA2001:500:2::c

d.root-servers.net.518400INAAAA2001:500:2d::d

f.root-servers.net.518400INAAAA2001:500:2f::f

h.root-servers.net.518400INAAAA2001:500:1::803f:235

i.root-servers.net.518400INAAAA2001:7fe::53

j.root-servers.net.518400INAAAA2001:503:c27::2:30

k.root-servers.net.518400INAAAA2001:7fd::1

l.root-servers.net.518400INAAAA2001:500:3::42

m.root-servers.net.518400INAAAA2001:dc3::35


;; Query time: 58 msec

;; SERVER: 198.41.0.4#53(198.41.0.4)

;; WHEN: Wed Apr 23 14:52:37 CEST 2014

;; MSG SIZE  rcvd: 727

接下来我们可以使用dig,nslookup,host等工具进行验证

wKiom1YjjLjTMwE1AAJYLHJzqLE746.jpg

出现箭头所示的信息,说明一个简单的缓存域名服务器就搭建成功了。

5.构建转发DNS服务器则只需要在缓存域名服务器的基础上在主配置文件/etc/named.conf中添加一个参数forwarders。在forwarders中指定它的上级服务器,通过把域名请求发送到上级DNS服务器来查询结果。这里我们的转发DNS服务器就相当于一个代理服务器了。如下所示指向一些知名的免费的DNS服务器。

forwarders {8.8.8.8;114.114.114.144; };

6.构建主域名服务器。

  • 主域名服务器:ns1.magedu.com,192.168.108.5

  • 两台服务器均能够提供 magedu.com 区域的域名解析

  • 网站服务器“www.magedu.com”,IP地址为“192.168.108.101”

  • 邮件服务器“mail.magedu.com”,IP地址为“192.168.108.100”

  • 在线培训站点服务器“study.magedu.com”,IP地址为“192.168.108.102”

基本配置步骤:

1.在named.conf配置文件中添加“magedu.com”主区域

2.建立“magedu.com”区域的数据文件

3.启动或者重新加载named服务程序

4.验证主域名服务器

1》在named.conf主配置文件中添加“magedu.com”区域

zone "magedu.com" IN {

type master;        //指明服务器的类型

file "named.magedu.com";   //数据文件存放路径

};

zone "108.168.192.in-addr.arpa" IN {

        type master;

        file "named.108.168.192";

};

2》建立“magedu.com”区域的正向解析数据文件

[root@lys ~]# cat /var/named/named.magedu.com 

$TTL 1D

@IN SOAmagedu.com. admin.magedu.com. (

0; serial

1D; refresh

1H; retry

1W; expire

3H ); minimum

        IN NSns1.magedu.com.;

        IN  MX   10 mail.magedu.com.;

ns1     IN      A    192.168.108.5;

mail    IN      A    192.168.108.100;

www     IN      A    192.168.108.101;

study    IN      A    192.168.108.102;

*       IN      A    192.168.108.119;

3》建立“magedu.com”区域的反向解析数据文件

[root@lys ~]# cat /var/named/named.108.168.192 

$TTL 1D

@IN SOAmagedu.com. admin.magedu.com. (

0; serial

1D; refresh

1H; retry

1W; expire

3H ); minimum

        IN NSns1.magedu.com.;

101      IN      PTR   www.magedu.com.;

100      IN      PTR   mail.magedu.com.;

102      IN      PTR   study.magedu.com.;c


5       IN      PTR   ns1.magedu.com.;

4》启动或者重新加载named服务程序

service named reload    重载

service named restart    重新启动

5》验证主域名服务器

正向解析www.magedu.com  ,其中@指定作为解析的DNS服务器wKioL1YjkyHx6q6zAAHCSgfPUsU000.jpg

反向解析www.magedu.com

wKiom1Yjk6zBBSRdAAHpddpkvoA607.jpg

在这里有几个地方需要注意:

  • 如果启动服务失败,一定要查看日志文件/var/log/messages

  • 在重启服务前 ,记得要关闭selinux,清空iptables规则,否则也会影响DNS服务的启动

  • 在配置完成后,要对配置文件进行语法检查

  • named-checkconf 检查配置文件

  • named-checkzone 检查zone数据文件

7.构建主从域名服务器。

  1. 在主域名服务器的主配置文件/etc/named.conf进行如下配置

zone "magedu.com" IN {

type master;

file "named.magedu.com";

        allow-transfer {192.168.108.6;};   //指定从域名服务器IP

};

zone "108.168.192.in-addr.arpa" IN {

        type master;

        file "named.108.168.192";     

        allow-transfer { 192.168.108.6;};  //指定从域名服务器IP


};

2.在主域名服务器的数据配置文件/var/named/named.magedu.com进行如下配置

[root@lys ~]# cat /var/named/named.magedu.com 

$TTL 1D

@IN SOAmagedu.com. admin.magedu.com. (

0; serial

1D; refresh

1H; retry

1W; expire

3H ); minimum

        IN NSns1.magedu.com.;

        IN      NS      ns2.magedu.com.;

        IN      MX   10 mail.magedu.com.;

ns1     IN      A    192.168.108.5;

ns2     IN      A    192.168.108.6;

mail    IN      A    192.168.108.100;

www     IN      A    192.168.108.101;

study   IN      A    192.168.108.102;

web     IN      A    192.168.108.101;

*       IN      A    192.168.108.119;

3.在从域名服务器的主配置文件/etc/named.conf进行如下配置,注意从域名服务器不需要配置数据文件,它默认是从主域名服务器学习同步的,就是说它能够学习到主域名服务器的数据文件。

zone "magedu.com" IN {


        type slave;            //指定服务器类型

        file "slaves/named.magedu.com";

        masters{192.168.108.5;};    // 指定主服务器IP

}; 

zone "108.168.192.in-addr.arpa" IN {

        type slave;            //指定服务器类型

        file "slaves/named.108.168.192";

        masters{192.168.108.5;};   // 指定主服务器IP

};

4.完成配置后,需要对配置文件进行检测:

[root@lys ~]# service named configtest

5.启动或者重新加载named服务程序

[root@lys ~]# service named restart

Stopping named:                                            [  OK  ]

Starting named:                                            [  OK  ]

6.查看日志文件

wKiom1YjmUOR9JxMAAOOt-pCLPQ735.jpg

上面没有任何报错,running,zone magedu.com/IN: sending notifies (serial 0),Oct 18 21:04:19 lys named[18145]: zone 108.168.192.in-addr.arpa/IN: sending notifies (serial 0)


wKioL1YjmYbief0zAAO206eXyjs482.jpg

client 192.168.108.6#10465: received notify for zone 'magedu.com'

client192.168.108.6#33135: received notify for zone '108.168.192.in-addr.arpa'说明主从同步完成。

7.去从服务器的/var/named/slaves目录下,看是否有同步主服务器数据文件

[root@lys ~]# cd /var/named/slaves/

[root@lys slaves]# ll

total 8

-rw-r--r-- 1 named named 486 Oct 18 11:08 named.108.168.192

-rw-r--r-- 1 named named 498 Oct 18 20:45 named.magedu.com

确实同步了。

8.验证

先在主服务器上

wKiom1Yjm03jpoxqAAGj1uKzkUE019.jpg

反向解析也没问题

wKiom1Yjm8zATdMKAAH079OZeKk711.jpg

再去从服务器

wKioL1Yjm8_SYqLPAAGqmX_9BxA136.jpg

反向解析也没问题

wKioL1YjnE7ANMpRAAHEJMLPNiA900.jpg

这样主从域名服务器的搭建就完成了。