标签:dns(domain name system 因特网上作为域名和ip地址相互映射的一个分布式数据库 域名系统) 而不用去记住能够被机器直接读取的ip数串。通过主机名 能够使用户更方便的访问互联网 最终得到该主机名对应的ip地址的过程叫做域名解析(或主机名解析)。dns协议运行在udp协议之上
一、DNS概述以及相关术语
1.DNS是域名系统 (Domain Name System) 的缩写,是一种组织域层次结构的计算机和网络服务命名系统。它的作用是:把域名转换成为网络可以识别的 IP 地址,查询结果保存起来,并告诉给客户端。
2.FQDN全名是Fully Qualified Domain Name,即完全合格域名
3.CDN的全称是Content Delivery Network,即内容分发网络,通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
二、DNS查询过程
DNS的查询过程是指在客户端是通过DNS服务器将一个IP地址转化为一个FQDN、将一个FQDN转化为一个IP地址或查询一个区域的邮件服务器的过程。
1.按查询方式分类DNS查询
a.递归查询:当DNS服务器接收到查询请求时,要么做出查询成功响应,要么做出查询失败的响应。递归查询一般发生在DNS客户端与DNS服务器之间。
b.迭代查询:DNS服务器根据自己的高速缓存或区域的数据,以最佳结果响应。如果DNS服务器无法解析,它可能返回一个指针。指针指向有下级域名的DNS服务器,继续该过程,直到找到拥有所查询名字的DNS服务器,或直到出错、超时为止。迭代查询一般发生在DNS服务器之间。
2.按查询内容分类DNS查询
a.正向查询;域名-->IP
b.反向查询:IP---->域名
三、DNS的测试工具
1.dig的使用(用来测试正向解析,在本机用)
dig [-t type] name [@SERVER] [query options]
dig用于测试dns系统,因此,不会查询hosts文件进行解析;
查询选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP @SERVER
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
例如:dig -t axfr magedu.com @172.16.100.11 @172.16.100.11:表示使用172.16.100.11服务器来解析
2.host命令:
host [-t type] name [SERVER]
3.nslookup命令:
nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询;
set q=RR_TYPE: 指明查询的资源记录类型;
NAME:要查询的名称;
四、正、反向解析、主从复制以及正向子域授权相关示例
先安装bind工具
[root@localhost ~]# yum install bind -y
2.缓存服务器的配置以及正向解析的过程(正向解析是将域名解析为ip)
[root@localhost ~]# vim /etc/named.conf # 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"; }; [root@localhost ~]# service named restart [root@localhost ~]# ss -tunl | grep :53
[root@localhost ~]# vim /etc/named.rfc1912.zones #添加正向区域 zone "tg.com" IN { type master; file "tg.com.zone"; }; [root@localhost ~]# named-checkconf #检查配置文件有没语法错误 [root@localhost ~]# rndc reload [root@localhost ~]# rndc status [root@localhost ~]# tail /var/log/messages #查看日志后会发现差一个区域解析库文件 [root@localhost ~]# vim /var/named/tg.com.zone #添加 $TTL 1D #统一的TTL值 $ORIGIN tg.com. #统一的后缀:tg.com. @ IN SOA ns1.tg.com. #(服务器) ns1admin.tg.com. #(管理员邮箱地址) ( 2015042201 #序列号 2H #刷新时间 10M #重试时间 1W #过期时间 1D #否定答案的最小TTL值 ) IN NS ns1 #定义名称服务器ns1 IN NS ns2 #定义名称服务器ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 192.168.2.199 ns2 IN A 192.168.2.222 mx1 IN A 192.168.2.199 mx2 IN A 192.168.2.193 www IN CNAME ns1 ftp IN CNAME ns2 * IN A 192.168.2.199 [root@localhost ~]# named-checkzone "tg.com" /var/named/tg.com.zone zone tg.com/IN: loaded serial 2015042201 OK [root@localhost ~]# cd /var/named/ [root@localhost named]# chown :named tg.com.zone [root@localhost named]# chmod 640 tg.com.zone [root@localhost named]# rndc reload [root@localhost named]# dig -t A www.tg.com @192.168.2.200 #测试解析是否成功,到此主服务器就实现了
至此,我们的正向解析器就完工了。
3.反向解析(将IP解析为域名)
[root@localhost named]# vim /etc/named.rfc1912.zones #添加反向区域 zone "2.168.192.in-addr.arpa" IN { type master; file "2.168.192.zone"; }; [root@localhost named]# vim 2.168.192.zone $TTL 2D $ORIGIN 2.168.192.in-addr.arpa. @ IN SOA ns1.tg.com. admin.tg.com. ( 2015042610 2H 1M 2W 1D ) IN NS ns1.tg.com. IN NS ns2.tg.com. 99 IN PTR www.tg.com. 200 IN PTR ftp.tg.com. 200 IN PTR ns1.tg.com. 200 IN PTR ns2.tg.com. [root@localhost named]#chmod 640 /var/named/2.168.192.zone [root@localhost named]#chown :named /var/named/2.168.192.zone [root@localhost named]# rndc reload server reload successful [root@localhost named]# rndc status version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 CPUs found: 1 worker threads: 1 number of zones: 21 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running [root@localhost named]# dig -x 192.168.2.99 @192.168.2.200 #测试解析一下192.168.2.99,发现能解析成功 ; ;; QUESTION SECTION: ;www.tg.com. IN A ;; ANSWER SECTION: www.tg.com. 86400 IN CNAME ns3.tg.com. ns3.tg.com. 86400 IN A 2.2.2.2
到此反向解析就成功了
4.主从复制
#重新进入一台主机,比如我这里进入的是192.168.2.199,然后直接进入它的主配置文件 [root@localhost etc]# vim named.rfc1912.zones #添加到这个文件里面 zone "tg.com" IN { type slave; masters { 192.168.2.200; }; file "slaves/tg.com.zone"; }; [root@localhost named]# cd /var/named/slaves ;ls tg.com.zone #可以发现slaves目录下有了主服务器的正向解析库文件,说明主从服务器同步成功 [root@localhost slaves]# dig -t A www.tg.com @192.168.2.199 ..... ;; QUESTION SECTION: ;www.tg.com. IN A ;; ANSWER SECTION: www.tg.com. 86400 IN CNAME ns3.tg.com. ns3.tg.com. 86400 IN A 2.2.2.2 ...... #测试了一下可以看出,测试成功了
至此我们的主从复制就OK了
5.正向子域授权(即在原有的域上再划分出一个小的区域并指定新DNS服务器。)
[root@localhost named]# vim /var/named/tg.com.zone #在里面添加子域ops.tg.com ops IN NS ns1.ops ops IN NS ns2.ops ns1.ops IN A 192.168.2.01 ns2.ops IN A 192.168.2.02 [root@localhost named]# rndc status [root@localhost named]# rndc reload [root@localhost named]# rndc status #可以发现区域数没发生改变,因为只是子域授权,没,没发生本质性改变。然后再另外一台机器上配置子域服务器
[root@localhost ~]# yum install bind -y #在新的机器里面安装bind [root@localhost ~]# vim /etc/named.conf #注释掉 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"; };
[root@localhost ~]# service named restart Stopping named: [ OK ] Starting named: [ OK ] [root@localhost ~]# ss -tunl | grep :53 udp UNCONN 0 0 192.168.2.199:53 *:* udp UNCONN 0 0 127.0.0.1:53 *:* tcp LISTEN 0 3 192.168.2.199:53 *:* tcp LISTEN 0 3 127.0.0.1:53 *:* #可以看出已经监听在53号端口了 [root@localhost ~]# vim /etc/named.rfc1912.zones #在最后面添加区域ops.tg.com zone "ops.tg.com" IN { type master; file "ops.tg.com.zone"; }; [root@localhost ~]# rndc status [root@localhost ~]# rndc reload [root@localhost ~]# rndc status #可以发现区域解析库文件多了一个 [root@localhost ~]# tail /var/log/messages #可以方发现少一个ops.tg.com的区域解析库文件 [root@localhost ~]# vim /var/named/ops.tg.com.zone $TTL 1D $ORIGIN ops.tg.com @ IN SA ns1.ops.tg.com. admin.ops.tg.com. ( 2015042601 1H 10M 3D 1D ) IN NS ns1 IN NS ns2 ns1 IN A 192.168.2.01 #必须跟父域中的保持一致 ns2 IN A 192.168.2.02 #必须跟父域中的保持一致 www IN A 192.168.2.100 * IN A 192.168.2.100 [root@localhost ~]# cd /var/named [root@localhost named]# chmod 640 ops.tg.com.zone [root@localhost named]# chown :named ops.tg.com.zone [root@localhost named]# rndc reload server reload successful [root@localhost ~]# rndc reload server reload successful [root@localhost ~]# dig -t A ns2.ops.tg.com @192.168.2.199 #查子域中ns2.ops.tg.com,发现可以解析出来 [root@localhost ~]# dig -t A ns2.tg.com @192.168.2.199 #查父域ns2.tg.com,发现解析不了,因为它不知道父域在哪儿,有网的话,它就去找根了
#让子域能解析父域而不用去找根
[root@localhost named]# vim /etc/named.conf #在父服务器里面options{}里面添加转发器,提供转发功能 forward first; forwarders { 192.168.2.1; } #192.168.2.1表示能与外面通信的服务器 [root@localhost named]# rndc reload [root@localhost named]# dig -t A www.baidu.com @192.168.2.199 #发现能够成功解析,在转发之前是解析不到的,这是全部转发
下面是区域转发,在子域服务器里面:
[root@localhost named]# vim /etc/named.rfc1912.zones zone "tg.com" IN { type forward; foward only; forwarders { 192.168.2.1; } }; [root@localhost named]# vim /etc/named.conf dnssec-enable no; #将已注释掉的这行去掉注释,并将yes改为no dnssec-validation no; #将已注释掉的这行去掉注释,并将yes改为no // dnssec-lookaside auto; [root@localhost named]# rndc reload
至此我们的子域授权就OK了
标签:dns(domain name system 因特网上作为域名和ip地址相互映射的一个分布式数据库 域名系统) 而不用去记住能够被机器直接读取的ip数串。通过主机名 能够使用户更方便的访问互联网 最终得到该主机名对应的ip地址的过程叫做域名解析(或主机名解析)。dns协议运行在udp协议之上
原文地址:http://tanjie.blog.51cto.com/10027618/1638888