DNS 域名解析失效

前述    

    测试环境有个 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

 

 

 

 

 

 

转载于:https://my.oschina.net/u/2470065/blog/759383

当Ubuntu的网络配置中域名解析失效时,可能会导致无法通过域名访问互联网或局域网资源。这个问题通常是由于DNS(Domain Name System)配置问题引起的。DNS负责将域名转换为IP地址,以便计算机能够正确地访问互联网上的资源。 以下是一些可能导致Ubuntu网络配置中域名解析失效的常见原因和解决方法: 1. DNS服务器配置错误:检查Ubuntu网络配置文件中的DNS服务器设置。可以通过编辑`/etc/resolv.conf`文件来手动指定DNS服务器。确保正确配置了可靠的DNS服务器地址,例如Google的公共DNS服务器(8.8.8.8和8.8.4.4)。 2. DNS缓存问题:有时候DNS缓存可能会导致域名解析失效。可以尝试清除DNS缓存来解决问题。在终端中运行以下命令来清除DNS缓存: ``` sudo systemd-resolve --flush-caches ``` 3. 网络连接问题:检查网络连接是否正常工作。确保网络连接稳定,并且能够正常访问其他网站。如果网络连接有问题,可能需要检查网络硬件或联系网络管理员。 4. 防火墙设置:防火墙可能会阻止DNS请求。确保防火墙配置允许DNS流量通过。可以尝试禁用防火墙或者配置适当的规则来允许DNS流量。 5. DNS解析器问题:Ubuntu使用名为systemd-resolved的系统服务来处理DNS解析。确保该服务正在运行,并且没有出现错误。可以通过以下命令来检查服务状态: ``` sudo systemctl status systemd-resolved ``` 以上是一些常见的解决方法,可以尝试逐一排查并解决问题。如果问题仍然存在,可能需要进一步调查网络配置或咨询网络专家。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值