DNS 域名解析失效

帅比萌擦擦* 提交于 2019-12-29 23:08:12

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

前述    

    测试环境有个 API 报了一个内部服务错误,排查下来发现后台 php 代码没法解析域名,nslookup、ping 等工具则是可以成功解析;

    index.php

###################################################################

<?php
echo(gethostbyname('www.baidu.com'));
?>

###################################################################

 

排查 1:dns 解析服务器

    由于在 terminal 界面用命令行的方式是可以解析的:

    nslookup www.baidu.com

    ping www.baidu.com

    /usr/local/php/bin/php -r "echo(gethostbyname('www.baidu.com'));"

    上述三种方式都可以解析出域名;

 

排查 2:dns 公共库权限

    测试环境 web 架构为:apache + php 的形式,apache 启动用户为 root + daemon,执行 find / -name libnss*.so 等 dns 要用到的公共库,查看 other 用户是否有读取权限。

    

排查 3:php chroot 开启

    php-fpm.ini 配置文件中有没开启 chroot 功能,即 PHP 的工作环境,在 web 服务器中,为了保证安全性,有开启 chroot 的则可能会由于路径问题,没法调用公共类库而导致解析问题。

 

排查 4:dns 缓存

    在另一台测试服务器中,发现同样的配置,另一台可以成功解析,而且出问题的这台服务器之前一直是可以成功使用的,解析问题是在没有修改的情况下突然出现的。

    Linux 通过 bind 服务提供 dbs 解析,客户端处于某台 DNS 服务器的后面,DNS 服务器通过 bind 服务,提供域名缓存和转发功能。

    客户端对外的 DNS 解析结果,除保留在客户端本地的 DNS 缓存中,同样会保留在这台 DNS 服务器上,当我们修改 named 提供的DNS服务时,也需要刷新缓存。bind 提供的rndc 命令可以清空缓存的功能:

    rndc flush

可参考:https://my.oschina.net/lenglingx/blog/425020

 

智能 DNS    

    理想情况下,各地DNS的缓存时间即为设置的 ttl(Time To Live:域名解析在DNS服务器中存留时间) 时间,所以可以通过设置 ttl 时间来控制DNS缓存的时间。ttl 时间设置的短,DNS 缓存过期快,在机器故障的时候很快切换到另一台 DNS 服务器,对用户的影响小;但是由于 ttl 设置的太短,缓存很快过期,要经常一层层的问域名的解析情况,本地没有缓存,DNS 解析时间会比较长。以上是理想情况,真实情况下,个别的 DNS 服务器并不遵从 ttl 时间,可能有做强制缓存多少时间,这些都没有办法控制。

    智能 DNS解析:
    zone 配置文件中添加一个 CNAME 记录,首先解析到一个域名,然后再解析到 IP


    使用智能 DNS 后,用户访问 http://www.baidu.com 的解析情况
    www.baidu.com. CNAME www.a.shifen.com.

    www.a.shifen.com. A 220.181.112.244
    用户访问 http://www.baidu.com 会经过以上的两层解析来找到ip,第一层解析的ttl时间是由你控制的,可以设置的长一些,使DNS缓存的久一些,降低DNS查询时间;第二层解析的ttl时间是由智能DNS提供方来设定的,一般设定的比较短,比如2分钟,方便故障的时候做到及时切换。

ttl 可以在 dnspod 和万网域名解析里面设置;

 

DNS 污染

    摘自维基《

    域名服务器缓存污染(DNS cache pollution),又称域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造或无意中制造出来的域名服务器封包,把域名指往不正确的IP地址。一般来说,在互联网上都有可信赖的域名服务器,但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关域名的局域域名服务器的缓存受到污染,就会把域名内的电脑导引往错误的服务器或服务器的网址。

    域名服务器缓存污染可能是因为域名服务器软件的设计错误而产生,但亦可能由别有用心者透过研究开放架构的域名服务器系统来利用当中的漏洞。

    为防止局域的域名服务器缓存污染除了要定时更新服务器的软件以外,可能还需要人手变更某些设定,以控制服务器对可疑的域名封包作出筛选。

参考 github 里面的 https://github.com/lifetyper/FreeRouter/wiki

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!