参考文献:http://linux.vbird.org/linux_server/0350dns.php
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,DNS服务器将用户方便记忆的网址转化为计算机可以识别的IP地址,这一过程就称为域名解析。DNS协议运行在UDP协议之上,使用端口号53。
通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。通常顶级域名又称为根域,目前全球共有13个根服务器,其中10个在美国,另外三个位于英国、瑞典、日本。
域名结构为根域、一级域名、二级域名…….最多可以有127个域名。
一级域名就是我们常见的网址的后缀,即com、cn、edu等等。
<1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器.
当客户端在前本地DNS域名服务器请求前,首先会检查自己的缓存和本地DNS配置。
具体过程包括:
<2> 当本地的域名服务器收到请求后,就先查询本地的缓存.
如果有查询的DNS 信息记录,则直接返回查询的结果.
如果没有该记录,本地域名服务器就把请求发给根域名服务器.
<3> 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址.
<4> 本地服务器再向返回的域名服务器发送请求.
<5> 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址.
<6> 本地域名服务器将查询请求发送给返回的DNS 服务器.
<7> 域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS 信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应).
<8> 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机.
(1)递归查询(适合DNS本地服务器,DNS本地服务器会将最终结果反馈给客户)
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机.如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机.
(2)迭代查询(其他高级DNS服务器,如跟域名服务器,当本地DNS服务器请求时,根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址)
DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止.
主名称服务器(primary name server)
主名称服务器从域管理员构造的本地磁盘文件中加载域信息,该文件(区域文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对其管辖域的任何查询。
从名称服务器(secondary name server)
从名称服务器它可从主服务器中复制一整套域信息。区域文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为”区域文件复制”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。
唯高速缓存名称服务器(caching-only server)
唯高速缓存名称服务器可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。
当BIND被配置为缓存服务器的时候,它只会回应已缓存的请求,并将所有其他的请求转发到上游的 DNS 服务器。缓存名称服务器只需要.这个zone file文件即可。
CentOS:
yum install bind
/etc/hosts
主机的固定DNS配置文件,对于简单的主机名解析(点分表示法),默认在请求DNS或NIS网络域名服务器前,/etc/named.conf 通常会告诉程序先查看此文件。
/etc/resolv.conf :指定查看那个域名时,使用那个DNS服务器(如DNS server指定根域名解析服务器,client指定本地DNS 服务器)
/etc/named.conf DNS服务器的运行主配置文件。设置一般的name参数,指向该服务器使用的域数据库的信息源、权限过滤配置等;
/var/named/named.ca 根域名配置服务器指向文件。指向根域名配置服务器,用于告诉缓存服务器初始化
/var/named/localhost.zone localhost区正向域名解析文件
用于将本地IP地址(127.0.0.1)转换为本地回送IP地址(127.0.0.1)
/var/named/name.local localhost区反向域名解析文件。用于将localhost名字转换为本地回送IP地址(127.0.0.1)
/etc/named.rfc1912.zones 区块设置文件,指定当前DNS服务器管理的区域及区域数据解析数据配置文件;
该文件的默认配置:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
一般的配置格式:
IP hostname
192.169.49.121 node1
# Generated by NetworkManager
search DHCP HOST
nameserver 192.168.0.1
nameserver 192.168.1.1
默认配置:
options {
listen-on port 53 { 127.0.0.1; };
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 { localhost; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
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";
options 定义全局配置选项和默认值。包括:
logging 定义日志内容和位置
zone 定义一个区
include 把其他的文件包含到配置文件中
acl 定义ip地址的访问控制清单
control 定义rndc使用的控制通道
key 定义授权的安全密钥
server 定义远程服务的特征
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
dns区域是为了便于根据实际情况来分散DNS名称管理工作的负荷,将DNS名称空间划分为区域(zone)来进行管理。一个区域就是DNS解析树上一个独立管理的子树。
区域是DNS服务器的管辖范围, 是由DNS名称空间中的单个区域或由具有上下隶属关系的紧密相邻的多个子域组成的一个管理单位. 因此, DNS名称服务器是通过区域来管理名称空间的,而并非以域为单位来管理名称空间,但区域的名称与其管理的DNS名称空间的域的名称是一一对应的.
一台DNS服务器可以管理一个或多个区域, 而一个区域也可以由多台DNS服务器来管理(例如:由一个主DNS服务器和多个辅助DNS服务器来管理). 在DNS服务器中必须先建立区域, 然后再根据需要在区域中建立子域以及在区域或子域 中添加资源记录,才能完成其解析工作.
zone 通常具有以下几种标志:
/var/named/named.localhost文件配置:
$TTL 3H
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
~