Linux DNS

DNS协议

DNS协议是哪一层的协议

DNS 协议是基于 udp协议的应用层协议。DNS协议在Linux上的默认端口是53。

Linux 与 DNS协议

DNS解析

DNS解析 的作用

根据域名找到对应的ip地址。

DNS解析的原理

简单地说,是DNS服务器 存储有 ip地址与域名的对应关系,然后服务器通过udp协议访问DNS服务器,获得ip地址所对应的域名。这只是最简单的描述,事实上比这个复杂很多。

Linux DNS服务器地址的配置方式 (ubuntu 18.04)

/etc/resolv.conf 文件之中的配置内容是Linux 实时生效的 DNS服务器地址配置。
注意:
在ubuntu 18.04 版本上,/etc/resolv.conf 文件只是一个软链接,修改它的配置参数,服务器重启后会失效。DNS协议的数据包最终会发向哪里,看 /etc/resolv.conf 文件。

问题

1:为什么服务器上的 /etc/resolv.conf 文件之中配置的地址是 127.0.0.53, 但是还是可以进行域名解析?
因为 Linux的 systemd-resolve 程序,它会把本地的DNS请求转发到外部的DNS服务器。

Linux systemd-resolve

如何判断 Linux 启动了 systemd-resolve 机制

systemctl status systemd-resolve

Linux systemd-resolve 机制的作用

ubuntu中 systemd-resolved 服务为本地应用程序提供了域名解析服务, 实际上是转发的功能。系统使用 systemd-resolved 进行dns请求的时候,除了一些localhost等特殊域名,其他的域名需要它去外部dns服务器寻找答案,这个外部dns的地址可以手动配置或者自动配置。

Linux systemd-resolve 工作模式

1:local DNS stub模式
服务器使用 127.0.0.53 作为DNS服务器地址。systemd-resolve 作为一个虚拟DNS服务器,然后将DNS请求发送给外部的DNS服务器。
2:保护模式
......

Linux 如何查看 当前 systemd-resolve 所设置的DNS服务器地址

执行 systemd-resolve --status | grep 'DNS Servers' -A2

/etc/resolv.conf 文件说明

/etc/resolv.conf 文件作用

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

/etc/resolv.conf 文件参数说明

参数:nameserver

定义DNS服务器的IP地址

参数:search

作用:会影响主机名的解析顺序。

例子:

1: 查询主机名,因为主机名后面没有点,就认为是主机名,所以先添加search里的每一项依次组成FQDN(完全合格域名)来查询,完全合格域名查询未找到,就再认为主机名是完全合格域名来查询

     host -a centos7-bind-1

2: 查询主机名,因为主机名中有点(不是末尾有点),就认为是完全合格域名,先用它来查询,查询失败就把它当成是主机名来进行,添加search里的每一项组成FQDN(完全合格域名)来查询。

     host -a centos7-bind-1.com

3: 查询主机名,因为主机名中末尾有点,则认为是完全合格域名,只用它来查询(不会再添加search里的每一项)。查询次数会与search里项域名个数有关。

     host -a centos7-bind-1.

参数 options

注意:options 后面可以设置配置参数,参数与值之间以冒号分隔
options下面的子参数:

  • timeout 查询一个dns的超时时间,单位是秒。系统缺省是5,最大可以设为30。
  • attempts 全部dns都查询一遍的次数。缺省是2
    ......

DNS 缓存:

1: 删除DNS 缓存操作 的方式

      systemd-resolve --flush-caches

2: 查看DNS缓存的命中率 的方式

       systemd-resolve --statistics

3: Linux 关于DNS 缓存是否开启

       Ubuntu 18.04 之后的版本,默认会开启DNS缓存

Linux 命令行 可以手动调用DNS解析的工具

  • 1: host
  • 2: dig
  • 3: nslookup

Linux DNS 小需求

Linux上 DNS解析失败,如何排查?

1: 查看DNS解析所使用的 DNS服务器地址。

     nslookup 域名

2: 检查 DNS 服务器ip 地址是否正确。

  ping DNS服务器ip地址

如果DNS服务器ip地址的值为 127.0.0.53,那么通过 systemd-resolve --status,查看对应网卡的DNS服务器ip地址,它们才是真正的外网DNS服务器ip地址,检查它们是否正确。

DNS解析失败之后,如何判断是什么导致出错的?这里指DNS服务器地址配置正确的情况下。

1:首先判断网络是否连通,通过 ping ip 地址来判断。
2:如果网络处于连通的状况下
使用nslookup -debug 域名,查看DNS解析的每个步骤,以及观察其中出错的原因

如何可以测试 DNS解析 耗时?

方式1: 执行 time nslookup 域名
使用time 命令,输出信息会包含 程序执行的实际时间 程序处于用户空间的时间 程序处于内核空间的时间。用DNS解析的结果来佐证 DNS解析 耗时。

方式2: dig 域名
输出信息之中会包含耗时

导致 DNS 解析耗时的原因有哪些?

  • 1:DNS服务器本身有问题,响应慢且不稳定
  • 2: 客户端到DNS服务器的网络延迟大
  • 3: DNS请求或者响应包,在某些情况下被链路中的网络设备弄丢了

如何判断 客户端 到 DNS服务器的 网络延迟大?

 ping -c 次数 DNS服务器ip地址

命令的输出信息会显示 客户端 到 DNS 服务器 之间的网络延迟。

如何判断 是数据包在链路之中丢失,导致DNS解析耗时?

  ping -c 次数 DNS服务器ip地址

命令的输出信息会包含 数据包的丢失信息。这种方式可以作为佐证。

客户端到DNS服务器的网络延迟大 的解决方式?

修改所设置的 DNS服务器地址。

如何判断 将要被使用的 DNS服务器 与 客户端之间的网络延迟 比较小?

 ping -c 次数 ip地址

使用ping 命令来观察两个节点之间的网络延迟。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • linux dns解析过程 当linux机器去访问一个域名的时候,先去其本地的/etc/hosts文件去查找,如果...
    码二哥阅读 4,592评论 0 0
  • 什么是DNS及功能: DNS(Domain name server),是将IP地址转换为域名地址。当在互联网访问外...
    魏镇坪阅读 12,305评论 0 8
  • DNS 缓存是一个临时数据库,用于存储有关以前的 DNS 查找的信息。 换句话说,每当你访问网站时,你的操作系统和...
    Bogon阅读 9,841评论 0 1
  • Windows 公网上,dns解析变更,一般需要10分钟才生效。 如图所示,基本逻辑为:客户端 - 本机器dns解...
    Bogon阅读 3,693评论 0 2
  • 1. 概述 在网络环境中一般用户只需要在浏览器中输入url如www.sunny.com就可以到对应服务器获取相应的...
    ghbsunny阅读 8,515评论 0 7

友情链接更多精彩内容