linux系统之DNS服务器
一.dns概述
<1>定义 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库, 能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。 DNS协议运行在UDP协议之上,使用端口号53。 在RFC文档中RFC 2181对DNS有规范说明, RFC 2136对DNS的动态更新进行说明, RFC 2308对DNS查询的反向缓存进行说明。 <2>dns意义 DNS解析是互联网绝大多数应用的实际寻址方式; 域名技术的再发展、以及基于域名技术的多种应用,丰富了互联网应用和协议。 域名是互联网上的身份标识,是不可重复的唯一标识资源; 互联网的全球化使得域名成为标识一国主权的国家战略资源 <3>域名结构 通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。 Internet 的顶级域名由 Internet网络协会域名注册查询负责网络地址分配的委员会进行登记和管理, 它还为 Internet的每一台主机分配唯一的 IP 地址。 全世界现有三个大的网络信息中心: 位于美国的 Inter-NIC,负责美国及其他地区; 位于荷兰的RIPE-NIC,负责欧洲地区; 位于日本的APNIC ,负责亚太地区
二.权威dns服务器
存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据。
权威名称服务器的类型包括
Master : 包含原始区域数据。有时称作 “主要 ”名称服务器
Slave : 备份服务器 , 通过区域传送从 Master 服务器获得的区域数据的副本。
有时称作 “次要 ”名称服务器
非权威 / 递归名称服务器: 客户端通过其查找来自权威名称服务器的数据。
递归名称服务器的类型包括
存名称服务器 : 仅用于查找 , 对于非重要数据之外的任何内容都不具有权威性
三.dns查找和排错
<1>查找
客户端上的 Stub 解析器 将查询发送至 /etc/resolv.conf 中的名称服务器,如果名称服务器对于请求的信息具有权威性 ,
会将权威答案发送至客户端,否则 , 如果名称服务器在其缓存中有请求的信息 ,
则会将非权威答案发送至客户端,如果缓存中没有信息 , 名称服务器将搜索权威名称服务器以查找信息 ,
从根区域开始 , 按照DNS 层次结构向下搜索, 直至对于信息有具有权威性的名称服务器 , 以此为客户端获得答案。
在此情况中,名称服务器将信息传递至客户端并在自己的缓存中保留一个副本 , 以备以后查找。
DNS资源记录
• DNS 区域采用资源记录的形式存储信息。每条资源记录均具有一个类型 , 表明其保留的数据类型。
– A : 名称至 IPv4 地址
– AAAA : 名称至 IPv6 地址
– CNAME : 名称至 ”规范名称 “ ( 包含 A/AAAA 记录的另一个名称 )
– PTR : IPv4/IPv6 地址至名称
– MX : 用于名称的邮件交换器 ( 向何处发送其电子邮件 )
– NS : 域名的名称服务器
– SOA :” 授权起始 “ , DNS 区域的信息 ( 管理信息 )
<2>排错
• 显示来自 DNS 查找的详细信息 , 其中包括为什么查询失败 :
– NOERROR : 查询成功
– NXDOMAIN : DNS 服务器提示不存在这样的名称
– SERVFAIL : DNS 服务器停机或 DNSSEC 响应验证失败
– REFUSED : DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )
dig www.baidu.com 输出的部分内容
• 标题指出关于查询和答案的信息 , 其中包括响应状态和设置的任何特殊标记 ( aa 表示权威答案 , 等等 )
– QUESTION : 提出实际的 DNS 查询
– ANSWER : 响应 ( 如果有 )
– AUTHORITY : 负责域 / 区域的名称服务器
– ADDITIONAL : 提供的其他信息 , 通常是关于名称服务器
– 底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间
缓存 DNS 服务器
BIND 是最广泛使用的开源名称服务器,在 RHEL 中 , 通过 bind 软件包提供防火墙开启端口 53/TCP 和 53/UDP。 BIND 的主配置文件是 /etc/named.conf 。/var/named 目录包含名称服务器所使用的其他数据文件
/etc/named.conf 的语法
• // 或 # 至行末尾是注释 ; /* 与 */ 之间的文本也是注释 ( 可以跨越多行 )
• 指令以分号结束 (;)
• 许多指令认为地址匹配列表放在大括号中、以CIDR 表示法表示的 IP 地址或子网列表中 , 或者命名的 ACL 中 ( 例如 any; [ 所有主机 ] 和none; [ 无主机 ] )。
• 文件以 options 块开始 , 其中包含控制 named如何运作的指令。
• zone 块控制 named 如何查对于其具有权威性的根名称服务器和区域。
一些重要的 options 指令
isten-on 控制 named 侦听的 IPv4 地址
listen-on-v6 控制 named 侦听的 IPv6 地址
allow-query 控制哪些客户端可以向 DNS 服务器询问信息
forwarders 包含 DNS 查询将转发至的名称服务器的列表
( 而不是直接联系外部名称服务器 ; 在设有防火墙的情况中很有用 )
• 所有这些指令会将打括号中以分号分隔的元素视为地址匹配列表 . 如
– listen-on { any; };
– allow-query { 127.0.0.1; 1.0.0.0/8 };
四.dns配置
1.安装部署dns <1>安装 ###安装完成!!! <2>部署 注意:首次启动时应在vm shell里面输入字符,以生成**文件(提前打开vm图形) vim /etc/named.conf ###进入主配置文件 !目前还不能使用,设定完重启服务即可使用 systemctl restart named 2.高速缓存dns(非权威dns) (此实验在真机操作)
DNS的解析过程:
1.DNS在解析域名的时候,客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
2.当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
3.如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器, 然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。(使用此forwarders )
4.本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存, 如果没有该纪录,则返回相关的下级的域名服务器的地址。
5.重复第四步,直到找到正确的纪录。
6.本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
保证真机联网
vim /etc/named.conf11 listen-on port 53 { any; }; ##开放回环接口在网络中
17 allow-query { any; }; ##允许所有人连接
18 forwarders {172.25.254.50;};##访问指向-主机
systemctl restart named
dig www.baidu.com
注意此时搜索www.bai.com所用时间为12ms
再次搜索时间为3ms,首次搜索www.baidu.com已经保存在本机中,所以时间减少。
3.权威dns的正向解析(给定域名访问ip)
vim /etc/named.rfc1912.zones ###修改dns子配置文件
25 zone "wrh.com" IN {
26 type master; ###dns类型:权威
27 file "wrh.com.zone"; ###解析内容保存到此文件
28 allow-update { none; }; ###禁止任何人远程修改
29 };
cd /var/named
cp -p named.localhost wrh.com.zone ###建立wrh.com.zone
vim wrh.com.zone
$TTL 1D ###表示保存时长为1天
@ IN SOA dns.wrh.com. root.wrh.com. ( ###@表示.wrh.com
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.wrh.com. ###服务器名称
dns A 172.25.254.150 ###A ipv4 dns第一个
www A 172.25.254.150
systemctl restart named
测试:
dig www.wrh .com
4.权威dns的反向解析(给定ip告诉域名)
vim /etc/named.rfc1912.zones ###修改dns子配置文件
zone "254.25.172.in-addr.arpa" IN {
type master;
file "wrh.com.ptr";
allow-update { none; };
};
cd /var/named
cp -p named.localhost wrh.com.ptr ###建立wrh.com.ptr
vim wrh.com.ptr
$TTL 1D
@ IN SOA dns.wrh.com. root.wrh.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.wrh.com.
dns A 172.25.254.150
150 PTR www.wrh.com.
systemctl restart named
测试:dig -x 172.25.254.150
5.dns的双向解析(不同的客户访问不同主机)
在企业中,会有内部网与外网之分,若企业人员也使用外网进行工作,工作效率降低。故此实现dns的双向解析。
vim /etc/named.conf
49 view localnet { 50 match-clients { 172.25.254.150; }; ##172.25.254.150ip的人员登陆进去显示的是/etc/named.rfc1912.zone 51 zone "." IN { 52 type hint; 53 file "named.ca"; 54 }; 55 56 include "/etc/named.rfc1912.zones"; 57 include "/etc/named.root.key"; 58 };
cp -p /etc/named.rfc1912.zone /etc/named.rfc1912.zones.inter
vim /etc/named.rfc1912.zones.inter
24 zone "wrh.com" IN { 25 type master; 26 file "wrh.com.inter"; 27 allow-update { none; }; 28 };cd /var/named
cp -p wrh.com.zone wrh.com.inter
vim wrh.com.inter
1 $TTL 1D 2 @ IN SOA dns.wrh.com. root.wrh.com. ( 3 0 ; serial 4 1D ; refresh 5 1H ; retry 6 1W ; expire 7 3H ) ; minimum 8 NS dns.wrh.com. 9 dns A 172.25.254.150 10 www A 1.1.1.222 #测试:dig www.wrh.com的answer 的是ip是1.1.1.2226.dns的域名规范配置
域名规范的意思就是原来设定是@是wrh.com,或许自己想要一个别的模块,在这个基础上,进行名称的修正。
直接在wrh.com.zone进行编写信息。(重启named服务) cd /var/named vim wrh.com.zone7.dns的邮箱配置
直接在wrh.com.zone进行编写信息
cd /var/named vim wrh.com.zone
###MX 1 邮箱配置标签
重启服务测试:
8.主从dns
主dns服务器:
上一个双向解析实验在主dns上完成的,所以以下实验均在外网的配置文件中实现。
vim /etc/named.rfc1912.zones.inter
24 zone "wrh.com" IN { 25 type master; 26 file "wrh.com.inter"; 27 allow-update { none; }; 28 also-notify {172.25.254.5;}; ##5为从属dns服务器。 29 };1、配置yum源
2、yum install bind -y
3、systemctl stop firewalld
4、systemctl disable firewalld
5、systemctl start named
6、systemctl enable named
安装部署好dns后
vim /etc/named.conf
vim /etc/named.rfc1912.zones
25 zone "wrh.com" IN { 26 type slave; ###类型为从属dns 27 masters {172.25.254.150;}; ###主dns的ip 28 file "slavec/wrh.com.inter";
###文件为172.25.254.150的wrh.com.inter
29 allow-update { none; }; ###禁止任何人更新
30 };
测试:
主dns上:
从属dns上:
9.dns的远程更新
<1>基于ip的远程更新 注意:在进行以下实验时,提前将主dns上的文件wrh.com.inter备份, 因为在进行以下实验时,若在主dns上将服务重启后,改文件会进行相应的改变, 为了方便下次实验的进行,最好将该文件复制一份,在复制时,注意加上-p 在主dns上: vim /etc/named.rfc1912.zones.inter 重启服务systemctl restart named ##给/var/named加权限使得从属dns可以写入 在从属dns上: 在主dns上重启服务后: wrh.com.inter文件变为:
<2>基于key的远程更新远程更新的ip是可以被别的主机进行冒充,会造成不安全的行为所以在此制作一个key,
将公钥与私钥传给需要远程更新的主机。
cp -p /etc/rndc.key /etc/wrh.key
dnssec-****** -a HMAC-MD5 -b 128 -n HOST wrh
编辑配置文件:vim /etc/named.conf
将所建成的公钥私钥传给远程更新的主机后重启服务:
测试:
在远程更新的主机上:
10.动态ip的远程更新(动态解析ddns)
前面我们做的都是在静态网络做的域名解析,那么问题来了,使用最多还是动态网络,如果遇到动态网络,如何在第一时间对其进行解析。
这里要提到一个服务器ddns服务器。
百度百科解释:动态域名解析服务,是将用户的动态IP地址映射到一个固定的域名解析服务上,
用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,
服务程序负责提供DNS服务并实现动态域名解析。
就是说DDNS捕获用户每次变化的IP地址,然后将其与域名相对应,
这样域名就可以始终解析到非固定IP的服务器上,互联网用户通过本地的域名服务器获得网站域名的IP地址,
从而可以访问网站的服务。
示意图:理解:dhcp服务进行更换的时候,同时给两个地方(wrh.com.zone和查询方)发送要更改的ip,进行对应,快速查询。
注意:在做这个实验之前,将前面实验更新的文件删除,再将备份的wrh.com.zone复制回来。
<1>server 端安装dncp服务
<2>制作dhcp配置文件并配置(进入dhcp配置文件,先将36之后全部删掉)(修改完毕后,重启dhcpd服务)
^根据模板创建配置文件!
编辑配置文件-->
^域名为wrh.com
^dns为172.25.254.150
^第一行子网掩码
^第二行所能分配的ip范围
^第三行为网关172.25.254.150
此时可以进行ip的动态获取
^此时要远程更新的钥匙不用传给对应的主机了,在dns服务器上是知道此ip与钥匙的
此时打开另一台虚拟机,将ip的配置文件改为dhcp动态获取模式,
并且关闭除了dns服务器之外其他所有的dhcp服务,
以免造成干扰,然后在这台虚拟机上重启网络服务。
^设置ip的动态获取方式
在虚拟机测试:
^动态监控