作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
Linux进阶部分又分了很多小的部分,我们刚讲完了Linux日常运维。讲的那些东西都算是系统自带的,但是Linux作为一个服务器操作系统,肯定是要安装运行软件来满足我们的业务需要,本章基础软件部分,将从下面几个部分来讲解:
Linux基础软件-软件安装
Linux基础软件-yum(一)
Linux基础软件-yum(二)
Linux基础软件-ntp
Linux基础软件-chrony
Linux基础软件-dns(一)(本章节)
Linux基础软件-dns(二)
Linux基础软件-nfs
Linux基础软件-lvm
Linux基础软件-Selinux&库文件&swap
在讲Linux运维-主机名&hosts的时候,我们说过,通过hosts是可以跳过dns解析的,那什么是dns,为什么要有dns呢?本小节主要就是讲解dns相关内容。
什么是dns
DNS,全称是“Domain Name System”或者叫“域名系统”,是互联网的一种服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP数串。
为什么要有dns
在互联网上,每个接入网络的设备都会被分配一个唯一的IP地址,你可以把它理解为互联网上的电话号码。当你想访问一个网站时,你的电脑实际上是向该网站服务器的IP地址发送请求。然而,IP地址是一串数字,对人类来说记忆起来相对困难。这时候,DNS就派上了用场,它的作用就是将这串数字的IP地址转换成更易于记忆的域名,比如Linux自带的默认情况下localhost就代表本机IP地址。
例如,当你在浏览器中输入www.qq.com时,你的计算机会首先询问DNS服务器www.qq.com的IP地址,然后DNS服务器会返回对应的IP地址给你的计算机,之后你的计算机才能通过该IP地址去访问qq.com服务器。这个过程被称为DNS解析。
Linux解析流程
1.用户请求
用户在应用程序(比如浏览器、命令行等)中输入域名,例如 www.example.com。
2.查找本地缓存:
但是这个缓存,默认情况下是看不到的。我通过抓包测试连续两次dns查询,也都是需要向dns发出请求的。所以我对这个缓存其实一直都是存疑的,但是实际运维中也确实遇到过解析异常的情况。
3.查询/etc/hosts文件:
如果在本地缓存中找不到对应的IP地址,系统会检查 /etc/hosts 文件,这个文件可以手动配置域名和IP地址的映射关系。如果在这里找到了,也会直接返回IP地址给应用程序。
4.向DNS解析器发起查询:
如果本地缓存和 /etc/hosts 文件中都没有找到对应的IP地址,系统会向预先配置的DNS解析器发起查询请求。DNS解析器通常在 /etc/resolv.conf 文件中指定,例如:
nameserver 223.5.5.5
nameserver 114.144.144.114
这里的233.5.5.5 和114.114.114.114 则是国内提供的公共dns,可以替换为其他DNS服务器的IP地址。
5.DNS解析器查询过程:
这里的dns服务器可以分为迭代和递归两种:
-
迭代查询:在迭代查询中,当客户端向DNS服务器查询时,如果该服务器没有存储查询的信息,它会将能够提供信息的其他服务器的地址返回给客户端,让客户端去那个服务器查找。也就是说,DNS服务器不会自己去查询,而是告诉客户端应该去哪里查找。
-
递归查询:在递归查询中,当客户端向DNS服务器查询时,如果该服务器没有存储查询的信息,它会代表客户端去其他服务器查询,直到找到答案才返回给客户端。在这个过程中,客户端只需要等待最终结果,所有的查询工作都由DNS服务器完成。
总结下来其实很简单,迭代自己没有答案,但是他会告诉你哪里有答案。递归他帮你去找到答案,然后告诉你答案。目前大部分dns都是递归。
6.解析结果返回:
DNS解析器将获取到的IP地址返回给系统的resolver,并且缓存这个结果。同时,将IP地址返回给应用程序,应用程序可以继续向该IP地址发送网络请求。
7.应用程序通信:
应用程序拿到IP地址后,可以与目标服务器建立通信,发送HTTP请求等操作。
Linux的dns配置文件
前面讲过linux的dns配置文件是/etc/resolv.conf,他除了配置了dns服务器,还有其他配置,分别是什么意思,如果遇到解析失败他怎么办?
nameserver :就是dns服务器地址,最多可以写3个。
search:搜索域,一般环境用不到,但是在k8s里面会搜索svc的时候会用到这个特性。大概意思就是你查询一个域名,如果没查到解析,他再给你添加个后缀,再进行查询。
options:
timeout 如果在设定时间未返回数据,则他会请求下一个dns服务器查询。
attempts: 如果所有dns都查询了都失败了,他在重复这个操作的次数。
如果你的dns解析很慢,可以注意看这2个参数。
总结
1.Linux的dns是一个很核心的基础服务,几乎所有的业务请求都是通过域名来实现,这样所有的请求都会通过dns才能正常使用。
2.有的程序并不会使用系统dns逻辑,而是程序自带的dns逻辑,这样就可能导致业务和实际预期不一样的情况。
关注微信公众号《运维小路》获取更多内容。