目录
-
- 一、DNS简介
- 二、安装DNS
一、DNS简介
域名系统(DNS)是一个分层的分布式数据库。它存储用于将Internet主机名映射到IP地址(反之亦然)的信息、邮件路由信息以及Internet应用程序使用的其他数据。
客户端通过调用解析器库在DNS中查找信息,解析器库向一个或多个名称服务器发送查询并解释响应。BIND 9软件发行版包含一个名称服务器,named和一个名为liblwres的解析器库。
1、域名的系统结构
域名分为根域、顶级域、二级域、三级域和主机名这5类。
一般格式为“主机名.三级域.二级域.顶级域.”,后面这个点表示根域,在浏览器下不用输入。
2、域名服务器的分类
域名服务器可分为主域名服务器,辅助域名服务器,缓存域名服务器和转发服务器。
3、dns域名解析的过程
第一步:本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。
第二步:如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果,windows中可以通过配置C:WindowsSystem32driversetchosts文件来设置,Linux中可以通过/etc/hosts文件来设置。
第三步:前两个过程无法解析时,就要用到我们网络配置中的"DNS服务器地址"了。操作系统会把这个域名发送给这个本地DNS服务器。每个完整的内网通常都会配置本地DNS服务器,例如用户是在学校或工作单位接入互联网,那么用户的本地DNS服务器肯定在学校或工作单位里面。它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。大约80%的域名解析到这里就结束了,后续的DNS迭代和递归也是由本地DNS服务器负责。
第四步:如果本地DNS服务器仍然没有命中,就直接到根DNS服务器请求解析。
第五步: 根DNS服务器返回给本地DNS域名服务器一个顶级DNS服务器地址,它是国际顶级域名服务器,如.com、.cn、.org等
第六步:顶级域名服务器会返回一个二级域名服务器的地址,例如baidu。
第六步:二级域名找到了主机名的地址,就会返回给本地域名服务器,并且缓存下来。
递归和迭代查询的示意图:
4、资源记录
资源记录即添加到区域文件的记录,资源记录有许多类型,每一种类型的功能各不相同。
A 表示 Address,A记录就是地址记录,是域名到ipv4地址的映射信息。
AAAA也是地址记录,是域名到ipv6地址的映射信息。
PTR记录与A记录相反,是ip地址到域名的映射信息。
SOA记录意为起始7授权记录,用于声明DNS服务器是DNS域中数据表的信息来源,是主机的管理者。
NS记录是名称服务。用于记录表明区域权威DNS服务器,即在NS记录中指定的服务器会被其他服务器当作权威的来源,并能应答。
CNAME记录用于为特定FQDN创建别名,为多台主机提供相同的别名。
MX记录指向一个邮件服务器,用于指定邮件交换服务器。
二、安装DNS
[root@control ~]# dnf install bind bind-utils -y
配置文件解析
[root@kittod ~]# cat /etc/named.conf options { /* 监听方式,服务监听指定ip的53号端口 服务器可能有多张网卡,any表示所有网卡监听53端口的DNS解析请求 todo 可以个实验:1、ip指定为本机ip。2、ip指定为同网段随便的ip */ listen-on port 53 { 127.0.0.1; any;}; /**/ /*数据文件目录*/ directory "/var/named"; /*DNS缓存位置*/ 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"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; /* 允许哪些client来查询dns服务,默认是localhost。 any表示所有人都能进行dns查询 */ allow-query { localhost;any; }; /*是否递归*/ recursion yes; /*DNS安全扩展机制,默认开启,直接关闭即可*/ dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; /*之所以全部DNS服务器都知道根域名服务器的位置,就是下面的配置在生效*/ zone "." IN { type hint; file "named.ca"; }; /*子配置文件*/ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
区域配置文件模板
cat /etc/named.rfc1912.zones
域类型的几种取值:
hint:若本地找不到相关解析,可查询根域名服务器
master:定义权威域名服务器
slave:定义辅助域名服务器
forward:定义转发域名服务器
dns正向解析实验
[root@control ~]# vim /etc/resolv.conf 可以设置dns
[root@control ~]# vim /etc/named.conf listen-on port 53 { localhost; }; 修改为本机ip地址 allow-query { any; }; 允许哪个主机可以过来查询,同时还可以帮你查询他不知道的域名 zone "xiaogang.com" IN{ type master; file "named.xiaogang.com"; 写一个区域文件 }; [root@control ~]# vim /var/named/named.xiaogang.com 可以cp -p 复制named.localhost这个文件的模板 $TTL 1D 域名解析记录在DNS服务器中的存留时间 @ IN SOA ns1 admin.xiaogang.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns1 ns1 A 192.168.85.133 www CNAME webser webser A 192.168.85.134 webser A 192.168.85.135 两个IP地址对应着这个主机,在一些大公司里可以分担流量 * A 192.168.85.134 *号表示,你的主机名错误但还是给你解析成www的 @ A 192.168.85.134 @表示本机,比如xiaogang.com 例如: [root@control ~]# host www.xiaogang.com www.xiaogang.com is an alias for webser.xiaogang.com. webser.xiaogang.com has address 192.168.85.135 webser.xiaogang.com has address 192.168.85.134 [root@control ~]# host wwwss.xiaogang.com wwwss.xiaogang.com has address 192.168.85.134 [root@control ~]# host xiaogang.com xiaogang.com has address 192.168.85.134
准备两台主机,第一台主机安装好dns服务器的软件。另一台不安装软件,把dns改为第一台的ip地址。
在第二台主机上测试 [root@manged ~]# host www.xiaogang.com www.xiaogang.com is an alias for webser.xiaogang.com. webser.xiaogang.com has address 192.168.85.134 webser.xiaogang.com has address 192.168.85.135 [root@manged ~]# host www.baidu.com www.baidu.com is an alias for www.a.shifen.com. www.a.shifen.com has address 183.2.172.185 www.a.shifen.com has address 183.2.172.42 www.a.shifen.com has IPv6 address 240e:ff:e020:9ae:0:ff:b014:8e8b www.a.shifen.com has IPv6 address 240e:ff:e020:966:0:ff:b042:f296 在本地域名服务器找不到解析时,本地域名服务器会充当转发服务器向根域进行递归和迭代查询
只做转发服务器实验
[root@kittod ~]# cat /etc/named.conf options { listen-on port 53 { 192.168.226.130; }; forward only; forwarders { 114.114.114.114; }; }; [root@kittod ~]# systemctl restart named