使用nsswitch控制linux dns解析顺序

参考:1、DNS原理入门参考:http://www.ruanyifeng.com/blog/2016/06/dns.html

2、http://cn.linux.vbird.org/linux_server/0350dns.php

一、

域名解析与以下四个文件有关:

/etc/hosts

/etc/host.conf 

/etc/resolv.conf

/etc/nsswitch.conf

还有

/etc/hosts.allow 

/etc/hosts.deny

其中nsswitch.conf与系统获取解析的顺序有关

  nsswitch全称为: network service switch,其是一个通用框架,是各种类型存储交互的公共实现,实现名称解析服务
  例如: 用户名到ID,或者ID到用户名,再或者IP到域名的查找方式。nsswitch加载了各存储的api接口,并以模块方式装载进nsswitch中,当程序发起nsswitch的api调用时,nswitch会自动完成到各存储中查找内容
  目前观察到的情况是,当nscd服务关闭时,nsswitch可以控制dns(/etc/resolv.conf)和files(/etc/hosts)的解析顺序,顺序考前的优先,一般配置顺序是:hosts:     files dns。但是当开启nscd服务之后,不论nsswitch怎么配置,都是nscd缓存优先。nscd缓存的数据库文件位置:/var/db/nscd/hosts
  
# more /etc/nsswitch.conf | grep hosts
# hosts:     db files nisplus nis dns
# hosts:      dns files db
hosts:      dns db files

hosts dns #只使用/etc/resolv.conf查询,不使用/etc/hosts

hosts files #只使用/etc/hosts查询

 二、getent命令

从nisswitch库中查找记录:
 getent hosts www.baidu.com

三、DNS 使用的 port number

好了,既然 DNS 系统使用的是网络的查询,那么自然需要有监听的 port 啰!没错!很合理!那么 DNS 使用的是那一个 port 呢?那就是 53 这个 port 啦!你可以到你的 Linux 底下的 /etc/services 这个档案看看!搜寻一下 domain 这个关键词,就可以查到 53 这个 port 啦!

但是这里需要跟大家报告的是,通常 DNS 查询的时候,是以 udp 这个较快速的数据传输协议来查询的, 但是万一没有办法查询到完整的信息时,就会再次的以 tcp 这个协定来重新查询的!所以启动 DNS 的 daemon (就是 named 啦) 时,会同时启动 tcp 及 udp 的 port 53 喔!所以,记得防火墙也要同时放行 tcp, udp port 53 呢!

 

参考

LINUX DNS解析的3种修改方法~

1.HOST 本地DNS解析

vi /etc/hosts

添加规则 例如:

223.231.234.33 www.baidu.com

2.网卡配置文件DNS服务地址 

vi /etc/sysconfig/network-scripts/ifcfg-eth0

添加规则 例如:

DSN1='114.114.114.114'

3.系统默认DNS配置

vi /etc/resolv.conf

添加规则 例如:

nameserver 114.114.114.114

系统解析的优先级 
1>2>3

 

/etc/resolv.conf配置里的search含义

search local.xx local.yy

当nslookup www查询失败时,会继续查询www.local.xx,如果仍然失败,继续查询www.local.yy

posted @ 2017-06-15 18:01  脚本小娃子  阅读(3087)  评论(0编辑  收藏  举报