/etc/resolv.conf 文件详解
介绍:
/etc/resolv.conf是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。该文件是由域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。
关键参数:
- nameserver 配置DNS服务器地址(顺序来查询,且只有当第一个nameserver没有反应时才查询下面的nameserver)
- domain 声明主机的域名,当查询不完全的域名时主机名将被使用(相当于search的默认值)
- search 它的多个参数指明域名查询顺序。当查询不完全的域名时会使用到(domain和search不能共存)。
- sortlist 允许将得到域名结果进行特定的排序,一个是在 resolv.conf 中配置的,一个是在 server 端配置的,主要功能就是当响应的 answer 部分含有多个地址时,优先返回那个。
可选参数(options):
--ndots:n 默认值1,假设ndots值为5,表示:如果查询的域名包含的点“.”不到5个,那么进行DNS查找,将使用非完全限定名称,如果你查询的域名包含点数大于等于5,那么DNS查询,默认会使用绝对域名进行查询,在/etc/resolv.conf文件中配置为options ndots:5。
其他可选参数见:https://man7.org/linux/man-pages/man5/resolv.conf.5.html
示例:
1、正常域名解析
默认/etc/resolv.conf配置
# Generated by NetworkManager nameserver 192.168.248.2
ping blog.csdn.com
[root@node2 ~]# ping blog.csdn.com PING blog.csdn.com.com (45.11.57.36) 56(84) bytes of data. 64 bytes from comcomproxy1.com.com (45.11.57.36): icmp_seq=1 ttl=44 time=291 ms 64 bytes from comcomproxy1.com.com (45.11.57.36): icmp_seq=2 ttl=44 time=270 ms
2、配置domain域
ping blog
[root@node2 ~]# ping blog ping: blog: 未知的名称或服务
调整/etc/resolv.conf配置文件,添加domain
[root@node2 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.248.2 domain csdn.net
再次ping blog, ping不完整域名会自动补全
[root@node2 ~]# ping blog PING blog.csdn.net (182.92.187.217) 56(84) bytes of data. 64 bytes from 182.92.187.217 (182.92.187.217): icmp_seq=1 ttl=89 time=20.4 ms
3、配置search域
调整/etc/resolv.conf配置文件,添加search,会顺序补全,直到有响应
[root@node2 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.248.2 search abc.com csdn.net [root@node2 ~]# ping blog PING blog.csdn.net (182.92.187.217) 56(84) bytes of data. 64 bytes from 182.92.187.217 (182.92.187.217): icmp_seq=1 ttl=89 time=20.2 ms 64 bytes from 182.92.187.217 (182.92.187.217): icmp_seq=2 ttl=89 time=20.1 ms
4、使用host命令验证search域
可以使用host命令验证search域补全顺序
注意:如果host命令不存在的话,使用如下命令进行安装
yum -y install bind-utils
bind-utils提供DNS查询工具,比如dig、host、nslookup
再次调整/etc/resolv.conf配置文件的search域,再次host -a blog发现serach域都补全还是解析不了的话会继续解析blog
5、使用host验证ndots默认值为1
验证发现待解析域名包含.大于等于1时就会先解析域名,只有域名解析不成功时才会继续匹配serach域或domain域。
[root@node2 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.248.2 search abc.com abcd.com
6、使用host验证全域名
全域名指的是域名最后一位为.,例如www.baidu.com. ,另外解释下FQDN的概念,FQDN(Fully Qualified Domain Name)含义是完整的域名,同时带有主机名和域名的名称。例如, 一台机器主机名(hostname)是www, 域后缀(domain)是baidu.com, 那么该主机的FQDN应该是www.baidu.com。
如果域名结尾为.,那么只会解析完全限制域名,即时解析失败也不会匹配serach域或domain域。
7、当服务器既配置了hosts域名映射,又配置了DNS Server的时候,会先执行哪个
假设在/etc/hosts配置文件里面加入了下面这行
192.168.249.149 www.baidu.com
/etc/resolv.conf配置如下
# Generated by NetworkManager nameserver 192.168.248.2
ping www.baidu.com结果如下图,可以得出当服务器既配置了hosts,又配置了DNS的时候,会先执行hosts配置,这是由/etc/nsswitch.conf配置文件控制的,解析顺序可以通过修改/etc/nsswitch.conf配置文件进行调整,具体使用/etc/nsswitch.conf本文不做介绍。