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 层次结构向下搜素 , 直至对于信息具有权威性的名称服务器 , 以此为客户端获得答案。在此情况中名 ch 称服务器将信息传递至客户端并在自己的缓存中保留一个副本 , 以备以后查找
具体的dns查询中间过程:
- 第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
- 第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
- 第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
- 第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
- 第五步:重复第四步,直到找到正确的纪录。
- 第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
以图片方式描述整个过程:
缓存 DNS 服务器
BIND 是最广泛使用的开源名称服务器 , 在 RHEL 中 , 通过 bind 软件包提供
防火墙开启端口是 53/TCP 和 53/UDP
BIND 的主配置文件是 /etc/named.conf /var/named ,目录包含名称服务器所使用的其他数据文件
dig解析的各个部分含义
//dig解析域名,dns高速缓存机制会使第一次解析的保存下来后面就会非常快
"; <<>> DIG ... " //取地址时的系统
##每个标题指出关于查询和答案的信息 , 其中包括响应状态和设置的任何特殊标记 ( aa 表示权威答案 , 等等 )
QUESTION // 提出实际的 DNS 查询
ANSWER // 响应 ( 如果有 )
AUTHORITY // 负责域 / 区域的名称服务器
ADDITIONAL // 提供的其他信息 , 通常是关于名称服务器底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间
##DNS 排错信息: 显示来自 DNS 查找的详细信息 , 其中包括为什么查询失败
status:
NOERROR // 查询成功
NXDOMAIN // DNS 服务器提示不存在这样的名称
SERVFAIL // DNS 服务器停机或 DNSSEC 响应验证失败
REFUSED // DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )
回环借口 : lo : 127.0.0.1
//系统内部的神经线,内部服务与服务之间的沟通接口
搭建dns高速缓存
server服务端设置:
yum install bind -y ##安装软件包
systemctl start named ##启动这里bind软件下载的叫named服务
这里第一次开启named服务会卡,晃动鼠标或敲击键盘生效
因为涉及到文件/dev/random这里存放的是键盘鼠标轨迹的加密信息
/etc/rndc.key 放的是dns的加密key,也是dns key的有效书写格式
配置防火墙,使火墙策略添加使用DNS
rpm -qc bind //查看下载的安装包涉及的文件
//其中named.root(有时也称为named.ca,都是指的同一个东西,大家的习惯不同嘛)中包含的是目前全球顶级域名服务器地址信息
man 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; }; ##对所有人可侦听
vim /etc/named.conf 配置服务配置文件
11 listen-on port 53 { any; }; //将所有网络的53端口打开
17 allow-query { any; }; //允许任何人询问
18 forwarders {172.25.254.250; }; //转发器,如果不知道IP,询问这个IP。这个IP需联网
//转发器的格式:
options {
forwarders { 192.168.24.35; 192.168.24.36; }; //多个ip的填写方式
};
systemctl restart named 重启服务生效
*tips :
转发机制:当你设置了转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的 DNS 转发器上,由这台 DNS 来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。
某些网络连接不鼓励向本地以外发送很大的数据流量,这要么是因为网络连接是按流量计费的,或网络连接本身是带宽不足。在这样的情况下,如果想将发往外部的 DNS 流量限制到尽可能的小,就需要使用 BIND 的转发机制。或者你的网络中只有一台机器能连接到 Internet ,而你在这台机器上运行了 BIND ,那么你可以将这台 BIND 作为内部网络中的其他 BIND 的转发器,使得其他 DNS 也能查找 Internet 域名。
注意 ! :
这里要注意,转发器本身不用做任何设置,而是对需要转发器的其他 DNS server 做以上配置。还有,如果该 DNS Server 无法联系到转发器,那么 BIND 会自己尝试解析。
client端设置:
vim /etc/resolv.conf
servername 172.25.254.109 //配置DNS,IP为severIP
dig 域名检测效果:
//如果是第一次访问比较慢,后面就非常快了。
NDS正向解析 从域名解析IP —— A记录
dig -> 端口53 -> 端口对应的ip -> name.conf -> named.rfc1912.zones -> goodday.com.zone
1、vim /etc/named.conf 注释掉forwarders
2、vim /etc/named.rfc1912.zones
zone "goodday.com" IN { ##goodday.com为域名,自己写
type master;
file "goodday.com.zone"; ##goodday.com.zone为文件名称,自己写
allow-update { none; };
};
3、cp -p /var/named/named.localhost /var/named/goodday.com.zone
- 复制named.localhost为goodday.com.zone,因为/var/named 这里面的文件权限不一样所以-p代权限复制
- 这里文件的名字要和上面文件的名字一样了
4、vim /var/named/goodday.com.zone
DNS 区域采用资源记录的形式存储信息。每条资源记录均具有一个类型 , 表明其保留的数据类型
A : 名称至 IPv4 地址
AAAA : 名称至 IPv6 地址
CNAME : 名称至 ”规范名称 “ ( 包含 A/AAAA 记录的另一个名称 )
PTR :IPv4/IPv6 地址至名称
MX : 用于名称的邮件交换器 ( 向何处发送其电子邮件 )
NS : 域名的名称服务器 SOA :” 授权起始 “ , DNS 区域的信息 ( 管理信息 )
$TTL 1D //客户端缓存最大访问限额 ,一天(类似记录时间,时间到了就重新问)'
@ "(相当于goodday.com)" IN SOA 名字 //每串字符后面加.(点不加的话会自动补齐goodday.com然后还是没有点,所以不行)
dns.goodday.com. "(dns解析)" root.goodday.com."(谁来管)"
NS dns.westos.com."(注意最后的点)"
dns A 172.25.254.100
www A 172.25.254.222 //dns不会检测这个地址通不通,写什么就是什么
news A 172.25.254.133
news A 172.25.254.233 //和上面的www一起组成成为"轮叫机制",使主机的压力可以分摊
5、systemctl restart named
6、dig查看ANSWER SECTION 是不是自己设置的轮叫机制ip
dig news.goodday.com :
第一次:
第二次:
//在goodday.com.zone 中写入的顺序,news出现时ANSWER SECTION 先回答的是交替轮换的,第一次172.25.254.133在上,第二次172.25.254.233在上,这样交替为主机分摊压力
DNS反向解析 从IP解析域名 —— PTR记录
dig -> 端口53 -> 端口对应的ip -> name.conf -> named.rfc1912.zones -> goodday.com.ptr
1、vim /etc/named.rfc1912.zones
43 zone "254.25.172.in-addr.arpa" IN { ##网段必须反着写
44 type master;
45 file "goodday.com.ptr"; ##名字可以自己设置
46 allow-update { none; };
2、cp -p /var/named/named.loopback /var/named/goodday.com.ptr
3、vim /var/named/goodday.com.ptr
//dns不变,指向自己 ,IP的反向解析和域名的正向解析是两种不同的系统,不必要一一对应。
4、systemctl restart named
一定要将两个文件都填写完并正确才可以重启named成功。
5、dig -x 172.25.254.222
-x 是反向,输入ip查询:
双向解析 即不同的IP询问同一个域名,解析出不同的IP
实现在172.25.254.9(foundation9)访问与其他(包括自己dns-server) 访问到解析的地址不同
man 5 named.conf
在view中发现写法:
1、vim /etc/named.conf
在/etc/named.conf中添加修改,对172.25.254.9单独设置一个解析方式,然后额外创建各自的name.rfc1912(3).zones
52 /* zone "." IN { ##注释掉第52行到59行
53 type hint;
54 file "named.ca";
55 };
56
57 include "/etc/named.rfc1912.zones";
58 include "/etc/named.root.key";
59 */
include "/etc/named.rfc1912.zones"; ##表示在172.25.254.9用户访问时看1912这个文件
include "/etc/named.rfc1913.zones"; ##表示在其他用户访问时看1913这个文件
2、cp -p /etc/named.rfc1912.zones /etc/named.rfc1913.zones
3、vim /etc/named.rfc1913.zones
//因为是要读新的文件,所以要更换文件,这里就是更换后缀
4、cp -p /var/named/goodday.com.zone /var/named/goodday.com.inter
5、vim /var/named/goodday.com.inter
systemctl restart named 生效,用两个主机分别测试就好
注意 :
在操作时,一定保证要实验的客户端的网关要设置成为172.25.254.109(服务端)从文件访问来看:
即为从同一个端口进入ip,访问同一个文件/etc/named.conf
然后分头,不同分类的ip分别进入自己对应的named.rfc….zones 然后读自己的…文件
同样原理,可以实现多个网络都分别分开,即多向解析
搭建简单DNS集群
为了分担dns的压力,我们需要再配置一台服务器,这里为209 同样与开始配置高速缓存dns方法相同
1.下载bind ,开启服务, 设置火墙策略添加dns, 设置/etc/resolv.conf文件的nameserver
2、编写基本的/etc/named.conf
11 listen-on port 53 { any; };
17 allow-query { any; };
//也可以将它们直接注释掉,直接注释的含义就是全开
3、vim /etc/named.rfc1912.zones
zone "goodday.com" IN {
type slave; //表示辅助
masters{ 172.25.254.109; };
file "slaves/goodday.com.zone";//文件中填写的名称随意,但是创建文件名要相同
allow-update { none; };
};
注意:/var/named相当于dns服务的根目录,A记录存放的位置,所以设置file"slaves/..."
ls -l /var/named
4、systemctl restart named
5、dig www.we.com
上述方法如果主DNS的内容改变,那么副DNS上不会同步,同步需要主服务器做以下操作:
注意: 是主server端rm -fr /var/named/slaves/… , 重启服务生效
但是,这么长的代码时间,将会对网站造成非常大的影响,这是运维绝不能出现的问题,所以要不用重启的方法,修改文件/etc/named.rfc1912.zones , /var/named/goodday.com.zone
*) vim /etc/named.rfc1913.zones
25 zone "goodday.com" IN {
26 type master;
27 file "goodday.com.zone";
28 allow-update { none; };
29 also-notify {172.25.254.209;}; ##添加这行,开启同步
30 };
*)vim /var/named/goodday.com.zone
$TTL 1D
@ IN SOA dns.goodday.com. root.goodday.com. (
2017080801 ; serial ##服务编号,同步时在读是时候查看的信息,前面的数字不同,同步,相同就不同步
1D ; refresh ##刷新的时间
1H ; retry ##若是询问失败,再次询问的时间
1W ; expire ##到期日,这里是一万年
3H ) ; minimum ##最短的到期日
"这里面更改ip,但是还要注意上面的每个参数的含义"