DNS;智能DNS
http://www.linuxde.net/2011/11/2000.html
配置之前先了解一下BIND DNS服务器软件:BIND是一种开源的DNS(Domain Name System)协议的实现,包含对域名的查询和响应所需的所有软件。它是互联网上最广泛使用的一种DNS服务器,对于类UNIX系统来说,已经成为事实上的标准。
为了构架DNS服务器来解析域名或IP地址,我们得安装BIND和caching-nameserver。为了TCP和UDP53数据包能通过,我们也有必要配置路由器。
安装 BIND 软件包
1、安装
# yum -y install bind caching-nameserver
2、配置
下面的例子是以公网IP(172.16.0.80/29),局域网IP(192.168.0.0/24),域名(linuxde.net)作说明。在配置你自己的服务器时,请使用你自己的IP和域名。
# vim /etc/named.conf
options { directory "/var/named"; # query range allow-query { localhost; 192.168.0.0/24; }; # transfer range allow-transfer { localhost; 192.168.0.0/24; }; # recursion range allow-recursion { localhost; 192.168.0.0/24; }; }; controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; }; # here is the section for internal informations vimew "internal" { match-clients { localhost; 192.168.0.0/24; }; zone "." IN { type hint; file "named.ca"; }; # set zones for internal zone "linuxde.net" IN { type master; file "linuxde.net.lan"; allow-update { none; }; }; # set zones for internal zone "0.168.192.in-addr.arpa" IN { type master; file "0.168.192.db"; allow-update { none; }; }; zone "localdomain" IN { type master; file "localdomain.zone"; allow-update { none; }; }; 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 "255.in-addr.arpa" IN { type master; file "named.broadcast"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.zero"; allow-update { none; }; }; }; vimew "external" { match-clients { any; }; zone "." IN { type hint; file "named.ca"; }; # set zones for external zone "linuxde.net" IN { type master; file "linuxde.net.wan"; allow-update { none; }; }; # set zones for external *note zone "80.0.16.172.in-addr.arpa" IN { type master; file "80.0.16.172.db"; allow-update { none; }; }; }; include "/etc/rndc.key"; # *note : For How to write for reverse resolvimng, Write network address reversely like below. the case for 192.168.0.0/24 network address? 192.168.0.0 range of network? 192.168.0.0 - 192.168.0.255 how to write? 0.168.192.in-addr.arpa case of 172.16.0.80/29 network address? 172.16.0.80 range of network? 172.16.0.80 - 172.16.0.87 how to write? 80.0.16.172.in-addr.arp
设置Zones
创建zone文件以便服务器能解析域名IP。
1、内部zone文件
这个例子使用的是内网地址(192.168.0.0/24),域名(linuxde.net),请根据自己的具体情况配置。
# vim /var/named/linuxde.net.lan
$TTL 86400 @ IN SOA ns.linuxde.net. root.linuxde.net. ( 2007041501 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) # define name server IN NS ns.linuxde.net. # internal IP address of name server IN A 192.168.0.17 # define Mail exchanger IN MX 10 ns.linuxde.net. # define IP address and hostname ns IN A 192.168.0.17
2、外部zone文件
这个例子使用的是外网地址(172.16.0.80/29),域名(linuxde.net),请替换成自己的。
# vim /var/named/linuxde.net.wan
$TTL 86400 @ IN SOA ns.linuxde.net. root.linuxde.net. ( 2007041501 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) # define name server IN NS ns.linuxde.net. # external IP address of name server IN A 172.16.0.82 # define Mail exchanger IN MX 10 ns.linuxde.net. # define IP address and hostname ns IN A 172.16.0.82
创建zone文件使服务器能够反向解析IP到域名。
3、内部zone文件
这个例子使用的是内网地址(192.168.0.0/24),域名(linuxde.net),请使用自己的设置替换。
# vim /var/named/0.168.192.db
$TTL 86400 @ IN SOA ns.linuxde.net. root.linuxde.net. ( 2007041501 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) # define name server IN NS ns.linuxde.net. # define range that this domain name in IN PTR linuxde.net. # define IP address and hostname IN A 255.255.255.0 17 IN PTR ns.linuxde.net.
4、外部zone文件
这例子使用外网地址(172.16.0.80/29),域名(linuxde.net),请替换成自己的。
# vim /var/named/80.0.16.172.db
$TTL 86400 @ IN SOA ns.linuxde.net. root.linuxde.net. ( 2007041501 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) # define name server IN NS ns.linuxde.net. # define range that this domain name in IN PTR linuxde.net. # define IP address and hostname IN A 255.255.255.248 82 IN PTR ns.linuxde.net.
启动BIND
1、完成BIND的配置后,在启动named之前,还需要建立chroot环境。
# yum -y install bind-chroot
# /etc/rc.d/init.d/named start
# chkconfig named on
2、操作检验
确认服务器已经正确解析域名或IP地址。
# dig ns.linuxde.net.
; <<>> DiG 9.3.4 <<>> ns.linuxde.net.
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54592
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;ns.linuxde.net. IN A
;; ANSWER SECTION:
ns.linuxde.net. 86400 IN A 192.168.0.17
;; AUTHORITY SECTION:
linuxde.net. 86400 IN NS ns.linuxde.net.
;; Query time: 0 msec
;; SERVER: 192.168.0.17#53(192.168.0.17)
;; WHEN: Thu Mar 8 19:35:19 2007
;; MSG SIZE rcvd: 68
# dig -x 192.168.0.17
; <<>> DiG 9.3.4 <<>> -x 192.168.0.17
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45743
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;17.0.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
17.0.168.192.in-addr.arpa. 86400 IN PTR ns.linuxde.net.
;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 86400 IN NS ns.linuxde.net.
;; ADDITIONAL SECTION:
ns.linuxde.net. 86400 IN A 192.168.0.17
;; Query time: 0 msec
;; SERVER: 192.168.0.17#53(192.168.0.17)
;; WHEN: Thu Mar 8 19:37:50 2007
;; MSG SIZE rcvd: 107
配置从DNS服务器
配置从DNS服务器比较简单。下面的例子主DNS是“ns.linuxde.net”,从DNS是“ns.example.info”。
1、在主DNS服务器的zone文件作如下配置
# vim /var/named/linuxde.net.wan
$TTL 86400 @ IN SOA ns.linuxde.net. root.linuxde.net. ( # update serial 2007041501 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) IN NS ns.linuxde.net. # add name server IN NS ns.example.info. IN A 172.16.0.82 IN MX 10 ns.linuxde.net. ns IN A 172.16.0.82
# rndc reload
server reload successful
2、配置从DNS服务器
# vim /etc/named.conf
# add these lines below
zone "linuxde.net" IN {
type slave;
masters { 172.16.0.82; };
file "slaves/linuxde.net.wan";
};
# rndc reload
server reload successful
# ls /var/named/slaves
linuxde.net.wan # zone file in master DNS has been just transfered
设置别名记录,如果你想为你的主机设置另一个名称,在zone文件定义CNAME记录
# vim /var/named/server-Linux.info.wan
$TTL 86400 @ IN SOA ns.server-linux.info. root.server-linux.info. ( # update serial 2007041501 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) IN NS ns.server-linux.info. IN A 172.16.0.82 IN MX 10 ns.server-linux.info. ns IN A 172.16.0.82 # aliase IN CNAME server's name ftp IN CNAME ns.server-linux.info.
# rndc reload
server reload successful
以下是一个整理的主配文件参数解释(仅供参考)/**/代表注释:
options { /*OPTIONS选项用来定义一些影响整个DNS服务器的环境,如这里的DI RECTORY用来指定在本文件指定的文件的路径,如这里的是将其指定到 /var/named 下,在这里你还可以指定端口等等。不指定则端口是53 */ directory "/var/named"; }; // // // a caching only nameserver config // controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; }; zone "." IN { //在这个文件中是用zone关键字来定义域区的,一个zone关键字定义一个域区 type hint; /*在这里type类型有三种,它们分别是master,slave和hint它们的含义分别是: master:表示定义的是主域名服务器 slave :表示定义的是辅助域名服务器 hint:表示是互联网中根域名服务器 */ file "named.ca"; //用来指定具体存放DNS记录的文件 }; zone "localhost" IN { //定义一具域名为localhost的正向区域 type master; file "localhost.zone" ; allow-update { none; }; }; zone "test.net" IN { //指定一个域名为test.net的正向区域 type master; file "test.net” allow-update { none;}; }; zone "0.0.127.in-addr.arpa" IN { //定义一个IP为127.0.0.*的反向域区 type master; file "named.local"; allow-update { none; }; }; zone "0.192.168.in-addr.arpa" IN { //定义一个IP为168.192.0.*反向域区 type master; file "168.192.0"; /var/named/test.net文件 @ IN SOA linux.test.net. Webmaster.test.net. ( SOA表示授权开始 /*上面的IN表示后面的数据使用的是INTERNET标准。而@则代表相应的域名,如在这里代表test.net,即表示一个域名记录定义的开始。而linux.test.net则是这个域的主域名服务器,而webmaster.test.net则是管理员的邮件地址。注意这是邮件地址中用.来代替常见的邮件地址中的@.而SOA表示授权的开始 */ 2003012101 ; serial (d. adams) /*本行前面的数字表示配置文件的修改版本,格式是年月日当日修改的修改的次数,每次修改这个配置文件时都应该修改这个数字,要不然你所作的修改不会更新到网上的其它DNS服务器的数据库上,即你所做的更新很可能对于不以你的所配置的DNS服务器为DNS服务器的客户端来说就不会反映出你的更新,也就对他们来说你更新是没有意义的。 */ 28800 ; refresh /*定义的是以为单位的刷新频率 即规定从域名服务器多长时间查询一个主服务器,以保证从服务器的数据是最新的 */ 7200 ;retry /*上面的这个值是规定了以秒为单位的重试的时间间隔,即当从服务试图在主服务器上查询更时,而连接失败了,则这个值规定了从服务多长时间后再试 */ 3600000 ; expiry /*上面这个用来规定从服务器在向主服务更新失败后多长时间后清除对应的记录,上述的数值是以分钟为单位的 */ 8400 ) /*上面这个数据用来规定缓冲服务器不能与主服务联系上后多长时间清除相应的记 录 */ IN NS linux IN MX 10 linux linux IN A 168.192.0.14 it-test1 IN A 168.192.0.133 www IN CNAME linux /*上面的第一列表示是主机的名字,省去了后面的域。 NS:表示是这个主机是一个域名服务器, A:定义了一条A记录,即主机名到IP地址的对应记录 MX 定义了一邮件记录 CNAME:定义了对应主机的一个别名 /var/named/168.192.0 @ IN SOA linux.test.net. webmastert.linux.net. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS linux.test.net. /*以上的各关键字的含义跟test.net是相同的 14 IN PTR linux.test.net. 133 IN PTR it-test1.test.net. /* 上面的第一列表示的是主机的IP地址。省略了网络地址部分。如14完整应该是: 168.192.0.14 PTR:表示反向记录 最后一列表示的是主机的域名。
==============================
http://blog.sina.com.cn/s/blog_6fe1bc2e0101eowf.html
假设某网站 ,如www.a.com, 上海有服务器一台,给的IP是1.1.1.1 ,北京有一台,给的是2.2.2.2 处于不同IDC,要求实现上海的用户访问在上海的服务器, 而北京的用户访问到北京的服务器.
角色1 Client 上海电信用户5.5.5.10
角色2 Client的DNS服务器 5.5.5.1 根据Client的网络接入的方式不同,DNS服务器的IP地址是
不一样的
角色3 a.com的soa dns,ip 3.3.3.3 由com. 授权,
角色4 www.a.com的2台服务器, 上海的IP1.1.1.1 北京的2.2.2.2
角色5 上海的DNS服务器 1.1.1.10
角色6 北京的DNS服务器 2.2.2.10
在确定好所有的角色后,我们来看看这个工作过程以及解决方案
DNS解析分为递归与跌代.
假定上海电信dns 是递归查询, 通过一个图我们来说明智能解析过程. (请把该图放大再看比较清楚)
因为递归查询,那么情况比较复杂,因为 最终访问到a.com dns 服务器的是上海电信dns服务器, 是Client DNS. 这样只能判定Client DNS比较距离 上海或者北京比较近,而无法断定Client
是距离那里比较近。
不过,由于网络接入的方式不一样,例如 网通的ADSL方式,其IP、DNS地址均由动态获取,这样此时 Client DNS服务器与Client应该是属于相同运营商IP,这样就能够通过判定Client DNS地址来大约断定Client所属运营商所处地区,从而给予Client一个正确的IP地址解析。
但是假如某上海用户手工指定DNS,恰好又指定了一个北京的递归查询DNS服务器,这个时候,就比较麻烦了,因为没有办法得知Client的实际位置。
考虑此时是递归查询,所知Client DNS的IP地址为北京IP,则a.com会解析北京服务器地址给该 Client DNS,那么Client作为上海用户最终得到的IP将是 www.a.com = 2.2.2.2 (该地址为北京地址) ,这样就会导致此用户得到错误的服务器地址。
不过,好运的是,现在的大多数DNS服务器都是迭代查询,因为没有多少DNS服务器可以承受递归的流量,所以对于99%的用户来说,都能得到正确的地址解析,从而正确的访问服务器。
那么迭代查询的情况又会如何呢?则最终向a.com询问谁是 www.a.com的 ,将是Client.
这样,a.com的DNS服务器将得到Client 的IP,再根据Client IP地址距离那里比较近,就可以决定返回www.a.com 的IP 1.1.1.1 还是 2.2.2.2; 但是这种工作模式的问题是必须选择一个好的算法。为什么呢?
应为需要考虑
.........................
http://guodayong.blog.51cto.com/263451/1173678
DNS: Domain Name Service
DNS服务是一种分布式数据库,它提供规范机器名到数字IP地址的映射及数字IP到规范机器名。
DNS相关定义:
用于主机和IP地址的一个有层次结构的名字空间;
主机名和地址信息保存在一个分布式数据库中;
一个查询这个数据库的解析器(resolver)
改进了路由电子邮件的机制,以及邮件发送方的身份验证机制
域名服务器用于交换信息的一种机制
用于查询网络上服务的一种机制
DNS工作原理:
DNS域名服务器其实就是个分布式数据库,它主要提供规范的FQDN到IP地址的解析,反之亦然。
构成全世界DNS系统的是一个分布式数据库,每个站点都维护着这个数据库的一个或者多个组成部分。有点类似如图1
- 说明:服务器之间的箭头上的数字均显示DNS查询事件的次序,字母则表示事件查询请求的类型。并且在此查询之前,ns.fin.example.com服务器没有相关的缓存记录,并且本地缓存文件也没有相关的www.fin.example.com的相关记录。
- 本地域名服务器是一台递归服务器,当它第一次发送查询请求时,得到的是推荐DNS服务器地址,则本地DNS服务器去新的DNS服务器发出查询请求,然后再去得到推荐的DNS服务发送请求,直到找到相应的主机记录为止。
- 查询流程详解:
- <1>所以当sandy用户查询www.fin.example.com这台主机的相关记录,它首先去本地(/etc/hosts)查询有没有相关的记录,有则返回结果,
- 没有则去本地DNS服务器(ns.fin.example.com)发送请求。
- <2>本地域名服务器(ns.fin.example.com)查询缓存发现没sandy用户查询的相关记录,所以它去根服务器查询fin.example.com的相关记录,并得到一个推荐的DNS服务器的地址(.com)
- <3>然后本地域名服务去com域名服务器查询(fin.example.com)的相关记录,并得到了关于exampl.com域服务器地址,然后本地域名服务向example.com发送查询请求,example.com域名服务器查询缓存没有相应的答案,则推荐到fin.example.com域名服务器去查询,对于查询域名信息来说,fin.example.com的域名则是权威的,它在自己的管辖内找到www这台主机,然后用www这台主机的地址回复本地域名服务器(ns.fin.example.com)。
- <4>本地域名服务器(ns.fin.example.com)得到了关于www.fin.example.com的主机记录,并将记录到缓存区域,然后发送给sandy用户。
- <5>下次再有用户查询www.fin.example.com主机信息时,本地域名服务器直接从缓存中调用此记录即可。
注:DNS查询类型:
递归查询:客户端得到结果要么成功,要么失败。(本地客户端和DNS服务直接交互)
迭代查询:服务器以相关最佳记录返回本地域名服务器。(DNS服务与DNS服务交互)
所以本地客户端详本地域名服务器查询请求时,查询类型为:一次递归,多次迭代。
DNS服务器的分类:
- 主域名服务器(Primary Name Server)
- 主域名服务器是特定域所有信息的权威来源,主域名服务器是特定域所有信息的权威来源,它从域管理员构造本地文件中加载域信息,
- 该文件包含服务器具有管理权的部分域结果的最权威信息。主域名服务器需要配置一组完整的文件,即主机配置文件(named.conf),正向区域文件、反向区域文件、高速缓存初始化文件(named.ca),回送文件(named.local)
- 辅助DNS服务器(Second Name Server)
- 辅助DNS服务器用来从主域名服务器同步区域数据文件,作为磁盘文件保存在辅助域名服务器相对应的目录,辅助DNS服务器只需要配置主配置文件即可,不需要配置区域数据文件。
- 唯高速缓存域名服务器(Cache-only Server)
- 唯高速缓存域名服务器不包含域名数据库文件,它每次将从域名服务器得到的查询结果返回给客户端,并在本地将以缓存,供下次查询使用。
DNS层次结构中资源记录的基本格式:
- [name] [ttl] [class] type [rdata]
- [name(名字)]:
- name字段表示该记录所描述的实体(通常是主机或者一个域)。如果几个连续的记录涉及同一个实体的话,那么则第一条之后可以省略,利用@特殊
- 字符来代替这个name字段。
- [ttl]字段
- TTL(time to live (存活时间)),默认字段以秒为单位指定时间长度,在指定的时间内,数据项可被缓存并且仍被认为是有效的。TTL必须位于该区域数据文件的第一行,来进行标识
- class:class指定网络类型:默认类型为IN
- IN(指Internet)、HS(Hesiod:本地使用的目录服务)、CH(供域名服务器内部用来标示自己)
- type类型:
- A(Address):记录FQDN-IP转换
- MX(Mail eXchanger):记录邮件交换记录
- CNAME(Canonical NAME):记录别名,允许将多个名字映射到一个主机,通常CNAME主要用于WEB和邮件服务器。
- SOA:(Start Of Authority):一个授权区的开始。每个配置文件必须包含SOA记录,以标志服务器所管理的起始处。
- PTR(domain name PonitTeR):记录IP-FQDN
- HINFO(Host INFOrmation):记录一组描述主机的信息文件组成,例如:一些硬件名称及操作系统名称等信息。
- rdata:
- A:记录主机IP地址
- HINFO:记录Hardware和OS相关记录
- MX:记录提供收发电子邮件相关信息,一般包含两个部分(preference-value)
BIND常用到的资源记录语法:
- 1、SOA资源记录
- $TTL 86400
- 区域名称(Name) 记录类型(type) SOA 主域名服务器(FQDN) 管理员邮箱地址(mail) (
- serial ##number 序列号,每次更改配置值是都要在原来的基础上加上1,表示以更新。
- refresh ##刷新时间(间隔)
- retry ##重试时间(间隔)
- expire ##过期时间(间隔)
- na ttl ) ##否定答案缓存TTL值
- 时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
- 好了,对DNS工作原理有所了解,那么就来创建个DNS服务器吧!!!
- 实验环境:
OS:RedHat 5.8
Software:bind97 bind97-utils bind97-libs
master server(172.16.88.1)
Domain Name:example.com
www主机地址:172.16.88.3/172.16.88.4 ##提供http服务
mail服务器:172.16.88.5 ##提供邮件的收发
www主机创建别名 sandy
slave server (172.16.88.2) ##实现负载均衡 - 第一步:使用YUM安装DNS所使用的软件包(BIND),这里使用的是bind97
- 第二步:自己创建配置文件(/etc/named.conf)
- 第三步:创建区域数据文件(/var/named)
- 第四步:使用相关命令(named-checkconf、named-checkzone)测试配置文件及区域文件是否存在语法错误
- 第五步:启动named服务(service named start 、/etc/rc.d/init.d/named start)
- 第六步:使用命令更改系统启动时自动在启动named服务(chkconfig named on)默认2345级别(可以根据自己的需求设定启动级别)
- 第七步:更改iptables和selinux的设置
- 第八步:分别使用(dig/nslookup)在Linux/Windows主机进行查询DNS相关资源记录
- 第九步:设置递归选项
- (1),实现不给任何主机递归,但可以给本地递归
- (2),实现只给172.16.0.0/16网段递归,其他不递归。
- 第十步:设置区域传送,并创建辅助DNS服务器并实现从主DNS服务同步区域数据文件并查看日志文件(/var/log/message)
- (1)、先创建一个辅助DNS
- (2)、然后再实现从主DNS服务器完全同步区域数据文件,查看日志文件及从服务器是否完成同步
- (3)、然后再主DNS服务器上新增一条资源记录并查看日志文件,然后到辅助DNS服务上查看日志是否 完成增量区域数据同步
- 第十一步:编译安装dnstop工具,查看DNS工作状态
第一步:配置YUM源(可以参考笔者的关于YUM和RPM的介绍来进一步了解YUM和RPM日常工作中的使用)
- [root@Gdy ~]# yum list all | grep 'bind'
- [root@Gdy ~]# rpm -e bind-libs bind-utils ##这里采用的是bind97版本,所以把系统默认安装的bind-libs、bind-utils卸载
- [root@Gdy ~]# yum install bind97 bind97-utils ##bind97(服务器所使用的软件包) bind97-utils(客户端工具)
第二步:创建DNS的主配置文件(/etc/named.conf)
- [root@Gdy ~]# mv /etc/named.conf /etc/named.conf.bak
- [root@Gdy ~]# vim /etc/named.conf
- 编辑主配置文件,添加如下内容(named.conf里面没有任何内容)
- options {
- directory "/var/named" ; ##指明区域文件保存的位置
- };
- zone "." IN ##定义根区域文件名称
- type hint;
- file "named.ca"; ##默认存放在/var/named/named.ca
- };
- zone "localhost" IN {
- type master;
- file "named.localhost";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.loopback";
- };
- zone "example.com" IN { ##定义example.com正向区域配置文件
- type master; ##类型为master(主DNS)
- file "example.com.zone"; ##example.com域正向区域配置文件存放名称(/var/named/example.com.zone)
- };
- zone "88.16.172.in-addr.arpa" IN { ##定义example.com域反向区域配置文件
- type master; ##类型为master(主DNS)
- file "172.16.88.zone"; ##example.com域反向区域配置文件存放名称(/var/named/172.16.88.zone)
- };
注:修改/etc/named.conf的权限为(640)及属主属组(root:named)
- [root@Gdy ~]# chown root:named /etc/named.conf ##将主配置文件的属主和属组改为root和named
- [root@Gdy ~]# chown 640 /etc/named.conf ##将named.conf的权限更改为640,只有管理员具有读写的权限,组有读的权限。
- [root@Gdy ~]# ll /etc/named.conf
- -rw-r--r-- 1 640 named 374 Apr 2 15:41 /etc/named.conf
- [root@Gdy ~]#
第三步:创建区域配置文件(example.com.zone)
- [root@Gdy ~]# cd /var/named
- [root@Gdy named]# vim example.com.zone
- 添加如下内容:
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2013040201 ##序列号(每次更新时都加上1,便于从服务器更新)
- 1H ##都长时间主动发送请求更新区域数据文件
- 5M ##如果更新失败,多长时间重试
- 7D ##过期时间
- 3D )
- IN NS ns1.example.com.
- ns1 IN A 172.16.88.1
- www IN A 172.16.88.3
- www IN A 172.16.88.4
- mail IN A 172.16.88.5
- ftp IN CNAME sandy
- :wq
- 注:更改example.com.zone的权限及属主及属组(同上)
- [root@Gdy named]# chown root:named example.com.zone
- [root@Gdy named]# chmod 640 example.com.zone
<2>创建反向(PTR)区域配置文件
- [root@Gdy named]# vim 172.16.88.zone
- 添加如下内容:
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2013040201
- 1H
- 5M
- 7D
- 3D )
- IN NS ns1.example.com.
- 1 IN PTR ns1.example.com.
- 3 IN PTR www.example.com.
- 4 IN PTR www.example.com.
- 5 IN PTR mail.example.com.
- :wq
- 注:更改172.16.88.zone的权限及属主及属组(同上)
- [root@Gdy named]# chown root:named 172.16.88.zone
- [root@Gdy named]# chmod 640 172.16.88.zone
第四步:通过named-checkconf及named-checkzone检测配置文件及区域文件是否有语法错误
第五步:启动二进制进程named
[root@Gdy ~]# service named restart {start|restart|reload|status}
第六步:设置named进程在开机时自动在2345级别下运行并查看named在哪个端口上启动并监听[root@Gdy ~]# chkconfig named on
[root@Gdy ~]# netstat -ntupl ##查看DNS启动端口
- [root@Gdy ~]# iptables -A FORWARD -i eth0 -p tcp --dport 53 -j ACCEPT
- [root@Gdy ~]# iptables -A FORWARD -i eth0 -p udp --doprt 53 -j ACCEPT
- 设置SELinux
- [root@Gdy ~]# getsebool -a | grep named
- named_disable_trans --> off
- named_write_master_zones --> off
- [root@Gdy ~]# getsebool
- [root@Gdy ~]# setsebool -P named_write_master_zones 1
第八步:使用nslookup和dig命令分别在Windows和Linux系统进行查询
<1>使用nslookup命令在Windows系统平台下测试DNS相关资源记录,测试如图(1)
<2>使用dig命令在Linux主机上进行DNS资源查询
注:这里我们将我们的DNS服务指向自己的IP地址(172.16.88.1),也可以不修改我们可以使用@在指定在哪个DNS上查询
第九步:设置递归参数
- (1)在配置文件,设置给不给任何主机递归,但给自己内网主机递归
- 实现过程:
- [root@Gdy ~]# vim /etc/named.conf
- 只要在options选项添加recursion no;即可
- options {
- directory "/var/named" ;
- recursion no;
- };
- [root@Gdy ~]# service named reload ##重新读取配置文件
- 注:笔者虚拟机可以连入网络,因为我们的DNS只给不给任何主机递归,只负责解析自己所属的域
- 所以我们使用dig命令来测试:
- [root@Gdy ~]# dig +recurse -t A www.baidu.com @172.16.88.1
- 测试如图
(2)如果要给某个网段(172.16.0.0/26)提供递归的话,我们用allow-recursion { 172.16.0.0/16; };
注:修改完成后,千万别忘记使用# service named reload命令来执行重新读取配置文件内容
我们还可以使用上面的指令在测试,看是否可以提供解析
[root@Gdy ~]# dig +recurse -t A www.baidu.com @172.16.88.1测试如图:
我用我的Windows主机来测试,看看能不能为192.168.0.0/24提供解析呢(答案:否定),测试如图
- (1)、首先我们要在主DNS服务器的正向区域文件添加辅助DNS的记录
- (2)、先创建一个辅助DNS
- (3)、然后再实现从主DNS服务器完全同步区域数据文件,查看日志文件及从服务器是否完成同步
- (4)、然后再主DNS服务器上新增一条资源记录并查看日志文件,然后到辅助DNS服务上查看日志是否完成增量区域数据同步
- (1)、这步是在主DNS(172.16.88.1)添加一条辅助DNS名称及A记录及设置只允许172.16.88.2同步传输区域数据文件
- [root@Gdy ~]# vim /var/named/example.com.zone
- 添加如下内容:
- options {
- directory "/var/named";
- allow-recurion { 172.16.0.0/16; };
- notify yes; ##当有数据更新时,立即通知辅助DNS服务
- }
- IN NS ns2.example.com.
- ns2 IN A 172.16.88.2
- :wq
- [root@Gdy ~]# vim /etc/named.conf
- 在example.com及88.16.172区域中添加如下内容:
- allow-transfer { 172.16.88.2; }; ##只允许172.16.88.2发送请求同步传送区域数据文件
- 注:辅助DNS服务器(172.16.88.2/16),所以下面的配置在辅助DNS上配置的。
(2)、创建一个辅助DNS服务器(slaves:172.16.88.2): ##只需要建立主配置文件,区域文件不需要创建,通过主服务器进行同步
- [root@Gdy-slaves ~]# yum list all | grep 'bind'
- [root@Gdy-slaves ~]# rpm -e bind-libs bind-utils ##这里采用的是bind97版本,所以把系统默认安装的bind-libs、bind-utils卸载
- [root@Gdy-slaves ~]# yum install bind97 bind97-utils ##bind97(服务器所使用的软件包、bind-libs、bind97-utils(客户端工具)
- [root@Gdy-slaves ~]# mv /etc/named.conf /etc/named.conf.bak
- [root@Gdy-slaves ~]# vim /etc/named.conf
- options {
- directory "/var/named" ;
- allow-recursion { 172.16.0.0/16; };
- };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "named.localhost";
- allow-transfer { none; };
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.loopback";
- allow-transfer { none; }; ##172.16.88.2是辅助DNS服务器,不需要给任何主机提供传送功能,故在这里使用allow-transfer { none; };
- };
- zone "example.com" IN {
- type slave;
- file "slaves/example.com.zone";
- masters { 172.16.88.1; };
- allow-transfer { none; };
- };
- zone "88.16.172.in-addr.arpa" IN {
- type slave;
- file "salves/172.16.88.zone";
- masters { 172.16.88.1; };
- allow-transfer { none; };
- };
- :wq ##保存并退出
使用named-checkconf检查配置文件是否有语法错误并将属组改为named,权限为640
然后到主DNS(172.16.88.1)服务器上执行service named reload,并查看日志(tail /var/log/message)是否将区域数据文件传送到辅助DNS服务器
然后到主DNS(172.16.88.1)分别在正向解析文件和反向解析文件中添加一条新的记录如
- [root@Gdy ~]# vim /var/named/example.com.zone
- 添加一条新的记录如下,并将序列号加上1,表示数据已更新:
- hello IN A 172.16.88.10
- :wq
- [root@Gdy ~]# vim /var/named/172.16.88.zone
- 10 IN PTR hello.example.com.
- :wq
- [root@Gdy ~]# service named reload
- [root@Gdy ~]# tail /var/log/message
- [root@Gdy-slaves~]# tail /var/log/message ##查看是否同步增量区域数据文件查看是否存在主DNS服务器上添加的新记录
- [root@Gdy-slaves ~]# cat example.com.zone
第十一步:编译安装dnstop
我们在维护DNS服务器时,网络管理员希望知道哪些用户在使用DNS服务器,同时也希望统计DNS的状态,我们可以使用dnstop来完成查询
dnstop源代码可以到http://www.stearns.org/dnstop/下载(可以选择rpm格式,也可以选择tar.gz)
在编译安装前,我们要准备编译环境将开发工具及开发库安装及libpcap-devel的支持
- [root@Gdy ~]# yum groupinstall "Development Libraries" "Development Tools" -y
- [root@Gdy ~]# yum install libpcap-devel -y
- [root@Gdy ~]# tar xf dnstop-20110502.tar.gz -C /usr/local ##解压路径
- [root@Gdy ~]# cd /usr/local/dnstop-20110502
- [root@Gdy dnstop-20110502]#./configure ##这里以默认属性安装
- [root@Gdy dnstop-20110502]#make
- [root@Gdy dnstop-20110502]#make install ##完成安装
编译安装过程附图参考:
编译安装成功了,下面就运行下,看看有哪些计算在使用DNS服务器在查询?
本文出自 “See you next year CA” 博客,请务必保留此出处http://guodayong.blog.51cto.com/263451/1173678
=================
http://www.niumowang.org/seo/host-speed/
浅析智能DNS,CDN加速,双线加速的原理与区别
相信有很多的朋友会被这几个名词绕的有些头大,很多朋友觉得智能DNS跟双线加速、CDN加速是类似的技术。其实不然,虽然他们的目的都是一个:让用户更快的访问网站。但是他们的应用原理却大相径庭。
大家一定很清楚这几种都是比较常见的主机加速的方式。所以文本主要介绍一下“智能dns解析”,“cdn加速技术”,“双线主机的加速方式”的基本加速原理,当你了解了这些就可以从这几种方式中找出一种更适合你的主机的加速方式。
一、何谓双线加速
双线加速比较常用的就是“双线双IP”和“双线单IP”,”BGP双线单IP”
- 双线双IP。
双IP双线路实现方式是指在一台服务器上安装两块网卡,分别接入电信网线与网通网线并设置一个网通IP与一个电信IP,这样一台服务器上就有了两个IP地址(即域名解析到哪个IP都可以访问),需要在服务器上添加网通或电信的路由表来实现网通用户与电信用户分别从不同的线路访问。
双线双IP比较常用的两种使用方式:
1.用两个不同的域名解析到这两个IP,在网站上放上不同的连接,网通用户点击访问网通的线路,电信用户点击访问电信的线路。(智能DNS没有广泛应用之前比较常见的一种方式)。
2.智能DNS,所谓的智能就是不需要用户自己去判断,而是交给域名解析服务器。智能判断用户的线路,如果是电信用户就解析到电信IP,网通用户就解析到网通IP。 - 双线单IP。
顾名思义,两条线路一个IP地址。一台服务器上配置一个网卡一个IP地址,此IP是网通IP或是电信IP,通过路由设备设置数据包是通过是电信网络或是网通网络发出来实现的双线技术。此方案也可以提高网通用户与电信用户的访问速度,解决了双IP双线需要在服务器上设置路由的问题,但由于IP地址采用的是网通或电信的IP,访问用户在发送请求数据包时不会自动判别最好的路由。 - BGP双线单IP。
BGP(BorderGatewayProtocol)边界网关协议。BGP具体的功能就是控制路由的传播和选择最佳路由。这个双线路的实现必须是IDC机房运营商与电信、网通能够达成合作协议,通过骨干网络的路由器来给予最优路由选择,所有的一切,对于服务器和用户都无任何负担。服务器仅需单ip且效果最佳。但是这样的合作谈判又怎么会那么容易。所以目前这样的基于BGP的解决方案基本都是针对绝对的高端用户提供的。
二、何谓智能DNS
看到了上面的双线双IP的概念,你应该清楚了智能DNS是为谁准备的了吧!没错,为了不浪费双线双IP,为了更好地用户体验,对访问用户进行智能线路判断,让电信用户走上电信的高速路,让网通用户走上网通的高速路。推荐使用免费智能DNS的服务商——DNSPOD
三、何谓CDN加速
CDN加速=智能DNS+多服务器
如上面公式,CDN是多台服务器加智能DNS的结合体。CDN服务,其实就是把静态页面缓存到不同地区很多台专门的缓存服务器上,然后根据用户线路所在的地区通过CND服务商的智能DNS自动选择一个最近的缓存服务器让用户访问,以此提高速度,这种方案对静态页面效果非常好,同时它也需要智能DNS的帮助才能实现把用户引导到离自己最近的缓存服务器上。好的CND服务提供商必须有好的智能DNS做基础。
优点:本地Cache加速,镜像加速,远程加速,带宽优化,集群抗攻击。
CDN加速又有别与镜像技术。看公式:CDN=更智能的镜像+缓存+流量导流。(爆个料,阿桑奇的“维基解密”网站在风头正紧时,弄出一千多个镜像站点,有图有真相)
各种加速方式对比:(双线双IP与双线单IP对比仅供参考)
综上所述,以上各种双线实现的方式各有优缺点,智能DNS+双线双IP成本较低,但网络不够稳定并且占用大量的服务器资源,普通双线单IP只是实现了部分双线路的效果所以访问速度不佳,CDN方式对静态网页效果很好但对交互性很强的网页效果不太理想,BGP单IP双线路解决了以上所有的问题是最好的实现方式但国内采用此种方案的IDC服务商较少,如果能将BGP单IP双线与CDN加速结合起来将会是最优的解决方案。目前全国已有不少合用BGP技术方案的数据中心,但大多为特殊客户提供服务,很少有针对普通用户和IDC商的机房。
This entry was posted in seo,搜索引擎优化 and tagged cdn, dns on 2011 年 11 月 15 日.
http://lustlost.blog.51cto.com/2600869/924229
智能DNS又称为解析切割,是对请求DNS解析的IP地址进行判断,将域名解析成不同的地址
一般智能DNS应用常见的场景就是CDN,中国特色社会主义的网络导致了电信和联通这2个特色的运营商,而这2个运营商通过在北京某机房的100G带宽相连,这就导致了电信用户访问联通的网络就会非常慢。玩游戏的童鞋就知道用游戏加速器来解决问题,但一般的用户访问在不同运营商网络的服务器时,变得非常慢。于是苦逼的服务提供商为了更好的用户体验就不得不去花费一笔钱去买CDN服务了。。。。
CDN的原理就是在智能DNS基础上进行web的反向代理缓存实现的。通过不同地域的请求解析到对应地域的缓存服务器上,然后缓存服务器对主服务器进行数据请求,最终返回给客户。这对于静态页面的网站有着很好的加速。
这里就不得不提一下著名的提供智能DNS解析服务的DNSpod(目前已被腾讯收购,软件源代码已经开源,宣称非BIND可以比拟,有兴趣的童鞋可以去研究研究)。还有比较著名的CDN服务提供商有帝盟等。。。
还会一种会使用到智能DNS的场景:在公司内部NS服务器上区分内部和外部的请求,将内部请求解析到内网地址上,外网请求解析到外网地址上,此篇博文针对此应用展开
BIND实现智能DNS的原理是通过view的方式,首先判断客户请求的来源,然后返回不同的IP
规划:为lustlost.com域进行智能解析
分2个网段,192.168.92.0/24网段的请求解析到192.168.92.102主机上, 其它网段解析到172.19.19.102主机
这里172.19.19.102模拟外网。
这和一般公司的模式很接近,为公司内部提供内部私网地址的解析,避免路由器性能浪费。为外部提供公网地址的解析。
ns服务器的IP地址为192.168.92.102和172.19.19.102
[root@lustlost ~]# yum install bind caching-nameserver –y #安装bind和caching-nameserver,这里的caching-nameserver已经给我们在相应目录下提供了配置文件,根区域和本地区域的数据文件,而且它的主配置是默认以view方式配置的
[root@lustlost etc]# cp /etc/named.caching-nameserver.conf named.conf #用cp备份原配置文件,建立要使用的配置文件,然后进行修改
[root@lustlost etc]# vim /etc/named.conf
- #首先定义控制列表,这里定义了内网的网段
- acl innet {
- 127.0.0.0/8;
- 192.168.92.0/24;
- };
- #全局配置,精简一点,只配置数据文件目录位置
- options {
- directory "/var/named";
- };
- #创建内网用户的view
- view in {
- match-clients { innet; }; #定义用户为控制列表中所定义的
- recursion yes; #允许内网用户进行递归查询
- #下面是定义根区域和本地区域的正反解析
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- #定义内部网络用户解析
- zone "lustlost.com" IN {
- type master;
- file "lustlost.com.in";
- allow-transfer { none; }; #不允许区域传送
- allow-update { none; }; #不允许更新
- };
- };
- #定义外部网络用户解析
- view out {
- match-clients { any; }; #允许所有用户(这里之所以允许所有用户,
- 是因为bind对配置文件是从上往下读取解析的,
- 匹配不到上面view所定义的acl,
- 才会到这个view中来)
- recursion no; #不允许外部网络用户进行递归查询(我们不是免费的公共dns)
- zone "lustlost.com" IN {
- type master;
- file "lustlost.com.out";
- allow-transfer { none; };
- allow-update { none; };
- };
- };
[root@lustlost etc]# named-checkconf #配置完成后注意检查配置文件的语法错误
至此就配置好了主配置文件,接下来创建区域数据文件
[root@lustlost etc]# cd /var/named/
[root@lustlost named]# vim lustlost.com.in #创建内部网络客户解析区域文件
- #这里就随便建立几个记录了
- $TTL 600
- $ORIGIN lustlost.com
- @ IN SOA ns.lustlost.com. admin.lustlost.com. (
- 2012070801
- 1H
- 10M
- 1W
- 1D
- )
- IN NS ns
- IN MX 10 mail
- ns IN A 192.168.92.102
- mail IN A 192.168.92.100
- www IN A 192.168.92.101
[root@lustlost named]# cp lustlost.com.in lustlost.com.out #创建外部网络客户解析区域文件
- $TTL 600
- $ORIGIN lustlost.com
- @ IN SOA ns.lustlost.com. admin.lustlost.com. (
- 2012070801
- 1H
- 10M
- 1W
- 1D
- )
- IN NS ns
- IN MX 10 mail
- ns IN A 172.19.19.102
- mail IN A 172.19.19.100
- www IN A 172.19.19.101
至此所有配置都已经完成
检查下配置有无出错
检查无错误后启动服务
查看下当前网络配置(为了方便,在网卡上配置了2个不同的地址,下面客户机也一样)
查看下客户机的网络配置
于是用这台客户机用不同地址去请求解析DNS
使用192.168.92.0/24网段去解析的结果
使用172.19.19.0/24网段去解析的结果
可以看到,使用不同网段成功的解析到了不同的地址。
这就是基于BIND的智能DNS解析,使用了BIND的view功能,至于dnspod,在智能DNS解析方面应该有更加强大的功能,有兴趣可以去官网下载源代码安装研究
本文出自 “lustlost-迷失在欲望之中” 博客,请务必保留此出处http://lustlost.blog.51cto.com/2600869/924229
...........
http://guodayong.blog.51cto.com/263451/1177295
注:理论很重要,所以笔者希望博友能把DNS的工作原理理解清楚,这样才能够真正理解DNS是什么?理论虽然枯燥,但很重要,配置很简单,好了,废话少说,书归正传:
相信大家通过笔者关于“互联网域名解析系统DNS的工作原理及相关服务配置”基本了解了DNS工作原理和简单的配置,下面将介绍高级配置,在配置之前我们
来回顾下关于DNS一些常识及一些文件的配置格式。
DNS所使用的协议及端口:TCP/53 UDP/53
DNS域名服务器主要用于解析FQDN和IP地址之间的转换;
FQDN-IP:正向解析(A记录)
IP-FQDN:反向解析(PTR指针)
rndc的controls语句
- controls语句限定了rndc和正在运行的named进程之间如何进行交互,系统管理员可以用rndc向named进程发送信号并控制它。
- rndc可以连接并控制启动和停止named进程、转储named状态、将named转入调试模式。rndc是一个网络程序,如果配置不当或不正确,来自互联网上的用
- 都可以连接并控制DNS服务,所以在配置rndc时,一定要谨慎!!
- controls语法:
- controls {
- inet ip_addr port ip-port allow { address_match_list } keys { key_list };
- };
- rndc用来于named通信的端口默认为953,
- 下面我们会通过rndc-confgen命令生成rndc和named之间使用验证配置rndc,实现远程控制DNS服务
如何设置根服务器的线索呢,格式为:
- zone "." IN {
- type hint;
- file "path" ##path指根服务器的区域文件,默认为"/var/named/named.ca"
- };
- ”hint(线索)“是一个列出根域(".")服务器的DNS记录的集合.需要用它们为一个递归的、有缓存的named提供一个位置,从这个位置开始搜索其他站点的域
- 信息。没有根搜索,named只知道自己所属的域,还有这个域的子域。
如何设置一个转发区呢,格式为:
- zone "domain_name" IN {
- type forward;
- forwarders only | first;
- forwarders { ip_addr;ip_addr,......};
- };
我们知道如何配置一个区的主服务器的格式:
- zone "Domain_Name" IN {
- type "master";
- file "path";
- allow-query { addr_match_list; };
- allow-transfer { my_slave ; };
- allow-update { add_match_list; };
- ..........
- };
那如何配置一个区的从服务器的格式呢,是这个样子滴:
- zone "Domain_Name" IN {
- type slave;
- file "slave/path";
- masters { ip_addr; };
- allow-transfer { addr_match_list; };
- .......
- };
VIEW语句的介绍:
- 通过view语句可以完成DNS的智能解析功能,并且灵活控制哪些客户机能看到哪个view视图的访问控制列表。语法:
- view view-name {
- match-clients { address_match_list };
- match-destinations { address_match_list };
- match-recursive-only yes|no
- view_option;...
- zone_statement;...
- };
- 其实说白了,view视图是根据match_clients提供的查询报文的IP地址进行过滤,一般用于让一个站点的DNS数据分为内外不同的结果,下面
- 我们会通过模拟外网和内网实现view,并让DNS提供智能解析。
那么接下来不就是配置正向区域文件及反向区域文件对吧,格式还记得吗?
正向(A)解析区域文件格式:
- $TTL time(默认为秒)
- @ IN SOA ns1.example.com. admin.example.com. (
- 序列号
- 更新时间
- 重试时间
- 过期时间
- 非权威相应TTL时间 )
- IN NS ns1
- IN MX 5 mail
- ns1 IN A 172.16.88.1
- www IN A 172.16.88.1
- mail IN A 172.16.88.5
反向(PTR)区域配置文件格式
- $TTL time(默认为秒)
- @ IN SOA ns1.example.com. admin.example.com. (
- 序列号
- 更新时间
- 重试时间
- 过期时间
- 非权威相应TTL时间 )
- IN NS ns1
- 1 IN PTR ns1.example.com.
- 1 IN PTR www.example.com.
- 5 IN PTR mai.example.com.
递归和非递归服务器的区别,来一块来回想下它们之间的区别:
- 递归服务器工作模式:
- 当客户端发送DNS查询请求时,递归服务器仅返回真实的答案或者错误消息(它自己跟踪这些推荐的服务器,免除了客户端这项任务)
- 非递归服务器工作模式:
- 当客户端发送DNS查询请求时,非递归服务器器会查询缓存文件,如果有客户端发送的请求结果,那么就将结果返回给客户端,否则,它并不直接返回答案给客户端,
- 而是推荐一个其他域的权威性服务器,所以发送请求的客户端自己去查询相应的域权威服务。
下面就来介绍下关于子域授权的概念及如何实现子域的授权
- 我们知道DNS是以分布式进行完成域名和IP地址解析的,进行子域授权其实就是在主域的基础上划分子域,并将权限赋予子域的某台服务器,实现层次管理而已。
- 创建子域,其实就是在原来权威结构(只是赋予给了本地例如"example.com")权威结构内:
- 实现步骤如下:
- 选择本地环境中唯一的域名、确定两台或更多主机作为新域的服务器、与父域(example.com)取得协调。
- 注:父域在执行授权之前,应该核查确定子域的域名服务器已启动并正常运行。如果子域域名服务器没有启动,可能会造成父域在授权时产生"授权失败等信息"
下面就来配置如何实现子域授权:(example.com为例实现子域授权)
- 域:example.com
- 主DNS相关记录信息:
- 主DNS服务器:ns1.example.com(172.16.88.1/16)
- www.example.com(172.16.88.1/16) ##提供web服务器
- mail.example.com(172.16.88.5/16) ##提供E-mail服务器
- 子域:fin.example.com
- 子域DNS服务器:ns.fin.example.com(172.16.88.20/16)
- 子域相关DNS记录:
- www.fin.example.com(172.16.88.20/16) ##提供web服务器
- mail.fin.example.com(172.16.88.21/16) ##提供fin.example.com域内的E-mail电子邮件收发
- ftp.fin.example.com(172.16.88.22/16) ##提供FTP服务器,实现资源共享
下面我们就来操作下如何在example.com域内实现子域授权:
查看当前系统是否安装bind-libs和bind-utils软件包,如果安装则使用rpm -e卸载。这里我们采用的是bind97版本,所以我使用yum来安装。
- # vim /var/named/example.com.zone
- $TTL time(默认为秒)
- @ IN SOA ns1.example.com. admin.example.com. (
- 2013041201
- 1H
- 5M
- 7D
- 3D )
- IN NS ns1
- IN MX 5 mail
- ns1 IN A 172.16.88.1
- www IN A 172.16.88.1
- mail IN A 172.16.88.5
- fin IN NS ns.fin ##在这里我们添加了一个子域(fin.example.com)并给出了相应的A记录
- ns.fin IN A 172.16.88.20
Seq2:到172.16.88.20这台主机上配置fin.example区域,并将DNS(/etc/resolv.conf)的nameserver改为172.16.88.1即可
- # rpm -e bind-libs bind-utils
- 这里我们使用的bind97版本,所以在这里我们将系统默认安装bind-libs和bind-utils软件包卸载,并通过YUM来安装bind97版本的软件包
- # yum install bind97 bind-utils -y
- # mv /etc/named.conf /etc/named.conf.bak
- 这里我们采用手动配置named.conf主配置文件,所以把bind97版软件安装所产生的配置文件给予重命名:
- # vim /etc/named.conf
- options {
- directory "/var/named" ; ##指明区域文件保存的位置
- };
- zone "." IN ##定义根区域文件名称
- type hint;
- file "named.ca"; ##默认存放在/var/named/named.ca
- };
- zone "localhost" IN {
- type master;
- file "named.localhost";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.loopback";
- };
- zone "fin.example.com" IN { ##定义fin.example.com正向区域配置文件
- type master; ##类型为master(主DNS)
- file "fin.example.com.zone"; ##fin.example.com域正向区域配置文件存放名称(/var/named/fin.example.com.zone)
- };
- 注:然后执行将named.conf配置文件的属组及权限分别更改为named和640即可:
- # chgrp named /etc/named.conf && chmod 640 /etc/named.conf
Seq3:创建fin.example.comz正向区域配置文件
- # vim /var/named/fin.example.com.zone
- $TTL 86400
- @ IN SOA ns.fin.example.com. admin.fin.example.com. (
- 2013041201
- 1H
- 5M
- 7D
- 3D )
- IN NS ns
- IN MX 5 mail
- ns IN A 172.16.88.20
- www IN A 172.16.88.20
- mail IN A 172.16.88.21
- ftp IN A 172.16.88.22
- 注:因为在这里我们采用的是手动配置区域数据文件,所以别忘记更改属组为named及权限为640噢
Seq4:这样一个基于example.com域名授权的fin.example.com就完成,下面我们就可以进行测试:
在主DNS服务器上测试(172.16.88.1)
然后到子域fin.example.com查询www.fin.example.com的A记录
下面我们用windows分别使用主DNS和子域查询www.fin.example.com的A记录
下一个问题,如何同view视图实现DNS智能解析:(内网和外网)
说明:将来自172.16.0.0/16和127.0.0.0/8的网段的IP为内网的主机,其它网络的IP或未知IP均为外网的主机,所以我们使用acl来定义控制列表
在配置之前我们需要对eth0配置第二IP地址:
- # vim /etc/named.conf
- options {
- directory "/var/named";
- };
- acl internal { ##定义acl列表,当来自172.16.0.0/16和127.0.0.0/8的网段均为内网用户
- 172.16.0.0/16;
- 127.0.0.0/8;
- };
- view "internal" { ##定义内网主机所使用的解析区域文件
- match-clients { internal; };
- recurion yes;
- zone "example.com" IN {
- type masters;
- file "internal.example.com.zone";
- };
- };
- view "external" { ##定义外网主机所使用的解析区域文件
- match-clients { any; };
- recurion yes;
- zone "example.com";
- type master;
- file "external.example.com.zone";
- };
- };
Seq2:使用named-checkconf来检测主配置文件是否有存在语法错误
# named-checkconf /etc/named.conf
Seq3:分别创建电信网和联通网所需要的区域数据文件:
内网(internal)用户访问example.com域服务器所使用的正向解析区域文件:
- # vim /var/named/internal.example.com.zone
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2013041201
- 1H
- 5M
- 7D
- 3D )
- IN NS ns1
- IN MX 5 mail
- ns1 IN A 172.16.88.1
- mail IN A 172.16.88.5
- www IN A 172.16.88.1
外网(external)用户访问example.com域服务器所使用的正向解析区域数据文件
- # vim /var/named/external.example.com.zone
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2013041201
- 1H
- 5M
- 7D
- 3D )
- IN NS ns1
- IN MX 5 mail
- ns1 IN A 172.16.88.1
- www IN A 192.168.0.1
- mail IN A 192.168.0.5
Seq4:将internal和external所使用的解析区域数据文件的属组及权限分别改为named和640:
- # chgrp named internal.example.com.zone external.example.com.zone
- # chmod 640 internal.example.com.zone external.example.com.zone
Seq5:使用named-checkzone分别检测internal和external所使用的区域数据文件是否存在语法错误
# named-checkzone "example.com" /var/named/internal.example.com.zone
# named-checkzone "example.com" /var/named/external.example.com.zone
Seq6:使用named进程,并将执行开机自动启动
# service named restart && chkconfig named on
Seq7:分别在172.16.0.0/16和192.168.0.0/24网段上进行测试,并查看结果
现在172.16.0.0/16主机进行测试:
然后再192.168.0.0/24网络主机上进行测试:
本文出自 “See you next year CA” 博客,请务必保留此出处http://guodayong.blog.51cto.com/263451/1177295
http://369369.blog.51cto.com/319630/812889
DNS原理及其解析过程
精彩剖析
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。
什么是DNS?
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。
DNS域名称
域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成一个分层树状结构称为域命名空间。域名包含单个标签分隔点,例如:im.qq.com。
完全限定的域名 (FQDN) 唯一地标识在 DNS 分层树中的主机的位置,通过指定的路径中点分隔从根引用的主机的名称列表。 下图显示与主机称为 im 内 qq.com DNS 树的示例。 主机的 FQDN 是 im.qq.com。
DNS 域的名称层次结构
DNS域名称空间的组织方式
按其功能命名空间中用来描述 DNS 域名称的五个类别的介绍详见下表中,以及与每个名称类型的示例。
DNS 和 Internet 域
互联网域名系统由名称注册机构负责维护分配由组织和国家/地区的顶级域在 Internet 上进行管理。 这些域名按照国际标准 3166。 一些很多现有缩写,保留以供组织中,以及两个字母和三个字母的国家/地区使用的缩写使用下表所示。一些常见的DNS域名称如下图:
资源记录
DNS 数据库中包含的资源记录 (RR)。 每个 RR 标识数据库中的特定资源。我们在建立DNS服务器时,经常会用到SOA,NS,A之类的记录,在维护DNS服务器时,会用到MX,CNAME记录。
常见的RR见下图:
Dns服务的工作过程
当 DNS 客户机需要查询程序中使用的名称时,它会查询本地DNS 服务器来解析该名称。客户机发送的每条查询消息都包括3条信息,以指定服务器应回答的问题。
● 指定的 DNS 域名,表示为完全合格的域名 (FQDN) 。
● 指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。
● DNS域名的指定类别。
对于DNS 服务器,它始终应指定为 Internet 类别。例如,指定的名称可以是计算机的完全合格的域名,如im.qq.com,并且指定的查询类型用于通过该名称搜索地址资源记录。
DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。
另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。
DNS 查询的过程如下图所示。
1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。
附录:
本地DNS配置转发与未配置转发数据包分析
新建一DNS,具体怎么建我这里就不再描述了,见我的上一篇博文《在Win2003中安装bind【部署智能DNS】》
1、DNS服务器不设转发
在192.168.145.228服务器上安装上wireshark软件,并打开它,设置数据包为UDP过滤,在192.168.145.12客户机上用nslookup命令查询一下www.sohu.com,马上可以看到本地DNS服务器直接查全球13台根域中的某几台,然后一步步解析,通过递代的方式,直到找到www.sohu.com对应的IP为220.181.118.87。
本地DNS服务器得到www.sohu.com的IP后,它把这个IP返回给192.168.145.12客户机,完成解析。
因www.sohu.com域名在第一步的验证中使用过,有缓存,为了不受上步实验干扰,我们在客户机上192.168.145.12上nslookup www.baidu.com。从图上看,本地DNS把请求转发至192.168.133.10服务器,133.10服务器把得到的IP返回给本地DNS,然后本地DNS再把IP告诉DNS客户机,完成解析。
本文出自 “系统网络运维” 博客,请务必保留此出处http://369369.blog.51cto.com/319630/812889
http://freeloda.blog.51cto.com/2033581/1220398
1. DNS解析过程
1
2
3
4
5
6
7
|
1)、在浏览器中输入www.magedu.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。 2)、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。 3)、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP /IP 参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。 4)、如果要查询的域名,不由本地DNS服务器区域解析,但该DNS服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。 5)、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(没有设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责 .com域的这台服务器。这台负责 .com域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .com域的下一级DNS服务器地址(magedu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找magedu.com域服务器,重复上面的动作进行查询,直至找到www.magedu.com主机。 6)、如果用的是转发模式(设置转发器),此DNS服务器就会把请求转发至上一级ISP DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。 注:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是迭代查询。 |
2. DNS扩展(本地DNS缓存)
Windows和Linux系统都会在本地缓存dns解析的记录,提高速度。但是,测试dns服务器的解析时,需要快速刷新(清除)本地的dns缓存,下面是linux和windows下如何快速刷新本地dns缓存记录的方法:
1)、Windows 客户端
获得缓存中的DNS :
1
|
ipconfig /displaydns |
强制清除DNS 缓存:
1
|
ipconfig /flushdns |
也可以在服务器管理中重新启动DNS Client服务:
1
|
net stop dnscache |
重启动DNS Client服务:
1
|
net start dnscache |
2)、Linux 客户端
开启本地DNS 缓存的服务
1
2
|
# chkconfig –list | grep nscd nscd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭 |
该服务除了提供DNS 缓存外,还缓存/etc/passwd, /etc/groups 缓存,DB文件在/var/db/nscd下 ,还可提供 NIS 加速的作用。
启动本地 DNS 缓存服务即可:
1
|
# service nscd start |
反之
1
|
# service nscd stop |
需要注意的是,在linux下没有强制清除DNS缓存的命令。但是,我们可以通过删除其后台数据库记录信息,达到清除DNS缓存的目的:
1
2
|
# rm /var/db/nscd/hosts # service nscd restart |
3)、Linux Bind 服务
有时候,我们的客户端是处于某台 DNS 缓存服务器后面的。常见的情况是,作为 NAT 网关的 Linux 服务器,通过bind 服务,提供 DNS 缓存和转发功能。这可通过配置/etc/named.conf,加入forward来实现:
1
2
3
4
5
6
7
8
9
|
options { directory "/var/named" ; dump- file "/var/named/data/cache_dump.db" ; statistics- file "/var/named/data/named_stats.txt" ; forward only; forwarders { 8.8.8.8; }; }; |
这时,客户端对外的 DNS 解析结果,除保留在客户端本地的 DNS 缓存中,同样会保留在这台网关服务器上。还有一种情况就是,当我们修改 named 提供的DNS服务时,也需要刷新缓存。
bind 提供的 rndc 命令可以清空缓存的功能:
1
|
# rndc flush |
本文出自 “Share your knowledge …” 博客,请务必保留此出处http://freeloda.blog.51cto.com/2033581/1220398
http://www.8jdns.com/square/topic-28.html
DNS 查询的工作原理
当 DNS 客户端需要查询程序中使用的名称时,它会查询 DNS 服务器来解析该名称。客户端发送的每条查询消息都包括三条信息,指定服务器回答的问题:
- 指定的 DNS 域名,规定为完全合格的域名 (FQDN)
- 指定的查询类型,可根据类型指定资源记录,或者指定查询操作的专用类型。
- DNS 域名的指定类别。
对于 Windows DNS 服务器,它始终应指定为 Internet (IN) 类别。
例如,指定的名称可为计算机的 FQDN,如 host-a.example.microsoft.com,并且指定的查询类型用于通过该名称搜索地址 (A) 资源记录。将 DNS 查询看作客户端向服务器询问由两部分组成的问题,如“您是否拥有名为‘hostname.example.microsoft.com’的计算机的 A 资源记录?”当客户端收到来自服务器的应答时,它将读取并解释应答的 A 资源记录,获取根据名称询问的计算机的 IP 地址。
DNS 查询以各种不同的方式进行解析。有时,客户端也可使用从先前的查询获得的缓存信息在本地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询。DNS 服务器也可代表请求客户端查询或联系其他 DNS 服务器,以便完全解析该名称,并随后将应答返回至客户端。这个过程称为递归。
另外,客户端自己也可尝试联系其他的 DNS 服务器来解析名称。当客户端执行此操作时,它会根据来自服务器的参考答案,使用其他的独立查询。这个过程称为迭代。
总之,DNS 查询进程分两部分进行:
- 名称查询从客户端计算机开始,并传输至解析程序即 DNS 客户端服务程序进行解析。
- 不能在本地解析查询时,可根据需要查询 DNS 服务器来解析名称。
下面将更加详细地解释这两个过程。
第 1 部分:本地解析程序
下图显示了完整的 DNS 查询进程的概况。

如查询过程的初始步骤所示,DNS 域名由本机的程序使用。该请求随后传输至 DNS 客户端服务,以便使用本地缓存信息进行解析。如果可以解析查询的名称,则应答该查询,该进程完成。
本地解析程序的缓存可包括从两个可能的来源获取的名称信息:
- 如果在本地配置主机文件,则来自该文件的任何主机名称到地址的映射,在 DNS 客户端服务启动时将预先加载到缓存中。
- 从以前的 DNS 查询应答的响应中获取的资源记录,将被添加至缓存并保留一段时间。
如果此查询与缓存中的项目不匹配,则解析过程继续进行,客户端查询 DNS 服务器来解析名称。
第 2 部分:查询 DNS 服务器
如前面的图中所示,客户端将查询首选 DNS 服务器。在此进程的初始客户端/服务器查询部分中使用的实际服务器选自全局列表。
当 DNS 服务器接收到查询时,首先检查它能否根据在服务器的本地配置区域中获取的资源记录信息作出权威性的应答。如果查询的名称与本地区域信息中的相应资源记录匹配,则使用该信息来解析查询的名称,服务器作出权威性的应答。
如果区域信息中没有查询的名称,则服务器检查它能否通过来自先前查询的本地缓存信息来解析该名称。如果从中发现匹配的信息,则服务器使用该信息应答查询。接着,如果首选服务器可使用来自其缓存的完全匹配响应来应答发出请求的客户端,则此次查询完成。
如果查询名称在首选服务器中未发现来自缓存或区域信息的匹配应答,则查询进程可继续进行,使用递归来完全解析名称。这涉及来自其他 DNS 服务器的支持,以帮助解析名称。在默认情况下,DNS 客户端服务要求服务器在返回应答之前,使用递归过程来代表客户端完全解析名称。在大多数情况下,DNS 服务器默认配置为支持递归过程,如下图所示。

为了使 DNS 服务器正确执行递归过程,首先需要使用 DNS 域命名空间内有关其他 DNS 服务器的一些有用的联系信息。该信息以根提示的形式提供,它是一个初始资源记录列表,DNS 服务可利用这些记录定位其他 DNS 服务器,它们对 DNS 域命名空间树的根具有绝对控制权。根服务器对于 DNS 域命名空间树中的根域和顶级域具有绝对控制权。
使用根提示查找根服务器,DNS 服务器可完成递归的使用。理论上,该进程将启用 DNS 服务器,以定位那些对域命名空间树的任何级别使用的任何其他 DNS 域名具有绝对控制权的服务器。
例如,当客户端查询单个 DNS 服务器时,考虑使用递归过程来定位名称 host-b.example.microsoft.com。在 DNS 服务器和客户端首次启动,并且没有本地缓存信息可帮助解析名称查询时,就会进行上述过程。根据其配置的区域,它假定由客户端查询的名称是域名,该服务器在本地不包含有关该域名的信息。
首先,首选服务器分析全名并确定对于顶级域“com”具有绝对控制权的服务器的位置。随后,对“com”DNS 服务器使用迭代查询,以获取“microsoft.com”服务器的参考信息。随后,参考应答从“microsoft.com”服务器传送到“example.microsoft.com”的 DNS 服务器。
最后,与服务器 example.microsoft.com 建立联系。因为该服务器包括作为其配置区域一部分的查询名称,所以它向启动递归的源服务器作出权威性地应答。当源服务器接收到表明已获得对请求查询的权威性应答的响应时,它将此应答转发给发出请求的客户端,这样递归查询过程就完成了。
尽管执行上述递归查询过程可能需要占用大量资源,但对于 DNS 服务器来说它仍然具有一些性能上的优势。例如,在递归过程中,执行递归查询的 DNS 服务器可获得有关 DNS 域命名空间的信息。该信息由服务器缓存起来并可再次使用,以便提高使用此信息或与之匹配的后续查询的应答速度。随着时间的推移,这些缓存信息会不断增加并占据大量的服务器内存资源,尽管每次 DNS 服务重新启动时这一信息将被清除。
可选的查询响应
以前对 DNS 查询的讨论,都假定此过程在结束时会向客户端返回一个肯定的响应。然而,查询也可返回其他应答。最常见的应答有:
- 权威性应答
- 肯定应答
- 参考性应答
- 否定应答
权威性应答是返回至客户端的肯定应答,并随 DNS 消息中设置的“授权机构”位一同发送,消息指出此应答是从带直接授权机构的服务器获取的。
肯定应答可由查询的 RR 或 RR 列表(也称作 RRset)组成,它与查询的 DNS 域名和查询消息中指定的记录类型相符。
参考性应答包括查询中名称或类型未指定的其他资源记录。如果不支持递归过程,则这类应答将返回至客户端。这些记录的作用是为了提供一些有用的参考性应答,客户端可使用参考性应答继续进行递归查询。
参考性应答包含其他的数据,如不属于查询类型的资源记录 (RR)。例如,如果查询主机名称为“www”并且在这个区域未找到该名称的 A RR,而是找到了“www”的 CNAME RR,则 DNS 服务器在响应客户端时可包含该信息。
如果客户端能够使用迭代过程,则它可使用这些参考性信息为自己进行其他查询,以便完全解析此名称。
来自服务器的否定应答可以表明:当服务器试图处理并且权威性地彻底解析查询的时候,遇到两种可能的结果之一:
- 权威性服务器报告:在 DNS 命名空间中没有查询的名称。
- 权威性服务器报告:查询的名称存在,但该名称不存在指定类型的记录。
以肯定或否定响应的形式,解析程序将查询结果传回请求程序并把响应消息缓存起来。
注意
- 如果查询的最终应答太长而不能在一个 UDP 消息数据包中发送和解析,则 DNS 服务器可以在 TCP 端口 53 上发送故障转移响应消息,以便在 TCP 连接会话中完全应答客户端。
- 当限定 DNS 客户端的名称解析到特定的 DNS 服务器(如 Intranet 上的 DNS 服务器)的时候,系统通常会禁止在 DNS 服务器上使用递归。当 DNS 服务器不能解析外部 DNS 名称的时候,可能也会禁用递归,而且期望客户端故障转移到其他 DNS 服务器,以便解析这些名称。
在相应服务器的 DNS 控制台中,可以在“高级”属性中进行配置,以禁用递归。 - 如果在 DNS 服务器上禁用递归,那么您将无法在同一服务器上使用转发器。
- 默认情况下,在执行递归查询并联系其他 DNS 服务器时,DNS 服务器使用若干默认的时间设置。它们是:
- 3 秒的递归重试间隔。这是 DNS 服务在递归查询期间重试查询之前等候的时间长度。
- 15 秒的递归超时间隔。这是 DNS 服务在重试的递归查询失败之前等候的时间长度。
- 3 秒的递归重试间隔。这是 DNS 服务在递归查询期间重试查询之前等候的时间长度。
迭代的工作原理
迭代是在以下条件生效时 DNS 客户端和服务器之间使用的名称解析类型:
- 客户端申请使用递归过程,但在 DNS 服务器上禁用递归。
- 查询 DNS 服务器时客户端没有申请使用递归。
来自客户端的迭代请求告知 DNS 服务器:客户端希望直接从 DNS 服务器那里得到最好的应答,无需联系其他 DNS 服务器。
使用迭代时,DNS 服务器根据它自身对与查询的名称数据有关的命名空间的特定知识应答客户端。例如,如果 Intranet 上的 DNS 服务器接收到来自本地客户端“www.microsoft.com”的查询,则可能会返回来自其名称缓存的应答。如果查询的名称当前未存储在服务器的名称缓存中,则服务器可能会通过提供参考信息对客户端作出响应,即提供一张与客户端所查询的名称比较接近的其他 DNS 服务器的 NS 和 A 资源记录列表。
在形成参考性信息的时候,假定 DNS 客户端负责向其他配置的 DNS 服务器继续进行递归查询,以便解析该名称。例如,在大多数情况下,DNS 客户端可能会将其搜索扩展到 Internet 上的根域服务器,以定位对于“com”域具有绝对控制权的 DNS 服务器。一旦联系上 Internet 根服务器,它就会从指向“microsoft.com”域的实际 Internet DNS 服务器的这些 DNS 服务器中获得进一步的递归响应。当客户端收到这些 DNS 服务器的记录时,可以向 Internet 上的外部 Microsoft DNS 服务器发送其他迭代查询,它们可以提供肯定和权威性的应答。
使用迭代时,除了向客户端提供自己最好的应答外,DNS 服务器还可在名称查询解析中提供进一步的帮助。对于大部分迭代查询,如果它的主 DNS 不能辩识该查询,那么客户端使用本地配置的 DNS 服务器列表,在整个 DNS 命名空间中联系其他名称服务器。
缓存的工作原理
DNS 服务器采用递归或迭代来处理客户端查询时,它们将发现并获得大量有关 DNS 命名空间的重要信息。然后这些信息由服务器缓存。
缓存为 DNS 解析流行名称的后续查询提供了加速性能的方法,同时大大减少了网络上与 DNS 相关的查询通信量。
当 DNS 服务器代表客户端进行递归查询时,它们将暂时缓存资源记录 (RR)。缓存的 RR 包含从 DNS 服务器获得的信息,对于在进行迭代查询以便搜索和充分应答代表客户端所执行的递归查询过程中所获知的 DNS 域名而言,此信息具有绝对的权威性。稍后,当其他客户端发出新的查询,请求与缓存的 RR 匹配的 RR 信息时,DNS 服务器可以使用缓存的 RR 信息来应答它们。
当信息缓存时,生存时间 (TTL) 值适用于所有缓存的 RR。只要缓存 RR 的 TTL 没有到期,DNS 服务器就可继续缓存并再次使用 RR 来应答与这些 RR 相匹配的客户端提出的查询。将大部分区域配置中 RR 所用的缓存 TTL 值指定为“最小的(默认)TTL”,它被设置为用于区域的起始授权机构 (SOA) 资源记录。在默认情况下,最小的 TTL 为 3,600 秒(1 小时),但是可以进行调整,也就是说如果需要可以在每个 RR 上分别设置各自的缓存 TTL。
注意
- 可将 DNS 服务器安装为仅用于缓存服务器。
- 默认情况下,DNS 服务器使用根提示文件 Cache.dns,该文件存储在服务器计算机的 systemrootSystem32Dns 文件夹中。当服务启动时,该文件的内容预先加载到服务器存储区,并包含运行 DNS 服务器所在的 DNS 命名空间的根服务器的指针信息。有关该文件或如何使用该文件的详细信息,