1,DNS介绍
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
监听的协议端口:UDP/TCP 53
软件实现:bind
2,DNS数状结构:
如下图:
根域:.
一级域如下:
组织域:.com, .org, .net, .mil, .edu, .gov, .info, .cc, .me, .tv
国家域:.cn, .us, .uk, .jp, .tw, .hk, .iq, .ir
反向域:.in-addr.arpa
上图中这里以"."开头的表示域名;www/mail/dns表示主机。
FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径。自下而上,所以.conan下的主机www的FQDN为:www.conan.org. (注意最后的 “.”一般会省略)
在上图中假设pc需要访问www.google.com ,pc指向的dns是dns.conan.org,解析流程如下:
1,dns.conan.org 发现用户请求不在自己解析域内的,直接向根DNS服务器请求查询;
2,根DNS负责向下递归,找到.com域内DNS;
3,.com找到.google域内DNS即dns.google.com;
4,dns.google.com解析出www.google.com的ip地址返回给dns.conan.org;
5,dns.conan.org返回IP地址信息给pc客户端。
注意点:
以上介绍的域是个逻辑的概念,每个域内有自己的DNS服务器,比如如果".com"域下有“.google”这个域,并假设“.google”这个域内的DNS为dns.google.com,那么“.com”域自己的DNS则记录需要到dns.google.com服务器上查询“.google”这个域内的主机。而“.google”域内dns.google.com服务器则需要向".com"域内DNS服务器申请注册。
3,DNS查询方式:
1,递归:请求被DNS服务器接受后,如果请求域名不属于此DNS管辖范围就请求上级DNS服务器依次传递请求,最后将返回的结果发给请求的主机。
此处引用网络图片示意(http://www.178linux.com/archives/2872):
2,迭代:请求被DNS服务器接受后,如果请求域名不属于此DNS管辖范围就返回并通知客户端再去请求上级DNS服务器,依次传递,直至查询到了最后域名所在的DNS服务器。
此处引用网络图片示意(http://www.178linux.com/archives/2872):
注意点:
1,客户端所指向的DNS服务器必须能给本机做递归查询的DNS服务器。
2,全球13组根域,且根不负责具体主机解析,负责向下传递。
3,DNS服务器在接受到不在自己解析域内的请求会直接交给根处理。
4,DNS资源记录:
资源记录用于标明资源的功能,如每个域所包含的与之相关的资源。例如,每个RR都包括这个域的所属(RR是从哪个域名中得到的),类型(什么样的资源存在于这个RR中),TTL(time to live,存活时间)等等。
SOA:Start Of Authority, 起始授权,
NS:Name Server, 域名服务器
MX:Mail eXchanger: 邮件交换器
A:Address, FQDN-->IP:FQDN解析为IP地址
PTR: PoiTeR, IP --> FQDN:IP地址反向解析为FQDN
AAAA: Address, FQDN --> IPv6
CNAME: Canonical Name,别名记录
5,DNS配置:
一般情况下,资源记录一般放DNS的数据库文件(区域数据文件,区域自身有名字);数据库文件一般为文本文件,只能包含资源记录或宏定义,且每行一个资源记录 。
资源记录的格式:
name [ttl](缓存时间) IN (关键字) RRtype(资源记录类型) Value(地址)
实验环境及软件:
CentOS release 6.4 (Final)
bind.x86_64(rpm包)
DNS服务器:192.168.1.105
www服务器:192.168.1.110
mail服务器:192.168.1.115
主配置文件:定义区域, /etc/named.conf
区域数据文件:/var/named/下
1) /etc/named.conf 一些参数解释:
options{ } ; //定义了全局选项
zone{ }; //定义区域 (每个区域应该有区域文件)
logging{ }; //定义了日志系统
listen-on port 53 { 127.0.0.1; }; //定义了监听的端口和地址,此项若不给,则默认监听eth,lo网卡上的地址和53号端口
directory "/var/named"; //定义了区域数据文件目录
allow-query { localhost; }; //定义了允许那些地址访问
recursion yes; //定义是否允许递归
dnssec-enable yes; #设定BIND是否支持DNSSEC,该技术并不对数据进行加密,它只是验证您所访问的站点地址是否有效。是一种端到端的安全协议
include //定义了包含此文件下的配置
zone{ 下定义的参数意义如下:
type // {hint 根|master 主|slave 辅助|fotward 转发}
file // 定义了区域文件
allow-transfer { 127.0.0.1; }; // 定义区域传送安全控制
};
这里定义了简单配置文件如下( 这里假设域名为conan.com. ):
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; };
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";
};
# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
algorithm hmac-md5;
secret "Fgdd+n+243u3zj/dSAa5uA==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
//zone "loalhost." IN {
// type master;
// file "named.localhost";
//};
//zone "1.0.0.127.in-addr.arpa." IN {
// type master;
// file "named.loopback";
//};
zone "conan.com." IN {
type master;
file "conan.com.zone";
allow-transfer { 127.0.0.1; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
2) 定义/var/named/conan.com.zone:
1,soa记录 注意:SOA必须是区域数据库文件第一条记录
@ IN SOA dns.conan.com. admin.conan.com.(
20150413 //序列号,十进制数字,不能超过10位,通常使用日期
2H //刷新时间,即每隔多久到主服务器检查一次
10M //重试时间,应该小于refresh time
7D //过期时间
10 ) //否定答案的ttl
@ IN NS dns //可以有多条,name为区域名,可以简写@,value为FQDN,可以使用相对名称
@ IN MX 10 mail //可以有多条,name用于标示smtp服务器,value包含优先级和FQDN,越低优先级越高
dns IN A 192.168.1.105 //name为FQDN,name为IP地址
mail IN A 192.168.1.110
www IN A 192.168.1.115
ftp IN CNAME www //name和value都为FQDN
pop IN CNAME mail
注意:区域名称在主配置文件下定义,需要修改新建的区域文件的属组和权限,并用“service named configtest”命令测试成功后,启动named服务。
查看监听端口:
[root@Conan_ ~]# netstat -tuln | grep 53
tcp 0 0 192.168.1.105:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
udp 0 0 192.168.1.105:53 0.0.0.0:*
udp 0 0 127.0.0.1:53 0.0.0.0:*
用测试工具dig测试:
[root@Conan_ ~]# dig -t A www.conan.com @192.168.1.105 (解析A记录,主机名为www.conan.com,通过192.168.1.105服务器)
[root@Conan_ ~]# dig -t MX conan.com @192.168.1.105 (解析MX记录,区域名为conan.com,通过192.168.1.105服务器)
[root@Conan_ ~]# dig -t A ftp.conan.com @192.168.1.105 (解析A记录,主机名为ftp.conan.com,通过192.168.1.105服务器)
明确说明了 ftp.conan.com 是别名,真正的服务器应该是www.conan.com,对应的ip地址为192.168.1.115
6,DNS反向解析配置:
1) /etc/named.conf 下新增zone:
zone "1.168.192.in-addr.arpa" IN {
type master;
file "arpa.conan.zone";
};
2)新建 "arpa.conan.zone"文件
需要注意的是:
1,反向解析区域数据库文件:区域名称以逆向的网络地址,并以.in-addr.arpa为后缀;
2,第一条必须SOA;
3,应该具有NS记录,不能出现MX和A记录;
4,较常见的为PTR记录 :name为逆向的主机地址,FQDN必须要写全。
示列:
$TTL 600
@ IN SOA dns.conan.com. admin.conan.com.(
20150413
2H
10M
7D
10
)
@ IN NS dns.conan.com. #注意value的FQDN必须写全
105 IN PTR dns.conan.com.
110 IN PTR mail.conan.com.
115 IN PTR www.conan.com.
重启后测试:
[root@Conan_ ~]# dig -x 192.168.1.110 @192.168.1.105
补充测试工具nslookup用法:
nslookup>
server DNS_SERVER_IP
set q=TYPE
{name}
示意图例:
[root@Conan_ ~]# nslookup
> server 192.168.1.105 //设置解析dns地址
Default server: 192.168.1.105
Address: 192.168.1.105#53
> set q=A //设置解析资源类型
> www.conan.com //解析的主机名
Server: 192.168.1.105
Address: 192.168.1.105#53
Name: www.conan.com
Address: 192.168.1.115 //解析的IP结果
[root@Conan_ ~]# nslookup
> server 192.168.1.105
Default server: 192.168.1.105
Address: 192.168.1.105#53
> set q=NS
> conan.com //解析的区域名
Server: 192.168.1.105
Address: 192.168.1.105#53
conan.com nameserver = dns.conan.com //解析的区域DNS名结果