DNS基础知识
什么是DNS?
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。
DNS总览
- 权威名称服务器:存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据。
- 权威名称服务器的类型包括:
1>Master :包含原始区域数据。有时称作 “主要“名称服务器。
2>Slave:备份服务器 , 通过区域传送从 Master 服务器获得的区域数据的副本。有时称作 “次要 ”名称服务器。 - 非权威 / 递归名称服务器:客户端通过其查找来自权威名称服务器的数据。递归名称服务器的类型包括仅缓存名称服务器:仅用于查找, 对于非重要数据之外的任何内容都不具有权威性。
安装部署DNS
- 首先,打开一台虚拟机,配置他的网络,让他可以联网。
网关是我真机的ip,真机此时连上网了,且开启了防火墙伪装。
- 修改主机名为dns_server
hostnamectl set-hostname dns_server.even.com
- 搭建yum源,安装并开启服务
rpm -ql bind ##查看DNS服务在系统中的安装文件路径,其中
/etc/named.conf ##主配置文件
/etc/named.rfc1912.zones ##子配置文件
/etc/rndc.conf ##加密文件
/var/named ##数据目录,DNS服务器所使用的其他数据文件
/var/named/named.localhost ##DNS服务器所使用的其他数据文件,正向解析
/var/named/named.loopback ##DNS服务器所使用的其他数据文件,反向解析
/var/named/slaves
- 防火墙列表中加入DNS服务
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
firewall-cmd --list-all
至此,我们的DNS服务器就部署好了。
DNS高速缓存
DNS查找
- 客户端上的 Stub 解析器将查询发送至 /etc/resolv.conf 中的名称服务器,如果名称服务器对于请求的信息具有权威性,会将权威答案发送至客户端,否则 ,如果名称服务器在其缓存中有请求的信息,则会将非权威答案发送至客户端;如果缓存中没有信息,名称服务器将搜索权威名称服务器以查找信息,从根区域开始,按照 DNS 层次结构向下搜素,直至对于信息具有权威性的名称服务器,以此为客户端获得答案。在此情况中名称服务器将信息传递至客户端并在自己的缓存中保留一个副本,以备以后查找。
- 局域网内部主机之间的传输速度远远高于局域网和互联网之间的传输速度,当我们企业中的所有主机都访问权威DNS114.114.114.114去做域名解析时,解析速度会很慢,为了解决这个问题,此实验我们将一台主机模拟为DNS服务器,让他去向权威DNS服务器请求解析,形成缓存,这样其他主机要访问时,首先请求我们模拟的DNS看他内部有没有缓存,有缓存的话就不用再去请求权威DNS了,这可以大大提高我们的效率。
- 我们模拟的DNS服务器本质是非权威DNS。
- 在DNS服务器的主配置文件中作以下修改:
vim /etc/named.conf
,并重启服务systemctl restart named
13 listen-on port 53 { any; }; ##将53端口的ip设置为本机ip
19 allow-query { any; }; ##允许哪台主机询问
20 forwarders{114.114.114.114;}; ##添加这行的目的是,不问根域名.,直接询问114.114.114.114,为了加快访问速度
34 dnssec-validation no; ##不进行安全检测
- 测试,打开另外两台虚拟机,在配置文件
/etc/resolv.conf
中添加nameserver是我们DNS服务器的ip:
注意:这个文件即改即生效。
测试的两台虚拟机同时dig www.163.com,可以看到第二台虚拟机的查询时间明显缩短。
DNS 排错
它显示来自 DNS 查找的详细信息 ,其中包括为什么查询失败:
NOERROR | 查询成功 |
---|---|
NXDOMAIN | DNS 服务器提示不存在这样的名称 |
SERVFAIL | DNS 服务器停机或 DNSSEC 响应验证失败 |
REFUSED | DNS 服务器拒绝回答 ( 也许是出于访问控制原因 ) |
DNS的正向解析
正向解析就是将域名解析为ip地址的过程。
- 在DNS服务器的子配置文件中,复制第19-23行的内容到24行,并修改这几行为:
vim /etc/named.rfc1912.zones
zone "even.com" IN { ##你要维护的域
type master; ##类型是权威(主)DNS
file "even.com.zone"; ##在这个文件中查询
allow-update { none; };
};
- 在数据目录
/var/named
下,复制文件named.localhost的内容到你要查询的文件中,我这里是even.com.zone,注意一定要用-p复制,因为涉及到权限问题
cp -p named.localhost even.com.zone
- 在
even.com.zone
文件中修改以下内容:
1 $TTL 1D ##客户端能保存缓存最长时间 为1天
2 @ IN SOA dns.even.com. zhang.even.com. ( ##@符表示在子配置文件中zones双引号中间我们填写的自己要维护的域,不写.的话会自动补全域,例如(zhang.even.com.=zhang)
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 NS dns.even.com. ##NS 域名服务器的名称
9 dns A 172.25.254.124 ##dns服务器的ip4地址
10 bbs A 172.25.254.134
- 重启服务,在客户端测试:
systemctl restart named
dig bbs.even.com
dig www.even.com
注意:dig输出部分内容的含义如下:
- 标题指出关于查询和答案的信息 , 其中包括响应状态和设置的任何特殊标记 ( aa 表示权威答案,等等 )
- QUESTION : 提出实际的 DNS 查询
- ANSWER : 响应 ( 如果有 )
- AUTHORITY : 负责域 / 区域的名称服务器
- ADDITIONAL : 提供的其他信息 , 通常是关于名称服务器
- 底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间
DNS的轮询
DNS的轮询是指一个域名针对多个ip的A记录的解析,DNS服务器将解析请求按照A记录的顺序,逐一分配到不同的ip上,这样就实现了简单的负载均衡。
- 我们在DNS服务器的even.com.zone中加入以下内容,并重启服务:
- 在客户端测试,可以看到我们dig同一个域名,但是对应ip的前后顺序发生了改变:
DNS的邮件服务
SMTP
简单邮件传输协议 (Simple Mail Transfer Protocol,SMTP):是一个基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
POP3
POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。主要用于支持使用客户端远程管理在服务器上的电子邮件,POP3协议默认端口是110。
mx记录
邮件交换记录 (MX record)是域名系统(DNS)中的一种资源记录类型,用于指定负责处理发往收件人域名的邮件服务器。MX记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件的服务器。简单邮件传输协议(SMTP)会根据MX记录的值来决定邮件的路由过程。
- 我们在DNS服务器的even.com.zone文件中加入以下内容,并重启服务:
- 在客户端发送邮件测试:
在DNS服务器端:
DNS的反向解析
PTR记录
PTR记录(Pointer Record),是电子邮件系统中的邮件交换记录的一种,常被用于反向地址解析,也就是将ip地址解析为域名的过程。
- 在DNS服务器的子配置文件
/etc/named.rfc1912.zones
复制第36-40行的内容到41行,并修改为:
- 在数据目录
/var/named
下,复制named.loopback文件到172.25.254.ptr文件,也就是要读的文件中,注意一定要加-p:
- 编辑172.25.254.ptr文件,并重启服务:
- 客户端测试:
dig -x + ip
dig -x 172.25.254.111
dig -x 172.25.254.222
DNS的双向解析
双向解析的目的是让不同的客户端解析到不同的ip,即内网和外网解析到不同的ip。
我们这里的内网指的是本机,外网指的是其他主机,即让本机和其他主机解析到不同的ip。
- 首先,我们在数据目录
/var/named
下建立一个外网的域名文件,修改外网域名文件的ip为1.1.1.主机号:
cp -p even.com.zone even.com.inter.zone ##注意,一定要-p复制
:%s/172.25.254/1.1.1/
- 然后,再建立一个外网的子配置文件,修改内容,让他读外网的域名文件:
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.inter.zones ##复制加-p
- 然后,我们修改主配置文件,首先注释掉单向解析的行,通过
man 5 named.conf
,可以查看具体的帮助信息:
格式如下:
所以我们按照格式修改主配置文件为以下这样,并重启服务:
- 分别在本台主机和其他主机进行测试:
辅助DNS
辅助dns是针对外网。
集群:主的通知辅助的 ,目的是数据同步,让多台主机为一台主机工作。
DNS主配置文件中注释掉即全部打开。
- 首先,我们在另一台虚拟机中搭建DNS服务,所有操作同上,修改主机名为
dns_slave
,并修改配置文件/etc/resolv.conf
中的nameserver为他自己的ip 172.25.254.224。
在子配置文件中修改以下:
- 然后,我们先注释掉双向解析在主配置文件中添加的内容,恢复原来的内容,在子配置文件中修改以下内容:
我们通过man 5 named.conf
查找also-notify,可以看到后面可加多个ip。
在域名文件even.westos.zone
文件中修改域名对应的ip,并修改serial的值,重启服务:
- 测试:在客户端
dig www.even.com
注意:每次更改域名文件后必须更改serial的数值,这个数值最大10位。
DNS的远程更新
在进行此实验之前,先将要更新的DNS服务器的selinux设置为disabled,或者在enforcing的状态下将这个的bool值设为1:
基于ip
- 在要更新的DNS服务器,我们首先将数据目录
/var/named
下的域名文件复制到一个空目录下,保留备份。
cp -p even.com.zone /opt/
-
然后,我们修改子配置文件,并重启服务:
-
测试:
-
我们查看日志文件看看是什么导致的发送失败:
cat /var/log/messages
-
这是因为我们对数据目录没有写权限,所以我们修改数据目录的权限:
-
再进行测试:
其他主机可以解析这个域名:
但此时该域名和他对应的ip并没有写到我们的域名文件中,当我们重启服务systemctl restart named
后,他就添加到域名文件中了。 -
另外,若想删除这个域名,命令如下:
-
测试,删除成功:
注意:此时在数据目录/var/named
下生成了一个.jnl文件,我们可以查看他的文件类型。
基于key
- 首先在进行这个实验之前,我们先清除之前在数据目录
/var/named
下的.jnl文件,或者直接删除与域名有关的文件,再将在/opt下备份的域名文件拷回来,这样做的原因是ip更新和key更新会有冲突。
rm -fr even.com.zone*
cp -p /opt/even.com.zone .
- 复制加密文件
/etc/rndc.key
到/etc目录下,文件命名为你要加密的名字。
cp -p /etc/rndc.key /etc/even.key ##复制一定加-p
- 在一个目录下生成公钥和私钥。
- 修改
/etc/even.key
中的secret为私钥中的key,名字为even。
- 将加密文件
/etc/even.key
指定到主配置文件中,目的是让主配置文件识别钥匙。
- 将子配置文件中的更新方式修改,使他为key加密更新,并重启服务:
- 测试命令如下:
nsupdate -k /mnt/Keven.+157+65519.private ##生成私钥的路径
- 更新成功,同样的,删除命令如下:
- 删除成功:
注意:同样的,添加和删除成功后重启服务才会更新到域名文件中。
基于key更新的方式同样生成了.jnl文件。
DDNS(花生壳)
- DDNS(Dynamic Domain Name Server)是动态域名服务的缩写。是指域名系统中一种自动更新名称服务器(name server)内容的技术。DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。
- DDNS=DHCP+DNS 动态域名解析,是指dhcp主动更新dns。
- 此实验的前提是key更新首先做好。
- 先删除DNS服务器端域名文件中多余的ip行,只留dns行,防止对我们的实验产生干扰。
- 我这里的DNS和DHCP服务器在同一台虚拟机,我们在这台虚拟机下载dhcp服务,并修改配置文件
/etc/dhcp/dhcpd.conf
,删掉27,28以及36行以后的内容,重启dhcp服务。 - 我们可以
man 5 dhcpd.conf
搜与dhcp_update有关的配置信息。
- 在客户端,修改主机名称为
news.even.com
,并修改网络为动态网络,重启网络,查看分配到的ip在不在我们设定的范围内,并dig news.even.com
- 修改dhcp端配置文件分配ip的范围,重启dhcp服务,在客户端,重启网络,进行多次测试。