阿里云服务器域名解析错误,即可ping IP地址但无法直接ping域名

阿里云服务器域名解析错误,即可ping IP地址但无法直接ping域名,第1张

阿里云服务域名解析错误,即可ping IP地址但无法直接ping域名

阿里云服务器域名解析错误,即可ping IP地址但无法直接ping域名
  • 错误预览
    • DNS
    • 分析原因
      • 1,DNS设置问题
      • 2,防火墙与端口开放问题
      • 3,DNS缓存服务nscd问题
        • NSCD
    • 结果

错误预览

可ping IP地址但无法直接ping域名。初步确定为服务器的域名解析有问题,无法正确的访问DNS服务器,来解析域名。

ping api.weixin.qq.com

[root@iZv61ak4bj68kuZ ~]# ping api.weixin.qq.com
ping: unknown host api.weixin.qq.com

ping 140.207.135.108

[root@iZv61ak4bj68kuZ ~]# ping 140.207.135.108
PING 140.207.135.108 (140.207.135.108) 56(84) bytes of data.
From 140.207.73.25 icmp_seq=26 Packet filtered
^Z
[1]+  Stopped                 ping 140.207.135.108
DNS

DNS(Domain Name System)是域名解析服务器的意思,它在互联网的作用是把域名转换成为网络可以识别的IP地址。当用户在浏览器中输入网址域名时,首先就会访问系统设置的DNS域名解析服务器(通常由ISP运营商如电信、网通提供)。如果该服务器内保存着该域名对应的IP信息,则直接返回该信息供用户访问网站。否则,就会向上级DNS逐层查找该域名的对应数据。

分析原因 1,DNS设置问题

检查服务器是否正确的设置了DNS服务器,即查看vim /etc/resolv.conf 文件是否有DNS服务器的IP地址,它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。默认的DNS服务器的IP地址是电信运营商的DNS服务器,目前国内电信运营商普遍采用DNS劫持的方法,干扰用户正常上网。
Google为他们的DNS服务器选择了两个非常简单易记的IP地址:“8.8.8.8”和“8.8.4.4”。用户只要在系统的网络设置中选择这两个地址为DNS服务器即可。

[root@iZv61ak4bj68kuZ ~]# vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

再重启网络服务

[root@iZv61ak4bj68kuZ ~]# service network restart
2,防火墙与端口开放问题

在阿里云服务器控制台查看安全组,是否http和https端口开放。
我们再来检查防火墙iptables,看看是否有拦截端口的相关规则。可以输入下面的命令关闭防火墙,进行对比测试。

service iptables stop

如果存在iptables规则,则尝试删除DENY策略或修改规则为ACCEPT策略。

3,DNS缓存服务nscd问题

在最终的检查过程中,我所遇到的问题便是nscd缓存服务问题。

NSCD

NSCD(name service cache daemon)是GLIBC关于网络库的一个组件,配置文件为/etc/nscd.conf,服务基于glibc开发的各类网络服务,基本上来讲我们能见到的一些编程语言和开发框架最终均会调用到glibc的网络解析的函数(如GETHOSTBYNAME or GETHOSTBYADDR等),因此绝大部分程序能够使用NSCD提供的缓存服务。当然如果是应用端自己用socker编写了一个网络client就无法使用NSCD提供的缓存服务,比如DNS领域常见的dig命令不会使用NSCD提供的缓存,相反ping得到的DNS解析结果将使用NSCD提供的缓存。
在需要通过域名与外界进行数据交互的时候,dns缓存就派上用场了,它可以减少域名解析的时间,提高效率。例如以下情况

  • 使用爬虫采集网络上的页面数据,
  • 使用auth2.0协议从其他平台(如微博或QQ)获取用户数据,
  • 使用第三方支付接口,
  • 使用短信通道下发短信等。

开启NSCD DNS缓存服务的优点和缺点:

  • 优点
    本地缓存DNS解析信息,提供解析速度。
    DNS服务挂了也没有问题,在缓存服务时间范围内,解析依旧正常。
  • 缺点
    DNS解析信息会滞后,如域名解析更改需要手动刷新缓存,NSCD不适合做实时的切换的应用,目前对于依赖DNS切换的服务,建议不要开启DNS缓存。DNS Cache作为普通的DNS解析Cache那是没问题的,如果你使用RDS云服务器,也不建议使用DNS缓存服务。

在解析超时或者出错时,这个服务会导致一些很难发现的错误。当解析超时没有得到结果时,nscd将依据negative-time-to-live参数缓存一段时间,导致后续一段时间的请求都直接被nscd返回失败应答,导致程序没有机会重新去尝试向远端的DNS服务器解析。

当dns解析失败时,对失败结果做缓存也不是毫无道理,这是避免dns雪崩的一种手段,但是可能这个配置并不适合大多数人,我们希望的还是失败后下一次解析可以重新执行,而不是继续得到一个nscd缓存的失败结果。
NSCD命令选项

$ nscd  --help
用法: nscd [选项...]
Name Service Cache Daemon.

  -d, --debug                Do not fork and display messages on the current
                             tty
  -f, --config-file=名称     从NAME中读取配置数据
  -g, --statistics           Print current configuration statistics
  -i, --invalidate=TABLE     Invalidate the specified cache
  -K, --shutdown             关闭服务器
  -t, --nthreads=NUMBER      启动 NUMBER 个线程
  -?, --help                 给出该系统求助列表
      --usage                给出简要的用法信息
  -V, --version              打印程序版本号

长选项的强制或可选参数对对应的短选项也是强制或可选的。

For bug reporting instructions, please see:
.

NSCD配置文件
NSCD配置文件为/etc/nscd.conf,NSCD程序在启动的时候会读取/etc/nscd.conf文件,每一行指定一个属性和对应的值,或者指定一个服务和对应的值,#表示注释。有效的服务设定是:passwd, group, hosts, services, or netgroup五个。

#设置日志文件
logfile debug-file-name

#设置debug记录的级别,默认是0
debug-level value

#程序启动时,等待进去请求的处理线程数,至少5个
threads number

#最大线程数,默认32
max-threads number

#nscd程序以哪个用户运行,如果设置了该选项,nscd将作为该用户运行,而不是作为root。如果每个用户都使用一个单独的缓存(-S参数),将忽略该选项。
server-user user

#哪个用户可以请求统计用户
stat-user user

#在一个缓存项被删除之前允许使用的次数,默认是5
reload-count unlimited | number

#是否启用偏执模式,启用会导致nscd周期性重启,默认是no
paranoia 

#如果启用偏执模式,设置的定期重启nscd的时间间隔,默认是3600秒
restart-interval time

#开启或者关闭服务缓存,默认是no
enable-cache service 

#为成功请求的元素设置缓存TTL,单位是秒,值越大缓存命中率越高,降低平均响应时间,但会增加缓存的一致性问题
positive-time-to-live service value

#为失败查询元素设置缓存TTL,单位是秒,应保持小值,减小缓存一致性问题
negative-time-to-live service value

#内部的散列表大小,value应该保持一个素数以达到优化效果。默认值是211
suggested-size service value

#启用或者禁用检查文件是否属于指定的服务,这些文件是/etc/passwd、/etc/group、/etc/hosts、/etc/services、/etc/netgroup等
check-files service 

#设置缓存在服务器重启后,仍旧能提供缓存服务,在使用偏执模式时有用,默认是no
persistent service 

#为客户端共享nscd数据库在内存中做的映射,使客户端可以直接搜索,而不用每次都查询守护进行,默认是no
shared service 

#该数据库的最大大小,单位是bytes,默认是33554432
max-db-size service bytes

#此选项仅使用于passwd和group服务
auto-propagate service 

NSCD服务查看和清除
NSCD缓存DB文件在/var/db/nscd下。可以通过nscd -g查看统计的信息,这里列出部分:

$ nscd -g

nscd 配置:

              0  服务器调试级别
             4s  server runtime
              5  current number of threads
             32  maximum number of threads
              0  number of times clients had to wait
             no  paranoia mode enabled
           3600  restart internal
              5  reload count

... 省略输出信息若干 ...

hosts cache:

            yes  cache is enabled
            yes  cache is persistent
            yes  cache is shared
            211  suggested size
         216064  total data pool size
              0  used data pool size
             60  seconds time to live for positive entries
             20  seconds time to live for negative entries
              0  cache hits on positive entries
              0  cache hits on negative entries
              0  cache misses on positive entries
              0  cache misses on negative entries
              0% cache hit rate
              0  current number of cached values
              0  maximum number of cached values
              0  maximum chain length searched
              0  number of delays on rdlock
              0  number of delays on wrlock
              0  memory allocations failed
            yes  check /etc/hosts for changes

... 省略输出信息若干 ...

清除指定类型缓存

$ nscd -i passwd
$ nscd -i group
$ nscd -i hosts

除了上面的方法,重启NSCD服务同样可以达到清理Cache的目的。–本人验证无效~
所有要么清除缓存,要么直接关闭NSCD服务,NSCD域名解析大概率就能够成功。
关闭NSCD服务

[root@iZv61ak4bj68kuZ ~]# service nscd stop
Stopping nscd:                                             [  OK  ]
结果

通过以前方法进行排除后,已经可以正确的解析域名了。

[root@iZv61ak4bj68kuZ ~]# ping api.weixin.qq.com
PING api.weixin.qq.com (101.91.34.103) 56(84) bytes of data.
64 bytes from 101.91.34.103: icmp_seq=1 ttl=51 time=6.10 ms
64 bytes from 101.91.34.103: icmp_seq=2 ttl=51 time=6.10 ms
64 bytes from 101.91.34.103: icmp_seq=3 ttl=51 time=6.11 ms
64 bytes from 101.91.34.103: icmp_seq=4 ttl=51 time=6.10 ms
64 bytes from 101.91.34.103: icmp_seq=5 ttl=51 time=5.92 ms
64 bytes from 101.91.34.103: icmp_seq=6 ttl=51 time=5.94 ms
64 bytes from 101.91.34.103: icmp_seq=7 ttl=51 time=6.10 ms
64 bytes from 101.91.34.103: icmp_seq=8 ttl=51 time=5.93 ms
^Z
[2]+  Stopped                 ping api.weixin.qq.com

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5504130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存