深入DNS服务器--dns高速缓存,正向,反向,双向解析及dns集群

还在为dns配置而烦恼吗?本文介绍了超详细的dns配置方法有dns高速缓存,dns正向解析,反向解析,多项解析希望可以帮到大家。

DNS概述

DNS(Domain Name System)是什么?

DNS —— 域名系统。用来把机器名字转换成IP地址。 网络终端都有一个唯一的IP地址用于通信,就好象我们每个人都有住址用来收信。
IPv4长这样:192.168.1.1,255.255.255.255
IPv6长这样:2001:0DB8:02de:0000:0000:0000:0000:0e13
机器很喜欢这样的格式,换成二进制非常容易处理。但是让你每次上网都要在浏览器上输入这么一长串东西,不是很抓狂?所以我们需要Domain(域名)也就是机器名字来指代某个主机的IP地址。

DNS —— 权威名称服务器

存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据。

权威名称服务器的类型包括:
Master : 包含原始区域数据,有时称作 “主要 ”名称服务器。
Slave : 备份服务器 , 通过区域传送从 Master 服务器获得的区域数据的副本,有时称作 “次要 ”名称服务器 。

非权威 / 递归名称服务器
客户端通过其查找来自权威名称服务器的数据。

递归名称服务器的类型包括 仅缓存名称服务器 : 仅用于查找 , 对于非重要数据之外的任何内容都不具有权威性

DNS 查询

客户端上的 Stub 解析器将查询发送至 /etc/resolv.conf 中的名称服务器,如果名称服务器对于请求的信息具有权威性(缓存没有该信息 , 名称服务器将搜索权威名称服务器以查找信息 , 从根区域开始 , 按照 DNS 层次结构向下搜素 , 直至对于信息具有权威性的名称服务器 , 以此为客户端获得答案) , 会将权威答案发送至客户端并在自己的缓存中保留一个副本 , 以备以后查找,否则 , 如果名称服务器在其缓存中有请求的信息 ,则会将非权威答案发送至客户端。
具体的dns查询中间过程:

第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
第五步:重复第四步,直到找到正确的纪录。
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

图解:

dns的高速缓存

本实验的本地域名服务器为我的虚拟机

1 > 为了使我的虚拟机能充当本地域名服务器首先要配置网络使虚拟机可以上网。在这个过程中我的真机充当路由。
首先配置真机

[root@foundation68 network-scripts]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-11-20 17:19:12 CST; 5h 12min ago
 Main PID: 662 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─662 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Nov 20 17:19:09 foundation68.ilt.example.com systemd[1]: Starting firewalld -...
Nov 20 17:19:12 foundation68.ilt.example.com systemd[1]: Started firewalld - ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@foundation68 network-scripts]# firewall-cmd --add-masquerade
success
[root@foundation68 network-scripts]# firewall-cmd --list-all
public (default, active)
  interfaces: br0 p4p2 wlp2s0
  sources:
  services: dhcpv6-client ftp ssh
  ports:
  masquerade: yes
  forward-ports:
  icmp-blocks:
  rich rules:

再配置虚拟机

[root@dns ~]# cd /etc/sysconfig/network-scripts/

[root@dns network-scripts]# vim ifcfg-eth0
写入内容
BOOTPROTO=none
IPADDR=172.25.254.202
PREFIX=24
DEVICE=eth0
ONBOOT=yes
GATEWAY=172.25.254.68
DNS1=114.114.114.114

[root@dns network-scripts]# systemctl restart network
[root@dns network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.68   0.0.0.0         UG    1024   0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
[root@localhost ~]# ping 114.114.114.114  成功

PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
64 bytes from 114.114.114.114: icmp_seq=1 ttl=69 time=216 ms
64 bytes from 114.114.114.114: icmp_seq=3 ttl=85 time=51.7 ms
[64 bytes from 114.114.114.114: icmp_seq=4 ttl=85 time=50.5 ms

2. > 让我们真机的dns 服务器为本地的我的虚拟机

[root@foundation68 network-scripts]vim     /etc/resolv.conf

写入:

nameserver 172.25.254.202   写入高速缓存服务器的ip

3. > 我的虚拟机要充当dns 高速缓存服务器,需要以下步骤。

配置yum源
cd /etc/yum.repos.d
vim yum.repo[rhel7.0]
name=rhel7.0
baseurl=file:///rhel7.0
gpgcheck=0

mount /dev/sr0 /mnt
df  查看

4. >安装缓存 DNS 服务器

BIND 是最广泛使用的开源名称服务器 , 在 RHEL 中 , 通过 bind 软件包提供
防火墙开启端口是 53/TCP 和 53/UDP
BIND 的主配置文件是 /etc/named.conf     /var/named ,目录包含名称服务器所使用的其他数据文件
 

yum install bind.x86_64 -y                        安装软件包

systemctl start named                              启动这里bind软件下载的叫named服务

这里第一次开启named服务会卡,晃动鼠标或敲击键盘生效,因为涉及到文件/dev/random这里存放的是键盘鼠标轨迹的加密信息,/etc/rndc.key 放的是dns的加密key,也是dns key的有效书写格式

        
4 . > 配置防火墙,使火墙策略添加使用DNS


5 . > 为了让虚拟机成为一台dns 高速缓存服务器,我们需要对bind软件的配置文件进行修改

  查看bind软件安装后生成的文件

//其中named.root(有时也称为named.ca,都是指的同一个东西,大家的习惯不同嘛)中包含的是目前全球顶级域名服务器地址信息

[root@dns ~]# man named

查看named 服务的信息,发现 /etc/named.conf 是它的配置文件。

首先简单讲解 /etc/named.conf 的语法及配置信息的含义:
语法:

// 或 # 至行末尾是注释 ;/* 与 */ 之间的文本也是注释 ( 可以跨越多行 )
指令以分号结束
许多指令认为地址匹配列表放在大括号以 CIDR 表示法表示的IP 地址或子网列表中 , 或者命名的 ACL 中 『例如 any-- 所有主机 ,none-- 无主机  』
文件以 options 块开始 , 其中包含控制 named 如何运作的指令
zone 块控制 named 如何查对于其具有权威性的根名称服务器和区域
指令:

listen-on 控制 named 侦听的 IPv4 地址
listen-on-v6 控制 named 侦听的 IPv6 地址
allow-query 控制哪些客户端可以向 DNS 服务器询问信息
forwarders 包含 DNS 查询将转发至的名称服务器的列表( 而不是直接联系外部名称服务器 ; 在设有防火 墙的情况中很有用 )
所有这些指令会将打括号中以分号分隔的元素视为地址匹配列表 .
如:
listen-on { any; }; ##对所有人可侦听

 

[root@dns ~]vim /etc/named.conf

修改11,17,18,33 行

 11         listen-on port 53 { any; };         将所有网络的53端口打开,允许任何人询问
 17         allow-query     { any; };              允许任何人询问
 18         forwarders{ 114.114.114.114; };   转发器,如果不知道IP,询问这个IP
 33         dnssec-validation no;              不检测

[root@dns ~]systemctl restart named

 

*tips :

转发机制:当你设置了转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的 DNS 转发器上,由这台 DNS 来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。

某些网络连接不鼓励向本地以外发送很大的数据流量,这要么是因为网络连接是按流量计费的,或网络连接本身是带宽不足。在这样的情况下,如果想将发往外部的 DNS 流量限制到尽可能的小,就需要使用 BIND 的转发机制。或者你的网络中只有一台机器能连接到 Internet ,而你在这台机器上运行了 BIND ,那么你可以将这台 BIND 作为内部网络中的其他 BIND 的转发器,使得其他 DNS 也能查找 Internet 域名。

6.> 配置主机,让主机在dns 解析时询问 dns高速缓存服务器(我的虚拟机)

vim /etc/resolv.conf

真机执行dig www.baidu.com

[root@foundation68 ~]# dig www.baidu.com

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> www.baidu.com    //取地址时的系统
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50371
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 27

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.            IN    A

;; ANSWER SECTION:
www.baidu.com.        1200    IN    CNAME    www.a.shifen.com.
www.a.shifen.com.    150    IN    A    61.135.169.125
www.a.shifen.com.    150    IN    A    61.135.169.121
;; Query time: 996 msec

;; SERVER: 172.25.254.202#53(172.25.254.202)
;; WHEN: Wed Nov 21 18:01:21 CST 2018
;; MSG SIZE  rcvd: 897

##每个标题指出关于查询和答案的信息 , 其中包括响应状态和设置的任何特殊标记 ( aa 表示权威答案 , 等等 )

QUESTION // 提出实际的 DNS 查询

ANSWER // 响应 ( 如果有 )

AUTHORITY // 负责域 / 区域的名称服务器

ADDITIONAL // 提供的其他信息 , 通常是关于名称服务器底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间

##DNS 排错信息: 显示来自 DNS 查找的详细信息 , 其中包括为什么查询失败

NOERROR // 查询成功 

NXDOMAIN // DNS 服务器提示不存在这样的名称 

SERVFAIL // DNS 服务器停机或

DNSSEC 响应验证失败 

REFUSED // DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )

##回环接口 : lo : 127.0.0.1 //系统内部的神经线,内部服务与服务之间的沟通接口

##dig解析域名,dns高速缓存机制会使第一次解析的保存下来后面就会非常快

NDS正向解析 从域名解析IP —— A记录


1 . > 编辑named 服务的配置文件
[[root@dns ~]# vim /etc/named.conf
注释掉18行forwards内容


2 . > 编辑存放各类域的文件,新建域westos.com

[root@dns ~]# vim /etc/named.rfc1912.zones

zone "westos.com" IN {
        type master;
        file "westos.com.zone";
        allow-update { none; };
};


3. > 编辑这个域指向文件(westos.com.zone)的信息

[root@dns ~]# cd /var/named/
[root@dns named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@dns named]# cp -p named.localhost westos.com.zone
[root@dns named]# ll
total 20
drwxrwx---. 2 named named   22 Nov 20 10:21 data
drwxrwx---. 2 named named   30 Nov 21 06:15 dynamic
-rw-r-----. 1 root  named 2076 Jan 28  2013 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named    6 Jan 29  2014 slaves
-rw-r-----. 1 root  named  152 Jun 21  2007 westos.com.zone
因为域指向文件的写法较复杂,我们直接拷贝一份其他域指向文件,再对它修改就可以了。

[root@localhost named]# vim westos.com.zone

@       IN SOA   dns.westos.com. root.westos.com. (
                                        0       ; serial             判断文件是否被修改    
                                        1D      ; refresh         更新频率
                                        1H      ; retry              再次尝试1小时后
                                        1W      ; expire
                                        3H )    ; minimum
             NS      dns.westos.com.
www     A       172.25.254.68
dns       A       172.25.254.202
news    A       172.25.254.102  

参数解释:

$TTL 1D //客户端缓存最大访问限额 ,一天(类似记录时间,时间到了就重新问)

' @ "(相当于westos.com)"

IN SOA 名字 //每串字符后面加.(点不加的话会自动补齐goodday.com)

dns.wewstos.com.----> dns解析                    root.westos.com.---->谁来管

NS dns.westos.com."(注意最后的点)"

www     A       172.25.254.68
dns       A       172.25.254.202
news    A       172.25.254.102  //dns不会检测这个地址通不通,写什么就是什么

4. > 重启named服务

5. > 客户机测试

[root@foundation68 ~]# dig www.westos.com

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> www.westos.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15543
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.westos.com.            IN    A

;; ANSWER SECTION:
www.westos.com.        86400    IN    A    172.25.254.68

;; AUTHORITY SECTION:
westos.com.        86400    IN    NS    dns.westos.com.

;; ADDITIONAL SECTION:
dns.westos.com.        86400    IN    A    172.25.254.202      成功!!!

;; Query time: 0 msec
;; SERVER: 172.25.254.202#53(172.25.254.202)
;; WHEN: Wed Nov 21 19:49:48 CST 2018
;; MSG SIZE  rcvd: 93

DNS反向解析 从IP解析域名 —— PTR记录

1. > 编辑vim /etc/resolv.conf文件

2.> 编辑 vim /etc/named.rfc1912.zones文件

3. > 编辑vim 172.25.254.ptr文件

cp -p named.loopback 172.25.254.ptr

4 . > 测试

DNS多向解析 即不同的IP询问同一个域名,解析出不同的IP

我们内网人员在进行解析时解析出的为内网ip,其他用户在解析时解析出外网ip

1 .>  配置desktop 给它添加双ip
 vim /etc/sysconfig/network-scripts/ifcfg-eth0

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值