DNS (域名解析服务) 是将 IP 地址与 FQDN(fully qualified domain name,全称域名) 相互转换的一种 Internet 服务。通过DNS,人们可以无需记忆 IP 地址。运行 DNS 的计算机称作 域名服务器。DNS是网络服务的基础,感觉即简单又繁琐,有点琢磨不透的感觉。
一、DNS域名解析简要过程
比如客户机clinet向本地域名服务器ns请求解析www.abc.com.cn的简要过程:
1、clinet向ns请求解析www.abc.com.cn 。
2、ns收到请求后,先查询本地的缓存。如果有对应的信息记录,则直接返回结果给client.如果没有该记录,ns就向根域名服务器发起请求。
3、根域名服务器就把cn这个顶级域名服务器的地址返回给ns。
4、ns再向cn发送请求。
5、接着cn域名服务器把com的域名服务器地址发回给ns。
6、ns再向com发送请求。
7、接着com域名服务器把abc 的域名服务器地址发回给ns。
8、最后,由abc的域名服务器把对应的IP地址发回给ns,然后ns将返回的结果发给客户机。并保存到缓存中以便下次再次接到请求可以快速反应。
二、安装BIND服务套件
在终端提示符后输入以下命令来安装 dns:
sudo apt-get install bind9
三、相关配置文件
安装完BIND后,在/etc/bind目录存储配置文件,主要有以下三个以及其他域名对应的资源记录文件:
/etc/bind/named.conf
/etc/bind/named.conf.options
/etc/bind/named.conf.local
其中主配置文件是/etc/bind/named.conf。
四、主配置文件/etc/bind/named.conf
该文件包含有根区域的栏目,该栏目里面用file指定的/etc/bind/db.root文件里面存有世界上的13处根域名服务器的信息。这是域名服务器很重要的信息。另外,也包括了localhost等本地区域信息。
该文件除了包含这些必要的、不必更改的区域栏目外,还用include行包含了其他的配置文件。比如:
include "/etc/bind/named.conf.options";
该行加载的配置文件,包括directory、forwarders、query-source等常用的参数,我们可以在这个文件里更改这些配置。
include "/etc/bind/named.conf.local";
该行加载的配置文件用来让我们配置个性化的DNS。
如果我们要修改部分选项参数,可以只修改options文件,如果要添加区域则可以只修改local文件。这样感觉比较有层次感、比较清晰、明朗,在修改的时候比较不会显得杂乱。
五、选项参数文件/etc/bind/named.conf.options
比如里面的 directory "/var/cache/bind";
指出了默认的工作目录是/var/cache/bind目录。这个目录是存放区域资源记录文件的默认目录。也就是说,如果你在区域块里面的file关键字指定的文件名如果没有包含文件的绝对地址的话,那就默认该文件存放在这里了。
六、本地区域配置文件/etc/bind/named.conf.local
如果我们要添加区域,可以直接在这个文件添加相应的区域块,比如:
zone "zkw.com" {
type master;
file "/etc/bind/db.zkw.com";
};
zone "cassati.com" {
type master;
file "/etc/bind/db.cassati.com";
};
这样就添加了zkw.com、和cassati.com这两个域名了。其中这俩域名的资源记录文件都存放在/etc/bind目录底下,并没有存放到工作目录/var/cache/bind底下,这完全取决于个人爱好。
七、资源记录文件/etc/bind/db.zkw.com
这个文件需要我们手工添加,当然我们可以从db.local中复制过来修改就可以。需要注意的是这个文件的文件名就是我们在named.conf.local里面的file关键字指定的。
以下是该文件的内容:
$TTL 604800
@ IN SOA fh root.zkw.com. (
2010053110 ; Serial
60 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;定义域名服务器
@ IN NS fh
;定义A记录和别名记录
fh IN A 192.168.56.1
www IN CNAME fh
;定义A记录和别名记录
server IN A 192.168.56.3
www1 IN CNAME server
;定义A记录
fedora IN A 192.168.56.5
@ IN AAAA ::1
这样,通过www.zkw.com就可以访问到192.168.56.1,通过www1.zkw.com可以访问到192.168.56.3,而通过fedora.zkw.com则可以访问到192.168.56.6。该文件的各个条目的详解请参考接下来的“bind中DNS的记录详解”。
其中的:
fh IN A 192.168.56.1
www IN CNAME fh
这两条记录我们可以写成:
fh.zkw.com. IN A 192.168.56.1
www.zkw.com. IN CNAME fh.zkw.com.
也就是相对域名与绝对域名的差别。
八、bind中DNS的记录详解
以下转自中国开源项目http://www.opensourceproject.org.cn/article.php?id=682
A记录
A记录代表"主机名称"与"IP"地址的对应关系, 作用是把名称转换成IP地址
DNS使用A记录来回答"某主机名称所对应的IP地址是什么?"
主机名必須使用A记录转译成IP地址,网络层才知道如何选择路由,并将数据包送到目的地
CNAME记录
某些名称并没有对应的IP地址,而只是一个主机名的别名。
CNAME记录代表别名与规范主机名称(canonical name)之间的对应关系
如管理员可能公告他们网站的主机名称为www.a.com, 但其实www.a.com只是一个指向server1.a.com的CNAME记录而已。而在server1.a.com维护期间,可以临时将www.a.com指向server2.a.com
MX记录
MX记录提供邮件路由信息
提供网域的"邮件交换器"(Mail Exchanger)的主机名称以及相对应的优先值
当MTA要将邮件送到某个网域时,会优先将邮件交给该网域的MX主机
同一个网域可能有多个邮件交换器, 所以每一个MX记录都有一个优先值,供MTA作为选择MX主机的依据
PTR记录
PTR记录代表"IP地址"与"主机名"的对应关系,作用刚好与A记录相反
DNS系统使用PTR记录来回答"某IP地址所对应的主机名是什么?"
RFC 882构想,A记录与PTR记录应是互逆的,也就是说
从A记录可以查到域名到IP, 从PTR可以查到从IP到域名
但当多个域名对应同一个IP时,PTR记录应指向该IP地址的规范主机名
某些网络使用PTR记录来检验客户端的主机名称是否可信
=====================================
DNS资源记录语法:
{name} {TTL} addr-class record-type record-specific-data
name
域记录的名字
通常只有第一个DNS资源记录设置name栏
对于区域文件中其他的资源记录,name也可能是空白,这种情况下,其他的资源记录接受先前的资源记录的名字
TTL
Live栏可选择的时间
它指定该数据在数据库中保管多长时间
此栏为空表示默认的生存周期在授权资源记录开始中指定
addr-class
地址类
大范围用于Internet地址和其他信息的地址类为IN
record-type
记录类型
常为A NS MX CNAME
record-specific-data
记录类型的数据
=============================================
.对于每个Internet域或区域,需要两个配置文件
1) 主机名到IP的转换设置域
;主域
;如果希望名字服务器是特定域的授权名字服务器,应设置主要的区域
;这里名字服务器配置为abc.com域的主要的名字服务器
;file用来指定区域或域特有的配置文件名, 如果这里指定的文件名和服务器的工作目录有关系,它必须在工作目录里
zone "abc.com"{
type master;
file "abc.db";
};
;从域
;
;如果为特定的域设置多个名字服务器,可以使用type master选项只设置其中一个为主要的或授权名字服务器
;其它的名字服务器(个数不限)必须设置为从名字服务器
;
;这里当前名字服务器设置为abc.com域的从名字服务器
;主要的名字服务器列表指定一个或多个IP地址
;从名字服务器可以用来与这些IP地址联系更新其区域拷贝
;如果指定file选项,则区域配置的拷贝写在此文件中,推荐使用file可以加速服务器启动
zone "abc.com"{
type slave;
masters {206.171.50.10; 206.171.50.12; };
file path_name;
};
;用来指定一组根名字服务器
;当名字服务器启动时,它使用此列表(暗示)来发现一个根名字服务器,得到根名字服务器的最近列表
zone "."{
type hint;
file path_name;
};
;
;把域名服务器设置为206.171.50.0网络的主要的域名服务器
;所有对此206.171.50.0网络的IP到主机名的转换(即反向DNS)都由此域名服务器处理
zone "50.171.206.in-addr.arpa"{
type master;
file "db.206.171.50";
};
======================================
;SOA授权的开始
;
;SOA或授权的开始记录用来表示区域的启动
;每个区域必须只有一个SOA记录
;从名字服务器,在不能和主服务器通信的情况下,将提供12小时DNS服务, 在指定的时间后停止为那个区域提供DNS服务;不过经仍要尝试和主服务器通信
;
@ IN SOA nameserver. contact-email-address(
serial_number;
refresh_number; //以秒为单位, 从名字服务器与主名字服务器比较才决定是否要更新
retry_number; //以秒为单位, 由于外部原因, 从服务器重新传输一个失败的区域前要等多长时间
expire_number; //以秒为单位, 是从名字服务器使用区域数据有效期的上限值
minimum_number; //以秒为单位, 是指在区域文件中没有指定生存期的资源记录上生存期TTL的限制,如果在一些区域的资源记录上有TTL值,则这里的minimum_number也是最低限度
)
@
是名字
并且总是被设置为@
在同一文件中别的资源记录不能重复
nameserver
指定当前域名服务器的主机名
contact-email-address
指定系统管理员的email
;
;名字服务器主机名为ns.abc.com
;电子邮件地址是[email protected] (在SOA记录中邮件的@被换成.)
@ IN SOA ns.abc.com. kdent.abc.com. (
1049310513 ;serial
10800 ;refresh
3600 ;retry
604800 ;expire
900 ;ttl
)
==========================================
NS
名字服务器
用来为域指定名字服务器
IN NS name-server-hostname
注意:没有指定name和TTL, 因为名字仅需要使用@字符在SOA记录中指定 ; TTL使用SOA记录中的minimum
IN NS ns.abc.com. //说明ns.abc.com.是当前区域文件的名字服务器, 可以指定多个NS记录
;
; Nameservers
;
abc.com. IN NS ns.abc.com.
===================================
A记录
Address记录
用来为特定主机指定IP地址
语法: hostname IN A IP-Address
A记录把主机名指定为IP地址
完整的主机名后应有一个点.
每个主机至少应有一个A记录
可以使用缩写, 此时缩写被增加到短名上 www IN A 206.171.50.51 ;将指定 www.abc.com
;
; Host Addresses
;
abc.com. IN A 192.168.100.50
www IN A 192.168.100.50
server1.abc.com. IN A 192.168.100.200
ns.abc.com. IN A 192.168.100.5
mail1.abc.com. IN A 192.168.100.6
mail2.abc.com. IN A 192.168.100.50
mail3.abc.com. IN A 192.168.100.123
===================================
PTR记录
域名指针
PTR记录代表"IP地址"与"主机名"的对应关系,作用刚好与A记录相反
DNS系统使用PTR记录来回答"某IP地址所对应的主机名是什么?"
RFC 882构想,A记录与PTR记录应是互逆的,也就是说
从A记录可以查到域名到IP, 从PTR可以查到从IP到域名
但当多个域名对应同一个IP时,PTR记录应指向该IP地址的规范主机名
某些网络使用PTR记录来检验客户端的主机名称是否可信
格式
ip IN PTR hostname.
206.171.50.51 IN PTR www.abc.com.
可也以使用缩写
206.171.50.51 IN PTR www //同样也是指定www.abc.com.
===================================
CNAME
规范命名
指定规范(正式)主机名的别名
格式:
Alias IN CNAME Canonical-hostname
;
; CNAME Records
;
pop.abc.com. IN CNAME mail1.abc.com.
www.abc.com. IN CNAME server1.abc.com.
也可使用缩写如下
pop IN CNAME mail1.abc.com.
www IN CNAME server1.abc.com.
===================================
MX
邮件交换
用来指定设置为域的SMTP服务器的主机名
格式:
IN MX preference-value mail-server-hostname.
;
; Mail Exchanger
;
IN MX 0 mail.abc.com.
IN MX 10 mail1.abc.com.
IN MX 20 mail2.abc.com.
IN MX 30 mail3.abc.com.
===================================
[注释]
IN 表示这些资源都在Internet上