域名解析应用相关知识

域名解析应用相关知识

 

一般使用gethostbyname系统函数来解析域名得到IP地址,但在linux,gethostbyname是多线程不安全的,该函数使用了内部的静态变量,因此在多个线程中使用该函数将导致无法预知问题发生(如Crash或则解析失败),推荐使用gethostbyname_rgethostbyaddr,这两个函数的功能与gethostbyname一样,除了是多线程安全而已。

       Linuxgethostbyname系统函数的工作原理为:该函数的实现是从Bind中抽出来的,进行了简化,以及按照RFC标准执行。

       网络服务模块首先进行初始化,进行下面的(1),(2)初始化

       1:读取RESOLV_HOST_CONF环境变量指定的解析配置文件,缺省是没有该环境变量的。若没有则读取/etc/host.conf (该文件的含义见下)配置文件为域名解析顺序配置文件,设定解析顺序方式。该文件更改要重起服务才能生效,不能即时生效。

       2:读取/etc/resolv.conf配置文件,该文件用于指定解析的DNS服务器,以及DNS Bind解析时的相关参数,如重试次数,超时时间等。该文件的更改是立即生效的。

Gethostbyname函数执行:

       3:读取/etc/nsswitch.conf,若是先读hosts文件,则根据名字在hosts文件中查找,若找到,则返回,hosts文件不做Cache,因此hosts文件中的更改是立即生效的;若找不到,则使用DNS  Bind客户端进行域名解析处理

       4:使用DNS Bind客户端进行域名解析时,会采用/etc/resolv.conf配置文件进行域名解析,解析的方式由resolve.conf文件决定,另外解析的选项参数也可以通过环境变量RES_OPTIONS指定

 

 

附几个LinuxDNS相关配置文件

 

1、   /etc/host.conf

当系统中同时存在DNS域名解析和/etc/hosts主机表机制时,由该/etc/host.conf确定主机名解释顺序,如

order hosts,bind    #名称解释顺序
      
      
multi on            #允许主机拥有多个IP地址
      
      
nospoof on          #禁止IP地址欺骗
      
      

order是关键字,定义先用本机hosts主机表进行名称解释,如果不能解释,再搜索bind名称服务器(DNS)

Multi 文档上是指/etc/hosts中,一个域名可以配置多个IP,但好象无法实现

Nospoof 防止IP地址欺骗

 

2、   /etc/resolv.conf

配置DNS客户端,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数。下面是一个例子文件:

    search dns.alisoft.com
  nameserver 172.16.22.128

nameserver 60.190.232.99

options  ndots:5 timeout:1 attempts:1  
合法的参数及其意义如下:
    nameserver
 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver
  domain   声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容。

  search   它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domainsearch不能共存;如果同时存在,后面出现的将会被使用。

  sortlist  允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。

options  这个参数一般很少有人设置,它可以设置多个选项值,以“Key:Val” 对的方式出现,可以有多个”Key:Val” 对,如上面例子。可以设置的Key有:

ndots timeout attempts debug inet6 ip6-bytestring no-ip6-dotint ip6-dotint rotate no-check-names edns0

最重要的是: timeoutattempts参数,指定了解析的超时时间和重试次数。

3、 /etc/nsswitch.conf

名字服务开关,一个常用的功能是可以动态切换域名解析的顺序,是先根据/etc/hosts文件还是DNS,默认是先读/etc/hosts文件的名字解析

 

4、  /etc/ssh/sshd_config
若发现ssh某台服务器很慢,那有可能是DNS问题,可以查看/etc/ssh/sshd_config文件,/etc/ssh/sshd_config,把UseDNS yes改为UseDNS no, 同时编辑/etc/nsswitch.conf 找到hosts那行,改成hosts: files dns [NOTFOUND=return]

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值