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 命令来观察两个节点之间的网络延迟。