Linux DNS组成
Linux DNS可以分为几个部分:传统DNS, mDNS, DNS缓存
传统DNS
这就是我们通常理解的DNS,通过UDP 53端口向某个DNS服务器发送DNS查询请求,在DNS响应中返回与查询主机对应的IP地址
mDNS
它的作用是,使得程序在没有传统DNS服务器的局域网中也能够有效解析域名,这样就可以在局域网通过主机名访问主机。
DNS缓存
Linux默认是没有DNS缓存的。要使用DNS缓存,通常有两种方式:
一种是安装服务程序NSCD(name service cache daemon)
一种是用Bind来架设Caching Name Service来实现
NSCD
apt-get install nscd
启动nscd服务: service nscd start (会清空缓存)
停止nscd服务:service nscd stop
DNS解析顺序
相关配置文件
/etc/resolv.conf
它是DNS客户端配置文件,它包含了DNS服务器地址和主机域名搜索顺序。该文件是由域名解析器(resolver, 一个根据主机名解析IP地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个 由空格隔开的参数。
示例:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.1.12.33
nameserver 10.1.12.34
search dhcp.abc.local
注意,我们一般不用关心这个文件,应该是由resolver自动配置的。
resolv.conf的关键字主要有四个:nameserver, domain, search, sortlist
最主要的是nameserver,其它关键字都是可选的。关键字说明如下:
nameserver 表明用于DNS服务器的IP地址
domain 声明主机的域名
search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。
domain和search不能共存;如果同时存在,后面出现的将会被使用
sortlist 允许将得到的域名结果进行特定排序
/etc/hosts
该文件可以说是一个静态主机名查询静态表。该文件可以配置IP及其对应的主机名。通常情况下,该文件首先记录了本机的IP和主机名。
robin@robin-VirtualBox:~/Desktop/share/pcapParser$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 robin-VirtualBox
默认情况下,进行DNS解析时,首先查询该文件,如果找到对应记录就不会发送dns请求。不过,这个顺序是可以改变的,看nsswitch.conf
/etc/nsswitch.conf
名字服务切换,NSS(Name Service Switch)配置文件。配置一些服务的搜索顺序。
其中以hosts开头的行,默认配置一般是这样的, 它指明了DNS查询的顺序:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
* files 表示解析位于 /etc/hosts文件中的静态主机名。
* mdns4_minimal 试图用组播DNS ( Multicast DNS)来解析名字。
* [NOTFOUND=return] 意思是mdns4_minimal没有找到就不再继续了.
* dns 代表传统的单播DNS (unicast DNS)查询 .
* mdns4 代表一个多播DNS查询
当查询以.local结尾的主机名时,就会出现mDNS查询请求。