linux DNS域名解析

1. 为什么要有DNS?

IP 地址虽然方便了机器的通信,却给访问这些服务的人们,带来了很重的记忆负担。我相信,没几个人能记得住 GitHub 所在的 IP 地址,因为这串字符,对人脑来说并没有什么含义,不符合我们的记忆逻辑。

我们可以通过域名 github.com 访问,而不是必须依靠具体的 IP 地址,这其实正是域名系统 DNS 的由来。

DNS(Domain Name System),即域名系统,是互联网中最基础的一项服务,主要提供域名和 IP 地址之间映射关系的查询服务。

DNS 不仅方便了人们访问不同的互联网服务,更为很多应用提供了,动态服务发现和全局负载均衡(Global Server Load Balance,GSLB)的机制。这样,DNS 就可以选择离用户最近的 IP 来提供服务。即使后端服务的 IP 地址发生变化,用户依然可以用相同域名来访问。

域名与 DNS 解析

域名是全球唯一的,需要通过专门的域名注册商才可以申请注册。为了组织全球互联网中的众多计算机,域名同样用点来分开,形成一个分层的结构。而每个被点分割开的字符串,就构成了域名中的一个层级,并且位置越靠后,层级越高。

我们以 blog.csdn.net 为例,来理解域名的含义。这个字符串中,最后面的 net 是顶级域名,中间的 csdn是二级域名,而最左边的 blog则是三级域名。

注意点(.)是所有域名的根,也就是说所有域名都以点作为后缀,也可以理解为,在域名解析的过程中,所有域名都以点结束。 

域名主要是为了方便让人记住,而 IP 地址是机器间的通信的真正机制。把域名转换为 IP 地址的服务,也就是我们开头提到的,域名解析服务(DNS),而对应的服务器就是域名服务器,网络协议则是 DNS 协议。 

DNS 协议在 TCP/IP 栈中属于应用层,不过实际传输还是基于 UDP 或者 TCP 协议(UDP 居多) ,并且域名服务器一般监听在端口 53 上

既然域名以分层的结构进行管理,相对应的,域名解析其实也是用递归的方式(从顶级开始,以此类推),发送给每个层级的域名服务器,直到得到解析结果。

递归查询的过程并不需要你亲自操作,DNS 服务器会替你完成,你要做的,只是预先配置一个可用的 DNS 服务器就可以了。

通常来说,每级 DNS 服务器,都会有最近解析记录的缓存。当缓存命中时,直接用缓存中的记录应答就可以了。如果缓存过期或者不存在,才需要用刚刚提到的递归方式查询。

所以,系统管理员在配置 Linux 系统的网络时,除了需要配置 IP 地址,还需要给它配置 DNS 服务器,这样它才可以通过域名来访问外部服务。

查询域名服务器配置

/etc/resolv.conf是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。

该文件是由域名解析 器(resolver,一个根据主机名解析IP地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。

 

cat /etc/resolv.conf

# Generated by NetworkManager

search cn-northwest-1.compute.internal

nameserver 172.31.0.2

 

最主要是nameserver关键字,如果没指定nameserver就找不到DNS服务器,其它关键字是可选的。
nameserver表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的,且只有当第一个nameserver没有反应时才查询下面的nameserver,一般不要指定超过3个服务器。

domain声明主机的域名 很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容。

search它的多个参数指明域名查询顺序 当要查询没有域名的主机,主机将在由search声明的域中分别查找。 
domain和search不能共存;如果同时存在,后面出现的将会被使用。

sortlist允许将得到域名结果进行特定的排序 它的参数为网络/掩码对,允许任意的排列顺序。

“search domainname.com”表示当提供了一个不包括完全域名的主机名时,在该主机名后添加domainname.com的后 缀;“nameserver”表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的。
其中domainname和search可同时存在,也可只有一个。

 

DNS 服务通过资源记录的方式

 

A 记录,用来把域名转换成 IP 地址;

 

CNAME 记录,用来创建别名;

 

而 NS 记录,则表示该域名对应的域名服务器地址。

当我们访问某个网址时,就需要通过 DNS 的 A 记录,查询该域名对应的 IP 地址,然后再通过该 IP 来访问 Web 服务。

nslookup 命令

(yum provides nslookup

yum provides */nslookup","*bin/nslookup查询nslookup在哪个套件里面

yum install bind-utils安装成功

)

nslookup 查询到这个域名的 A 记录 

 

DNS 解析工具 dig

如果没有命中缓存,DNS 查询实际上是一个递归过程,那有没有方法可以知道整个递归查询的执行呢? DNS 解析工具 dig ,就提供了 trace 功能,可以展示递归查询的整个过程。

 

 


 

 

 

局域网的域名解析 

 不仅仅是发布到互联网的服务需要域名,很多时候,我们也希望能对局域网内部的主机进行域名解析(即内网域名,大多数情况下为主机名)。Linux 也支持这种行为。

把主机名和 IP 地址的映射关系,写入本机的 /etc/hosts 文件中 

 

本地解析文件的优先级比DNS指向文件的优先级高,调整优先级的配置文件是:   /etc/nsswitch.conf

没修改前可以发现, files在dns之前,代表本地解析文件优先于DNS指向文件


 

没修改前可以发现, files在dns之前,代表本地解析文件优先于DNS指向文件

修改顺序之后: dns  files 表示dns指向文件优先于本地解析文件

配置静态DNS

vim  /etc/sysconfig/network-scripts/ifcfg-eth0

 

可以使用host命令验证search域补全顺序 

 

 

参考链接 :

https://www.bilibili.com/read/cv14974929

posted @ 2022-05-01 17:12  diameter  阅读(3634)  评论(0编辑  收藏  举报