六、DNS服务器
1、简介
DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式 数据库,能够使人更方便的访问互联网。 DNS系统使用的是网络的查询,那么自然需要有监听的port。DNS使用的是53端口。
域名可分为三大类:
- 国家顶级域名
- 通用顶级域名
- 基础结构域名
域名服务器的类型划分:
- 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所 有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域 名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服 务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多 情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一 步应当找哪一个顶级域名服务器进行查询。
- 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
- 权限域名服务器:负责一个“区”的域名服务器。
- 本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当 一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。
- 主从DNS服务器:为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器 来保存,其中的一个就是主DNS服务器(Master name server),负责解析至少一个域。其他的 是辅助(从)DNS服务器(Slave name server):负责解析至少一个域,是主DNS服务器的辅 助。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器 定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据 的一致性。
- 缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。
域名解析过程:
- 当用户在浏览器输入输入一个域名,操作系统会先检查自己本地的hosts文件是否有这个网 址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系, 如果有,直接返回,完成域名解析。
- 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的 首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包 含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
- 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则 调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设 置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收 到请求后会判断这个域名(例如顶级域.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。 本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果 自己无法解析,它就会找一个管理二级域的DNS服务器地址给本地DNS服务器。当本地DNS服务 器收到这个地址后,就会找管理该二级域的服务器,重复上面的动作,进行查询,直至找到对应主机。(递归)
- 如果用的是转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器 进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后 把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。(迭代)
2、服务器配置
提供DNS服务的软件叫bind,服务名是named。
安装
yum install bind -y
#相关文件
/etc/named.conf # bind主配置文件
/var/named/slaves # 从dns服务器文件夹
主配置文件
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";secroots-file "/var/named/data/named.secroots";recursing-file "/var/named/data/named.recursing";allow-query { localhost; }; #只允许本地主机进行查询recursion yes;dnssec-validation yes;managed-keys-directory "/var/named/dynamic";geoip-directory "/usr/share/GeoIP";pid-file "/run/named/named.pid";session-keyfile "/run/named/session.key";/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */include "/etc/crypto-policies/back-ends/bind.config";
};logging {channel default_debug {file "data/named.run";severity dynamic;};
};
#定义区域开始
zone "." IN {type hint;file "named.ca";
};
#定义区域结束
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
配置DNS正向解析
修改主配置文件
[root@server ~]# vim /etc/named.conf
#修改内容
listen-on port 53 { any; }; #监听对象IPV4地址
directory "/var/named"; #数据文件主要路径
#文件中添加正向域
zone "openlab.com" IN {type master; #主服务器,可以添加备服务器。备服务器将可以同步主服务器的资源记录文件file "openlab"; #资源记录文件名,在数据文件主要路径下
};
#添加正向资源记录文件
[root@server ~]# vim /var/named/openlab
#文件内容:
$TTL 1D ;;将TTL值统一设置为1天
@ IN SOA openlab.com. admin.admin.com ( 20240116001M1M3M1D )IN NS dns.openlab.com.
dns IN A 192.168.5.100
www IN A 192.168.5.111
资源记录类型:
类型 | 解释 |
---|---|
A | 通过域名能够查询到对应ipv4地址 |
AAAA | 通过域名能够查询到对应ipv6地址 |
CNAME | 别名资源记录 |
PTR | 指针记录Ipv4/ipv6 查询到一个域名(反向解析) |
NS | dns解析记录类型(标记本地dns服务器的主机名),管理这个域名的服务器主机名字,即由哪一台主机去解析当 前所定义的域主机 |
MX | 邮件解析记录类型(标记邮件服务器的主机名,即接收邮件的服务器主机名字) |
SOA | 起始授权记录,管理这个域名的七个重要参数。对主备服务器同步有重要作用 |
起始授权记录数据格式:
masterdns TTL INTER 资源记录类型 数据 邮箱地址 (版本 检查时间 重试时间 失效时间 ttl)
注意:SOA资源记录类型和NA的域名要加上根域。
测试
#重启服务
[root@server ~]# systemctl restart named.service
#使用nslookup测试
[root@server ~]# nslookup
> server 192.168.5.100 #指定本次解析使用的DNS服务器
Default server: 192.168.5.100
Address: 192.168.5.100#53
> www.openlab.com
Server: 192.168.5.100
Address: 192.168.5.100#53Name: www.openlab.com
Address: 192.168.5.111
> dns.openlab.com
Server: 192.168.5.100
Address: 192.168.5.100#53Name: dns.openlab.com
Address: 192.168.5.100
配置DNS反向解析
修改主配置文件
#添加反向域
zone "5.168.192.in-addr.arpa" IN {type master;file "openlab_re";
};
#添加反向资源记录文件
[root@server ~]# vim /var/named/openlab_re
#文件内容
$TTL 1D ;;将TTL值统一设置为1天
@ IN SOA openlab.com. admin.admin.com ( 20240116001M1M3M1D )IN NS dns.openlab.com.
100 IN PTR dns.openlab.com
111 IN PTR www.openlab.com
测试
#重启服务
[root@server ~]# systemctl restart named.service
#测试
[root@server ~]# nslookup
> server 192.168.5.100
Default server: 192.168.5.100
Address: 192.168.5.100#53
> 192.168.5.111
111.5.168.192.in-addr.arpa name = www.openlab.com.5.168.192.in-addr.arpa.
> 192.168.5.100
100.5.168.192.in-addr.arpa name = dns.openlab.com.5.168.192.in-addr.arpa.
配置主备服务器
修改主服务器主配置文件
[root@server ~]# vim /etc/named.conf
#添加
allow-transfer { 192.168.5.200; }; #默认不存在;允许向那个服务器同步资源信息
备服务器
#主配置文件
options {listen-on port 53 { any; };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";secroots-file "/var/named/data/named.secroots";recursing-file "/var/named/data/named.recursing";allow-query { any; };recursion yes;dnssec-validation yes;managed-keys-directory "/var/named/dynamic";geoip-directory "/usr/share/GeoIP";pid-file "/run/named/named.pid";session-keyfile "/run/named/session.key";/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */include "/etc/crypto-policies/back-ends/bind.config";
};logging {channel default_debug {file "data/named.run";severity dynamic;};
};zone "." IN {type hint;file "named.ca";
};zone "openlab.com" IN {type slave; #服务器类型,从服务器file "named.openlab"; #同步过来后的资源记录文件名masters { 192.168.5.100; }; #主服务器IP地址
};zone "5.168.192.in-addr.arpa" IN {type slave;file "named.openlab_re";masters { 192.168.5.100; };
};include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
测试
#重启服务
[root@client ~]# systemctl restart named.service
#查看文件
[root@client ~]# ll /var/named
总用量 24
drwxrwx---. 2 named named 23 11月 25 11:33 data
drwxrwx---. 2 named named 60 11月 25 11:34 dynamic
-rw-r-----. 1 root named 2112 9月 5 22:12 named.ca
-rw-r-----. 1 root named 152 9月 5 22:12 named.empty
-rw-r-----. 1 root named 152 9月 5 22:12 named.localhost
-rw-r-----. 1 root named 168 9月 5 22:12 named.loopback
-rw-r--r--. 1 named named 259 11月 25 11:33 named.openlab
-rw-r--r--. 1 named named 386 11月 25 11:38 named.openlab_re
drwxrwx---. 2 named named 6 9月 5 22:12 slaves
#出现了资源记录文件,但不能查看(密文)
#测试
[root@client ~]# nslookup
> server 192.168.5.200
Default server: 192.168.5.200
Address: 192.168.5.200#53
> www.openlab.com
Server: 192.168.5.200
Address: 192.168.5.200#53Name: www.openlab.com
Address: 192.168.5.111
> dns.openlab.com
Server: 192.168.5.200
Address: 192.168.5.200#53Name: dns.openlab.com
Address: 192.168.5.100
> 192.168.5.100
100.5.168.192.in-addr.arpa name = dns.openlab.com.5.168.192.in-addr.arpa.
> 192.168.5.111
111.5.168.192.in-addr.arpa name = www.openlab.com.5.168.192.in-addr.arpa.
#测试成功
补充:第一次同步(完全区域传送,复制整个区域文件)后,后续的同步(增量区域传送,仅复制区域里变化的文件 )将由主服务器中的SOA中的版本检查时间来决定是否同步。(版本检查时间变更(变大)就代表资源记录文件变更,将会进行同步)