resolv.conf是在各种操作系统中用于配置系统的域名系统(DNS)解析器的计算机文件的名称。该文件是一个纯文本文件,通常由网络管理员或管理系统配置任务的应用程序创建。
该配置文件会影响主机对 Internet 域名系统 (DNS) 的访问: 解析进程启动时会读取resolv.conf配置文件中的内容,resolv.conf文件包含各种参数及option,用来改变或调优对外的DNS解析行为;
resolv.conf涉及的参数及option众多,下面针对最常用的参数进行详细分析及讲解
解析器应该查询的名称服务器的Internet地址,按照RFC 2373,要么是IPv4地址(点符号),要么是冒号(可能是点符号)的IPv6地址。如果不存在命名服务器条目,默认情况下使用本地机器上的名称服务器。
(指定需要使用的DNS地址)
经过实际查看不同系统/usr/include/resolv.h,相关限制如下:
nameserver指定的DNS服务器最多不超过三个,且需要保证每个DNS服务器解析稳定。
设置本地客户端向另一个DNS服务器发起重试查询之前等待的超时响应时间。
为了能在首要DNS服务器发生故障时,客户端能够及时向另一个DNS服务器发起查询,建议将timeout时间设置为最小值,如下:
timeout:1
search:设置搜索列表,客户端可以通过只搜索关键字,然后系统自动补全所需的域。
ndots:为必须出现在请求的域名名称中的点的数量设置阈值,缺省值是1,此选项的值被静默封顶为15
解析器查询小于ndots(默认值为1)将依次使用搜索路径的每个组件进行尝试,直到找到匹配。
搜索列表目前仅限于六个域,总共256个字符。
最大限制有所不一样,详见红帽官网:https://access.redhat.com/solutions/58028
根据业务需求进行设置,非必要建议不使用。
该参数主要控制客户端对外查询域名A/AAAA类型时的行为,主要有如下两个参数
single-request:
single-request-reopen:
glibc在较低版本时,客户端可能会出现使用相同的源ip以及端口对外发起A/AAAA类型的查询,可能会存在如下风险:
如上两种场景皆可引发客户端异常行为,即:触发Linux-DNS的默认5秒超时机制,再次发送DNS请求才成功收到响应,进而导致业务受到延迟、中断。
在配置文件中,均加上参数:single-request-reopen
参考文档: A:single-request-reopen参数说明:http://coolnull.com/3820.html 概述:同样源目的ip,同样源目的port,同样的第4层协议的连接会被防火墙看成是同一个会话,因此可能存在返回包被丢弃现象。如下图:
B:kubernetes集群中夺命的5秒DNS延迟:https://tencentcloudcontainerteam.github.io/2018/10/26/DNS-5-seconds-delay/ 概述:内核conntrack模块的bug,多个线程或进程并发从同一个socket发送相同五元组的UDP报文时,有一定概率会发生查询请求被丢弃,导致有DNS请求没有到达kube-dns pod,进而触发了Linux默认DNS机制的5秒超时,再次发送DNS请求才成功收到响应。 (为什么是5秒? man resolv.conf可以看到glibc的resolver的缺省超时时间是5s)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。