Linux DNS 解析与配置 nslookup使用 与 /etc/resolv.conf文件的配置

Posted 青冬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux DNS 解析与配置 nslookup使用 与 /etc/resolv.conf文件的配置相关的知识,希望对你有一定的参考价值。

Linux DNS 解析与配置


当我接收到一批新的服务器时,尝试连接外网,比如访问百度的首页:

curl  www.baidu.com

发现报错,不能解析正确的主机名。这个其实就是主机在解析主机名时没能正确发现对应的主机的 ip。当我们使用类似于域名等去访问时,最后都是由 DNS 解析并返回具体的 ip 地址,最终访问到具体的 ip 也就是某服务器。

当报错如上时,多半是 /etc/resolv.cof 文件未能正确配置导致,可以更改为:

# Generated by NetworkManager
search huangyichun.com
nameserver 8.8.8.8
nameserver 114.114.114.114

resolv.conf

这个文件是 DNS 的 client 端使用的文件,用于设置 DNS 服务器的 ip 地址以及 DNS 域名,还可以配置域名搜索顺序等等。主要包含如下关键字:

  • nameserver
  • domain
  • search
  • sortlist
  • options

他们设置的格式都是 关键字+空格 + 参数。他们之间是有顺序的,从上往下的顺序进行加载。


nameserver

标示 DNS 服务器的 IP 地址,可以有多行的 nameserver,优先查找上面的 DNS 服务器,是尝试通过 DNS 服务器来解析主机名的主要方法。当第一个 DNS 超时时,会转向第二个 DNS 继续请求,除非配置了 options


domain

主机的域名。不与 search 共存,只存在最后一条。表示该主机的域名是多少。比如 www.huangyichun.com 的域名就是 huangyichun.com。详细看 search


search

可以有多个参数,当要查询没有域名的主机,那么将会在申明的域中进行查找。大体上来说 searchdomain 并没有什么区别,他们都是在如果没有输入完整的网址时进行补全域名的功能。比如,我们直接 ping www 都不知道究竟是哪一个 www,如果配置了 domain 或者 search 那么直接帮助补全:

cat /etc/resolv.conf
# Generated by NetworkManager
#domain huangyichun.com
#nameserver 8.8.8.8
#nameserver 114.114.114.114


nslookup www


sortlist

允许将得到域名结果进行特定的排序。


options

可选的参数。

  • rotate,当配置rotate后,进行DNS解析时,对配置的多个search进行轮循查询,这样可以减轻第一个DNS的解析工作。
  • debug,开启debug模式。
  • ndots:n,设置在初始查询之前,必须出现的点数阈值。n默认为1,意味着如果名称中只要有点,就会在任何搜索列表元素附加到该名称之前,将首先尝试将名称作为绝对名称。
  • timeout:n,设置等待nameserver的秒数,如果超时则会开始访问下一个nameserver,默认为5。
  • attempts:n,设置对于nameserver重试次数,默认为2。

这里只展示了部分参数,其余参数请参照:

resolv.conf(5) - Linux manual page


举个例子

我们之前配置的 searchnameserver

将设定域名在 huangyichun.com 下进行补全,DNS 解析时优先 8.8.8.8,其次为 114.114.114.114


怎么解析百度

百度是我们的好朋友,我们直接想一下怎么解析的百度的网址 www.baidu.com

使用 nslookup www.baidu.com 可以直接解析完毕,并返回器结果:

nslookup www.baidu.comcd

可以看到解析的结果为 39.156.66.14,在浏览器上直接访问该地址,可以访问百度页面:

现在我们使用 nslookup 查看一下域名的解析流程。

注意是域名的解析流程,在 linux 中,并不止是域名的解析,还有主机的解析,也就是 /etc/hosts 等等


流程

  1. ping www.baidu.com,然后会根据 resolv.conf 文件发送 DNS 解析请求。
  2. DNS客户端 解析器会将解析请求发送到 本地DNS服务器
  3. 本地 DNS 服务器会向 .根服务器 发送 com.服务器 的解析请求。
  4. .根服务器 返回 com.服务器 地址,本地 DNS 继续请求 com.服务器 获取 baidu.com.服务器 地址。
  5. 根据返回的地址信息,本地 DNS 继续请求 www.baidu.com.服务器 地址,获取后返回给 DNS客户端
  6. 客户端拿到 DNS 后进行 ip 访问。

这里可能有几个疑惑的地方:

  1. 域名的完整格式其实应该是 xxxx.root,也就是后缀名都是 .root.root 服务器我们称之为 根服务器。但是 根服务器 每次都是 .root 没有必要显示,所以可以简化去除。

  1. 查找域名地址,其实都是从后往前进行查找,也就是先 root,后 domain
  2. 本地 DNS 服务器进行查找的时候,是迭代查找;而 DNS 客户端在请求本地 DNS 服务器时,是递归查找。如果超时,会更换 DNS 服务器。(迭代其实很慢,但是一个服务器没办法进行所有的域名 +ip 的存储,当该服务器不知道时,会将请求应答为 xxxx服务器 可能知道。)
  3. 并不是每次查询都会到 根服务器,当 本地DNS服务器 有缓存时,就会直接返回,并且标注 Non-authoritative,如果是查询到 根服务器,那么就会标注 authoritative

nslookup

我们使用 nslookup 来模拟整个域名解析的流程:

nslookup
> set type=ns
> .

type=ns 代表查询 nameserver,查询 根服务器 地址,返回了 a 到 m 的共计 13 个 nameserver,并且都是 Non-authoritative#53 标示 53 端口,也是默认的 DNS 端口(一般 UDP 传输)。

继续查询 nameserver 对应的 ip 地址:

查询地址的ipv4
set type=a
a.root-servers.net.

获取 跟服务器 的地址后,我们与 根服务器 进行沟通,获取 com. 地址。

server 198.41.0.4
set type=ns
com.

获取到了能够解析 com. 的 nameserver 列表,继续获取对应的 ip:

set type=a
a.gtld-servers.net.
# 这里的gtld 代表:通用顶级域名,generic top level domain

这样我们可以跟 com. 进行通话,获取 baidu.com 地址:

server 192.5.6.30
set type=ns
baidu.com

可以看到 baidu.com 有几个可以进行解析,我们继续获取 ip,然后进行 www.baidu.com 的解析:

set type=a
dns.baidu.com.
server 110.242.68.134
www.baidu.com

最后我们得到了 www.baidu.com 的 dns 解析结果为 39.156.66.14


www.huangyichun.com

如果我们要解析 www.huangyichun.com 也是一样的,找到 .com 地址,然后看 huangyichun.com 哪里能解析,与对应的 nameserver 对话,解析即可。

gravel.dnspod.net.

mantis.dnspod.net.

这两个就是腾讯云的 DNS 解析,说明该服务器大概率部署在腾讯云上。


问题

  1. 为什么我们解析 google.com 这类服务器无法解析呢?那当然是 IPS 提供商的内容。
  2. 谁来管理 .服务器,Root Servers 当前有 13 个不同的域名,也就是之前的[a-m].root-servers.net,当前公狗大概 1500 个服务器,在 12 个管理机构中运行。

以上是关于Linux DNS 解析与配置 nslookup使用 与 /etc/resolv.conf文件的配置的主要内容,如果未能解决你的问题,请参考以下文章

linux工作利器之一,dns解析工具dig

76 windows & mac 连接 linux 上面的 dnsmasq dns服务器, 能够 nslookup 但是 ping 不通

76 windows & mac 连接 linux 上面的 dnsmasq dns服务器, 能够 nslookup 但是 ping 不通

76 windows & mac 连接 linux 上面的 dnsmasq dns服务器, 能够 nslookup 但是 ping 不通

跟踪域名解析过程的几条命令

DNS域名解析命令 nslookup