转载请标明:http://write.blog.csdn.net/postedit/6993461
DNS,最早于1983年由保罗·莫卡派乔斯(Paul Mockapetris)发明。汉语叫域名系统(英语:Domain Name System,缩写DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS 使用TCP和UDP端口53。
当我们在浏览器的地址栏里敲入地址:www.163.com访问网易网站的时候,事实上www.163.com最终会被解析成218.60.31.75这个IP地址,而我们的浏览去访问这个IP地址,就可以登录网易的网站了。DNS是一个分布于全球各个角落的分布式数据库系统,类似于我们生活中的114电话查询系统。
下图简要说明了DNS的工作原理。
BIND,(Berkeley Internet Name Domain)是现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。20世纪80年代,柏克利加州大学计算机系统研究小组的四个研究生Douglas B Terry、Mark Painter、David W. Riggle和周松年(Songnian Zhou)一同编写了BIND的第一个版本,并随4.3BSD发布。
查看bind版本 named -v
[root@localhost Packages]# named -v
BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6
FQDN(Full Qualified Domain Name),完全合格域名,它由主机名(Host Name)和域名(Domain Name)组成。如果一台主机的主机名为hostname,域名为example.com,那么这个主机的完全合格域名就是hostname.example.com。尽管有些主机的主机名相同,但由于它们的域名不同,所以它们的完全合格域名也是不同的。
DNS的管理是分层的,每一层主机只需要记录下一 层的主机的名称即可。比如“.cn"管理着”.com.cn" , ".net.cn" ,".org.cn", ".edu.cn"等主机,而“.edu.cn"管理着”.neu.edu.cn" , " .pku.edu.cn"等主机,以此类推。
以客户端查询abc.edu.cn主机为例,其查询流程如下:
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。
BIND相关软件包
bind BIND主程序
bind-utils 客户端搜索主机名的相关命令
bind-libs BIND相关的库文件
bind-chroot 将BIND设定文件和程序限制在虚拟根目录下
caching-nameserver 使BIND仅作为缓存服务器的软件包,CHROOT技术,又叫虚拟根目录技术,是对付黑客利用漏洞入侵BIND系
统的一种手段。(在RHEL6中,没有此RPM包了,bind-chroot软件包中已经包含了缓存服务器所需的必要文件)
补充挂载光盘:
mount -t iso9660 /home/xxxx.iso /mnt/cdrom
用rmp -Uvh *.rpm (-U选项,包存在则升级, 不存在则安装)
方式将所需要的包安装好,将BIND服务设定为开机自启动。
chkconfig --level 2345 named on
手动启动BIND服务:
service named start
现用nslookup查询是否好用:
[root@localhost Packages]# nslookup www.neu.edu.cn
Server: 192.168.0.1
Address: 192.168.0.1#53
[root@localhost Packages]# nslookup www.neu.edu.cn 192.168.0.1
Server: 192.168.0.1
Address: 192.168.0.1#53
www.neu.edu.cn canonical name = w.cdn.neu.edu.cn.
Name: w.cdn.neu.edu.cn
Address: 202.118.1.7
DNS测试命令
host [域名] [服务器IP]
host -l [域名] [服务器IP]
host -a [域名] [服务器IP]
[root@localhost Packages]# host www.sina.com 192.168.0.1
Using domain server:
Name: 192.168.0.1
Address: 192.168.0.1#53
Aliases:
www.sina.com is an alias for us.sina.com.cn.
us.sina.com.cn is an alias for news.sina.com.cn.
news.sina.com.cn is an alias for jupiter.sina.com.cn.
jupiter.sina.com.cn is an alias for cernetnews.sina.com.cn.
cernetnews.sina.com.cn has address 121.194.0.210
cernetnews.sina.com.cn has address 121.194.0.203
cernetnews.sina.com.cn has address 121.194.0.205
cernetnews.sina.com.cn has address 121.194.0.206
cernetnews.sina.com.cn has address 121.194.0.207
cernetnews.sina.com.cn has address 121.194.0.208
cernetnews.sina.com.cn has address 121.194.0.209
nslookup [域名] [服务器IP]
dig [@server] [name] [type]
上述语法,
若指定了
server,则到指定server处解析,若没指定,则到/etc/resolv.conf中列举的域名服务器进行解析。
[root@localhost Packages]# cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search localdomain
nameserver 192.168.0.1
[root@localhost named]# hostname
localhost.localdomain
1 //
2 // named.conf
3 //
4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
5 // server as a caching only nameserver (as a localhost DNS resolver only).
6 //
7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
8 //
9
10 options {//Option 段
11 listen-on port 53 { 127.0.0.1; };//表示BIND将在53端口监听,并且监听的IP为127.0.0.1,可添加监听的其它IP地址,用分号隔开,
若需要对所有IP进行监听,则修改为// listen-on port 53 { any; };
12 listen-on-v6 port 53 { ::1; };//在IPv6环境下的监听端口为53
13 directory "/var/named";//工作目录设定,由于安装了bind-chroot,其实际工作目录为/var/named/chroot/var/named/
14 dump-file "/var/named/data/cache_dump.db";//缓存转储位置
15 statistics-file "/var/named/data/named_stats.txt";//记录统计信息的文件
16 memstatistics-file "/var/named/data/named_mem_stats.txt";//记录内存使用的统计信息
17 allow-query { localhost; };//允许查询的主机,默认只允许本机查询
若需要允许所有客户机查询,则修改为// allow-query { any; };
18 recursion yes;//允许递归查询
19
20 dnssec-enable yes;
21 dnssec-validation yes;
22 dnssec-lookaside auto;
23
24 /* Path to ISC DLV key */
25 bindkeys-file "/etc/named.iscdlv.key";
26 };
27
28 logging {//Loging段
29 channel default_debug {
30 file "data/named.run";//记录了一些named的信息,如监听/解析记录等。它的位置在/var/named/chroot/var/named/data下。
31 severity dynamic;
32 };
33 };
34
35 zone "." IN {
36 type hint;//type只有3种参数:hint/master/slave.只有"."对应的type为hint,其它zone的类型只能为master或slave,即DNS主机和DNS从机。
37 file "named.ca";//指定了解析文件的位置,解析文件中记录着域名与IP的对应关系。它的位置在/var/named/chroot/var/named/data下。
38 };
39
40 include "/etc/named.rfc1912.zones";//解析文件列表的位置
实际上,还可以增加view段。view是解析文件的一个集合,有了view,
就可以对不同网络进行不的管理策略。比如对内网和外网主机采用不同的策略,让它们查询到的解析记录不一样。
cat -n /var/named/chroot/var/named/named.ca
部分内容如下:
27 ;; ADDITIONAL SECTION:
28 A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4
29 A.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:ba3e::2:30
30 B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201
31 C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12
32 D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90
33 E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10
34 F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241
35 F.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:2f::f
36 G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4
37 H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53
38 H.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:1::803f:235
39 I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17
40 J.ROOT-SERVERS.NET. 3600000 IN A 192.58.128.30
41 J.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:c27::2:30
42 K.ROOT-SERVERS.NET. 3600000 IN A 193.0.14.129
43 K.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:7fd::1
44 L.ROOT-SERVERS.NET. 3600000 IN A 199.7.83.42
45 M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33
46 M.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:dc3::35
什么是IP反向解析?DNS服务器里有两个区域,即“正向查找区域”和“反向查找区域”,反向查找区域即是这里所说的IP反向解析,其作用就是通过查询IP地址的PTR记录来获取该IP地址指向的域名,要成功得到域名就必需要有该IP地址的PTR记录。
IP反向解析如何应用到邮件系统中来拦截垃圾邮件?请看这样一个例子:
小刘到A公司拜访,他递上一张名片,名片上写着他来自“华夏俱乐部”和电话号码等信息,A公司觉得应该对小刘的来历做个简单调查,于是打电话到他名片上的电话号码所属电信局进行查实,如果电信局告诉A公司其电话号码不属于“华夏俱乐部”,则A公司将拒绝小刘的拜访,如果其电话号码的确属于“华夏俱乐部”,A公司可能接受小刘的拜访,然后A公司想要进一步查实,于是就打电话到“华夏俱乐部”所属注册机构查询,如果得到的答复确认该俱乐部确有此电话号码,那么A公司认为小刘身份是真实的,于是接受小刘的拜访,否则仍将拒绝。
这个例子中,小刘好比是我们的邮件服务器,A公司是对方邮件服务器,“华夏俱乐部”就是我们邮件服务器与对方邮件服务器通信时所使用的HELO域名(不是邮件地址@后的域名),名片上的电话号码就是我们邮件服务器出口的公网IP地址。A公 司对小刘进行调查的过程就相当于一个反向解析验证过程。由此看出,反向解析验证其实是对方服务器在进行的,而如果我们没有做反向解析,那么对方服务器的反向解析验证就会失败,这样对方服务器就会以我们是不明发送方而拒收我们发往的邮件,这也就是我们排除其它原因后(如被对方列入黑名单、没有MX记录、使用的是动态IP地址等等)在未做反向解析时无法向很多邮件服务器(例如sina.com、homail.com)成功发信的原因。
那么我们应当如何顺利做好反向解析?首先要有固定公网IP 地址、可用域名(最好不要被其它服务所用),例如您有yy.com的域名,您可以要求您的域名注册商为您添加一个 mail.yy.com的域名
并将其A记录指向您的SMTP服务器出口公网IP地址,如:114.XXX.XXX.XXX,接着请与您的固定IP所属ISP联系要求为您的IP反向解析至mail.yy.com。完成后别忘了将您的SMTP服务器的HELO域名改为mail.yy.com,这样才可以达到目的。
另:
1、做好反向解析后发往sina.com的信件有可能会被转至“不明邮件夹”中,此时请您与sina.com联系,要求为您解决该问题。
2、查看反向解析是否成功,可用如下命令:nslookup IP地址,从返回的信息中您可以看到反向解析的结果。
3、一定要有固定公网IP地址以及真实可用域名。同时要注意反向解析的域名的A记录一定要指向该IP.
4、对于有多个固定公网IP地址的,只要做主要出口IP的反向解析即可,不管您有多少SMTP服务器,只要是通过该IP连接至外网就将这些SMTP服务器的HELO域名改成IP反向解析之域名即可。
[root@localhost chroot]# cat -n etc/named.rfc1912.zones
1 // named.rfc1912.zones:
2 //
3 // Provided by Red Hat caching-nameserver package
4 //
5 // ISC BIND named zone configuration for zones recommended by
6 // RFC 1912 section 4.1 : localhost TLDs and address zones
7 // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
8 // (c)2007 R W Franks
9 //
10 // See /usr/share/doc/bind*/sample/ for example named configuration files.
11 //
12
13 zone "localhost.localdomain" IN {//正向解析的zone定义
14 type master;
15 file "named.localhost";//指定了解析文件的位置,解析文件中记录着域名与IP的对应关系。它的位置在/var/named/chroot/var/named/data下。
16 allow-update { none; };//是否可以更新对应的zone文件
17 };
18
19 zone "localhost" IN {//正向解析的zone定义
20 type master;
21 file "named.localhost";
22 allow-update { none; };//是否可以更新对应的zone文件
23 };
24
25 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 {
26 type master;
27 file "named.loopback";
28 allow-update { none; };
29 };
30
31 zone "1.0.0.127.in-addr.arpa" IN {//反向解析的zone定义,对应的IP为127.0.0.1,注意,这里是反过来写,并且最后要加上“.in-addr.arpa”以告诉named这是一个反解zone定义。
32 type master;
33 file "named.loopback";
34 allow-update { none; };//是否可以更新对应的zone文件
35 };
36
37 zone "0.in-addr.arpa" IN {//反向解析的zone定义
38 type master;
39 file "named.empty";
40 allow-update { none; };
41 };
42
[root@localhost named]# cat -n named.localhost
1 $TTL 1D ;缓存时间
2 @ IN SOA @ rname.invalid. ( ;SOA是Start Of Authority 的缩写
3 0 ; serial 序号 如果master上的zone文件序号比slave上的大,那么数据就会同步。
4 1D ; refresh 刷新Slave的时间
5 1H ; retry Slave更新失败后多久再进行一次更新
6 1W ; expire 失败多少次后不再尝试更新,一周
7 3H ) ; minimum 缓存时间,如果没有设定$TTL 这个值就可当作$TTL
8 NS @ ;就是zone中定义的域名,如localhost.localdomain和localhost
;NS(Name Server)缩写,NS @ 表示该zone的查询将提交给主机localhost.localdomain
9 A 127.0.0.1 ;A是正向解析的符号,后面紧跟着IP,表示localhost.localdomain对应的IP为127.0.0.1.
10 AAAA ::1
补充一些
正向解析文件和反向解析文件都有的zone文件。