参考文献:
所有的解析请求由linux的resolver library(指的是一些C标准库的函数,主要是
gethostbyname和gethostbyaddr)完成,它涉及/etc/host.conf和/etc/nsswitch.conf,后者优先。它会查询2个东西,一个是domain name server,具体地说,就是DNS/BIND(
/etc/resolv.conf相关),一个是本地的/ets/hosts。这2个的先后顺序可以配置,在
/etc/host.conf里有一句
order hosts,bind # hosts,bind or nis
这样的话,会先查找/etc/hosts,找不到才执行bind的DNS查找。
/etc/host.conf默认是先执行
DNS查找,而不是/etc/hosts。
但/etc/nsswitch.conf可以覆盖它:
hosts: files dns
就表示优先查找/etc/hosts。如果/etc/nsswitch.conf没有注明,或者没有这个文件,才去找/etc/host.conf的设置。
【2】
涉及的文件
|
示例
|
说明
|
/etc/hosts
|
127.0.0.1 localhost
192.168.1.10 foo.mydomain.org foo
192.168.1.13 bar.mydomain.org bar
|
IP_address canonical_hostname [aliases...]
#注释
|
/etc/resolv.conf
|
domain foo.com
search foo.com
nameserver 210.34.0.14 nameserver 210.34.0.2
(nameserver按顺序来,最多支持3个。如果不指定,就认为nameserver在本地)
|
执行查找的对象,必=必须有domain,形式必须是XXX.domain
domain 声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容。
如果你ping abc,那么他会搜索abc.foo.com
search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domain和search不能共存;如果同时存在,后面出现的将会被使用。 如果你ping abc,他会先找abc,找不到再找abc.foo.com sortlist 允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序 |
/etc/nsswitch.conf
|
hosts: files dns
|
|
/etc/host.conf
|
multi on/off 表示查找/etc/hosts时,是否支持多IP地址,只对/etc/hosts有效
nospoof on 对ip地址欺骗攻击加强防范
alert on 检测到ip地址欺骗时记日志
order bind hosts
|
|
/etc/resolv.conf中domain和search的规则:
查找顺序
|
domain a.com
|
search a.com b.com
|
未设置domian和search,
hostname形式为XXX
|
未设置domian和search,
hostname形式为XXX.YYY
|
ping abc
|
abc.a.com
|
abc.a.com -> abc.b.com
|
abc
|
abc.YYY
|
ping abc.xyz
|
abc.xyz -> abc.xyz.a.com
| abc.xyz -> abc.xyz.a.com -> abc.xyz.b.com |
abc.xyz
|
abc.xyz -> abc.xyz.YYY
|
ping abc.xyz.
ping abc.
|
全都不会在结尾添加额外的东西
|
|
|
|
1.形式为abc.xyz,则直接解析,成功则结束,如果失败则到2;如果形式为abc,也到2
2.尝试在末尾添加domain。
if /etc/resolv.conf有domain或search字段
则添加上去再解析。(其中search可以指定多个)。
else
if `hostname` 形式为XXX.YYY
添加.YYY,再解析
else
没办法,直接解析
end
end