DNS服务

不飞则已,一飞冲天;不鸣则已,一鸣惊人。这篇文章主要讲述DNS服务相关的知识,希望能为你提供帮助。
我们在工作中,更多的是,关注linux操作系统上的 服务。
企业中应用非常普遍的 DNS 服务
名字解析介绍和DNS
当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记 忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。那么如何解决这 一难题呢?我们可以给每个网络设备起一个友好的名称,如:www.baidu.com,这种由文字组成的名 称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称 转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要 功能,利用名称解析服务可以实现主机和IP的解耦,即:当主机IP变化时,只需要修改名称服务即可, 用户仍可以通过原有的名称进行访问而不受影响。
另外,虚拟化的技术,ip都是自动获取的不是固定的。不是固定的我怎么去访问呢?
实现此服务的方法是多样的。如下面所述:
本地名称解析配置文件:hosts

Linux: /etc/hosts
windows: %WINDIR%/system32/drivers/etc/hosts
#格式
93.46.8.89www.google.com.




在我们的系统中已经配置了dns

DNS服务器帮我们 把 域名解析成 ip 了。
在没有DNS 服务器的情况下
我们本机使用 hosts文件也可以做本地的域名解析。


一个ip是可以当多个域名的。

/etc/hosts文件的优先级比 DNS 高

一个域名,对应多个ip
只有一个起效果,谁在前边用谁的ip


如果你真的想实现,DNS的优先级比 hosts文件的优先级高。
我们需要修改一下 /etc/nsswitch.conf 文件
这个文件可以干预 DNS和hosts文件的优先级





files和dns 换换位置就可以了。

ubutun 需要重启才能生效??? ubuntu不能生效。优先级很少修改。
【DNS服务】

centos中也有这个配置文件









hosts文件 是很危险的。
hosts文件 域名   ip   对应关系 被黑客攻击的话, 可能会有黑客的钓鱼网站,比如出现假的银行登录页面。
hosts文件只适合 小区域,测试用。


我们需要一个集中的 名称服务器,来做域名解析DNS
这就不需要 维护hosts文件了。
这是最简单的解决方案。
互联网上有几亿几十亿的数据。全世界人民上网。都需要DNS服务。
全集中方式管理也有问题。
DNS 用分布式数据库。
BIND:Bekerley Internet Name Domain,由 ISC (www.isc.org)提供的DNS软件实现DNS域名结构





www   study   这已经不是域名了,算是一个主机名。


域名结构和dns有啥关系呢?





www.sz.magedu.com     (sz是一个dns服务器,就写dns ip )
www.magedu.com   (www是一个主机,就写主机ip )
互联网中有大量的DNS 服务器,分布式服务器
不同的DNS服务器解析DNS, 减少了负载。


谷歌的DNS服务, 谷歌自己来管理。
分布式管理会产生新的问题。
DNS 太多了。
我要访问 www.magedu.com
我怎么知道 这个域名在那台域名服务器呢?
DNS 服务器很多,哪台是权威DNS 服务
怎么找。


PC 会配一个权威的DNS 服务器。 
比如电信自动给你 一个 电信自己搭的DNS 服务器。比如你们小区的DNS
DNS 给你找, 他先去 根域名服务器。
根域名服务器给你 com的域名服务器ip
再去找,com的域名服务器ip,com的域名服务器ip给你 magedu.com 的服务器ip
最后去找  magedu.com 的服务器ip ,magedu.com 的服务器ip给你www.magedu.com的ip


我们就拿着 www.magedu.com的ip去访问服务。


难道每次都去全世界找 www.magedu.com的ip吗?
小区的域名服务器,会有缓存,缓存www.magedu.com的ip
有了缓存,会减少dns解析的时长。
缓存是有有效期的。
根域名服务器是一个很关键的服务器。
根域名服务器如果挂了的话,全世界网就瘫痪了。
根服务器,有13台机器。
根域战略地位很重要。
2004年4月由于顶级域名.ly瘫痪,导致利比亚从互联网消失了3天
DNS 服务工作原理。



上级域名服务器存储的是 下级域名服务器对应的ip
根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
一级域名:Top Level Domain: tld
三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域 com, edu, mil, gov, net, org, int,arpa 
二级域名:magedu.com
三级域名:study.magedu.com
最多可达到127级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配 机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管 理、以及根服务器系统的管理


雪人计划
在与现有IPv4根服务器体系架构充分兼容基础上,"雪人计划"于2016年在美国、日本、印度、俄罗斯、德 国、法国等全球16个国家完成25台IPv6根服务器架设,其中1台主根和3台辅根部署在中国,事实上形成了13 台原有根加25台IPv6根的新格局
DNS查询类型
递归查询:一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,
若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结
果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询


迭代查询:一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对
方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起
进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需
要发起多次查询


根域是 国家安全问题。
IPV6 , 在中国是有保障的。
互联网上ipv6的越来越多了。
名称服务器
Name Server,域内负责解析本域内的名称的DNS服务器 IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器,美国10个,荷兰1,瑞典1,日本1 IPv6的根名称服务器:全球共25个,中国1主3从,美国1主2从
解析类型
FQDN --> IP 正向解析
IP --> FQDN 反向解析
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树
完整的查询请求经过的流程
Client --> hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递
归) --> DNS Server Cache --> DNS iteration(迭代) --> 根--> 顶级域名DNS--> 二级域名DNS…


小区的DNS 不稳定
小区停电了。DNS停了
来电了之后,DNS没有恢复
qq能登录,能通信
网站打不开
改一下域名服务器,改成百度的DNS


建一个新记录
blog.wangxiaochun.com

互联网上配置DNS, 非常快。
DNS 只管解析成不成功,至于网络通不通,提示不管的。


在互联网上,配置DNS太简单。
在企业内部,需要你自己 搭建 私有DNS 服务。

DNS 服务相关概念和技术公司内部的 域名以 org结尾。
最好和互联网上给错开。


不同的项目,会有多个DNS 服务器。
传统业务有传统业务的DNS 服务
k8s 有k8s 的 DNS 服务器


DNS 软件有很多软件。
DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns
我们来了解下   bind


bind 的一系列软件包
bind:服务器
bind-libs:相关库
bind-utils: 客户端
bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/

安装bind软件







配置文件   named.conf
dns 存放的是主机和ip的对应关系。那这些对应关系的数据放在哪里呢?放在了 /var/named中

在安装 bind的时候,会自动创建一个 用户



这个账号是 什么时候创建的?


我们查一下这个包在安装的时候,是不是有什么脚本在运行?








装这个包的时候,就把用户名给创建好了。



named   /bin/false   是给服务用的

在启动前,我们确定下,已经在使用的端口。
DNS 的默认端口号是多少?




dns的 服务名其实是 domain


会用一个tcp的53, 一个udp的53
dns其实 服务名字叫   named.service

现在还没有启动, 而且没有设置为开机启动。

设为开机启动,并立即启动

启动之后,我们看一下,端口是否打开。



服务已经启动了。
现在这台centos8 机器已经有域名服务了,是域名服务器了。我还有必要将域名DNS 配置成别人吗?
我自己就是域名服务器何必舍近求远?



我就改成自己。




让这个网卡配置生效。
现在指向自己,就是启动了dns服务,啥也没有配置。
我centos8 的电脑访问百度,行吗?

可行的,那说明什么,说明我们可以自己利用自己的DNS 服务 找到互联网的域名的。
我们的dns真的去找根了。
我怎么知道哪个是根呢?
每个DNS 服务 天生知道根域名服务器。
在安装DNS 服务器的时候。把根服务器的地址都写进去了。
写到/var/named/named.ca 文件中了




整个互联网的根域名服务器。
;;开头的是注释。
. 是根域名服务器。
a---m 13个域名服务
还有13个ipv6
虽然中国在25个 ipv6 根域名中有一个
但是,dns软件中 只写了13个,并没有中国的根域名服务器。
我们可以自己添加。
这些根服务器基本都在美国。10个在美国2个在欧洲,1个在日本。



到现在为止,我们什么都没干,连配置文件都没有写。
我们自己就可以上网了。


在公司内部,我们其他机器也想利用你,来利用你来上网。
能不能实现?
找一台 centos7, 把网卡 dns改成 自己公司的dns服务器(刚才那台 centos8)

改成10.0.0.8

让网卡配置生效。发现DNS 解析服务器已经指向了10.0.0.8

发现ping不通。
域名解析服务失败了。为什么呢?

ping命令不专业
我们用专业的dns测试工具(bind-utils工具)。来探测dns哪里出现了问题。





说明当前的dns服务器链接失败了。
说明centos8的服务出了问题。



显然不是网络的问题,使我们 dns服务的问题。为什么连不上呢?

因为centos8 DNS 的53端口是 127.0.0.1的 53 端口
端口绑定的ip有问题。127.0.0.1只能自己访问自己
修改配置文件 /etc/named.conf 文件




dns服务默认是不允许其他机器访问的





配置文件修改完毕,需要重启dns
传统的重启 使用 systemctl ...
这会造成正在使用 dns的用户,出现访问异常。
bind中自带了一个 命令可以重新加载配置文件。 rndc   reload 命令, 重新加载配置文件。而不用重启服务。
查看进程 

named进程




我们再看,端口绑定的ip已经变了。
我们在 客户端上 10.0.0.7   centos7机器上,再探测一下。

这次失败和之前的失败发生了不一样的结果。
显示拒绝访问。
权限问题。

localhost 和 平时所说的localhost不是一个概念
这个localhost代表你当前机器上的所有ip,包括127.0.0.1
更简便的方式是把这一行注释掉。




这里的 localhost 是指允许所有的本机ip访问,不允许外部机器访问。

改成any 或者注释掉,都代表所有机器都可访问。

改变配置使其生效。




www.a.shifen.com 是 www.baidu.com 的别名,和cdn加速有关。
大网站有别名
小网站一般没有别名。


指定dns服务来解析   域名         flags:   qr aa   rd     aa 代表解析域名的就是权威服务器。




非权威服务器
到此为止,我们自己搭了一个dns服务器,企业内部可以通过这个dns服务器进行 互联网的域名解析了。单纯为了上网。





我们企业内部,搭建 dns 是为了企业内部的 域名解析。


DNS 清除缓存 
rndcflush

到此DNS 初步介绍完毕





我们生产中,真正需要的功能是,在公司内部实现,一个内部网络的dns解析。
企业内部服务器 名称解析。
把名名称解析成 ip   正向解析:
我们规划一下:



zone   "."   IN
file   "named.ca"

dns要设置所谓的区域。英文单词zone     你要访问 根,你从named.ca 中访问就行
以此类推,我们可以自己写一个区域:

你要访问magedu.org   你从 magedu.org.zone 文件中访问。
我们可以把自己写的区域放到一个独立的文件中。

这个文件,是专门放我们的 自定义的区域的。我们把上面的zone写到这个文件中就可以了。

在此文件中添加以下内容



magedu.org.zone 记录了域名和ip的对应关系。





magedu.org.zone 文件将来放在   /var/named 目录下。
magedu.org.zone 的文件格式写法是相当麻烦的。我们拷贝其他类似的文件,拷贝的时候
注意权限也要拷贝过来。


各种资源记录


@ 当前区域对应的区域的域名   之前写的一个文件   zone “magedu.org”   @就代表   magedu.org
资源记录定义的
name [TTL] IN rr_type value

master   A   10.0.0.8 这条记录的作用就是把 master.magedu.org.解析成 10.0.0.8
master.magedu.org. 最后的点一定要加上
你也可以这样写 由于master后面没有. 所以会自动补充,变成 master.magedu.org.

rname.invalid. 是让你写一个邮箱,将来域名解析出错的时候,会联系你。

由于@ 是有特殊含义的   所以 admin@magedu.org.   写成   admin.magedu.org.
0   ; serial   记录当前数据库的版本,有多少次更新,这个数字一旦更新了这个文件的话, 要手动对这个数据+1,因为系统看到你这个版本号变了,才认为你变了。
1D ;refresh   刷新间隔 1天,我们在生成中,不可能只有一个dns服务器。 为了容错,我们至少搭建两个dns服务器。主从备份。也可以设置两个备用 1主 2从,主从服务器之间要数据同步,一种是推,一种是拉, 推的话,什么作为推送时机,推的发送条件是 数据变了。 从节点的数据的只读的。 主节点是读写的。可读可写。从节点根据时间定期拉去进行数据同步。
1H ;retry   如果refresh失败了,   1小时 重试一次。
1W   ; expire 过期时间,同步数据总是失败,1周以后,认为从节点的数据长期和主服务器不能从不,因此就将其记录过期掉。
3H )   ; 不存在的记录,我们直接缓存下来。缓存下来得没有的记录,也有有效期,有效期默认3小时。
SOA记录是整个数据库中,的唯一个soa类型的记录 也是第一个 记录。


NS 记录:Name Server,专用于标明当前区域的DNS服务器

上面有 三台 DNS 服务器
一台master   2台slave
到目前为止,我们有三种记录了。
SOA记录
NS 记录
配套使用的 A 记录
假设我们公司内部有一个 web服务器 www机器。 ip为 10.0.0.100
db服务
k8snode1 服务

这样就行了,我们把他保存起来。


dns服务重新加载一下文件
rndcreload

测试一下。


已经解析成功了。


我们已经实现了简单的 内网的dns 解析服务。


文件格式,语法检查:检查写的文件是否符合规则。


named-checkzone   域名   数据库文件

如果你直接写域名,请一定要主要,要以.结尾,不

    推荐阅读