报错如下
当某一个网址外网访问(即使用手机端或电脑端对网页进行访问)正常,而内网(网站服务器内网)使用curl对网页进行查看时,却报如下错误。
curl: (6) Couldn’t resolve host ‘xxxxxx’
原因及解决方法
原因:外网使用正常,证明提供服务未出问题。内部访问报错’dns找不到这个网址‘,可能是某dns服务器或dns解析出现了问题。
解决方法:
修改或添加dns(dns服务器地址可网上查询)
cat /etc/resolv.conf
nameserver 114.114.114.114
nameserver 223.5.5.5
补充
这水文怎么阅读量还挺多。
很多年前的时候写的很水的文档,没有具体介绍事件背景,导致很多人说是没联网什么的。这就很尴尬了,要是服务器没联网,外网访问为什么是正常的,又不是自己的笔记本突然忘了插网线和连wifi,导致出现这种问题。
起因是之前公司的devops自研的监控平台,它在某个项目的服务器中部署了一个监控节点(一个项目是一个机房环境或者云环境),它会用curl等方式探测一批内网和外网的web服务是否正常,并向主站发送结果。然后有天这个平台突然某个网站的频繁报错,于是以为是业务出现异常,访问业务的网站,结果都是正常的。接着一查,别的监控节点都没报警,某个地区的节点报警了,应该是这个机房的网络环境或者服务出问题了。
于是跳板机登录该网站所在的机房的内网服务器中。当时常用得做法是依次使用curl测试,先测试异常的链接,再把链接中的域名换成实例的IP 测试,看看是哪个实例请求不到,再处理,因为那时候常有发生,以为是服务本身出现了问题。结果当时测试其他外网链接的时候正常,再测试报异常的那条链接,其他节点包括电脑访问它都正常,就这个机房怎么测那个服务的链接和域名都报这个错,因此没联网这个问题是不存在的,可能是dns问题。 然后排查resolv.conf,发现这个项目的服务器dns走的是内网,给常用网站做了解析,但没给监控的那个网站的域名做解析,导致解析不到出现问题。后来还是修改了dns为常用的外网dns,把部分服务依赖的域名,在这个机房的服务器内批量的在hosts配置域名解析了。
原因就是监控平台添加了个web监控,推送到了各个监控节点了,结果某个地区的服务器配置的是内网dns,这个监控节点无法解析这些网站,导致了web链接报错。
还有几种可能也会导致这个报错:
1、没联网或笔记本上的内网dns限制了。这个常见于笔记本电脑,不会在服务器上出现,要是服务器出现这问题,反而更加直观。服务完全无法访问,服务器连都连不过去,zabbix等监控会有报警。
2、如果换到云服务器环境,应该考虑的是服务器的安全组出方向可能被阻止了,需要手动添加规则。
3、可能是服务器上iptables等防火墙规则导致,但是根据部分公司的习惯来说,通常机房有硬件防火墙,内网的服务中通常是很少设置iptables规则的,避免引入问题和方便使用。有时候只是等保的时候设置几条能看的,nginx服务器上配置些ip黑名单,排查问题可以顺便查看一下。
4、也有可能是WAF限制了访问。常见于技术好的学校机房或者安全性高的环境。
这个要看是哪方在维护,在WAF平台上查看就知道了。
如果WAF不是你维护的,可以从其他地方看到。
访问网站的表象都是无法访问,但是拦截特征响应常返回403 Forbidden、406 Not Acceptable或429 Too Many Requests,而非服务器原生的404/500错误;而且通常拦截页面内容会有带品牌标识的拦截页,内容包含Blocked by WAF、Captcha required等关键词。
curl 的报错到不是这个报错,-v输出若出现X-Protected-By: WAF、Server: cloudflare等自定义Header,即证明流量经WAF过滤
可以搜索一下其他查看方法,我也只见过网页上拦截带品牌。这时候要是其他方维护的,让你的网站无法访问,你上面有领导就得先报告一下,然后这个得想办法要联系对方,问一下为什么拦截了,是过节日,是有要整改的,还是误拦截了?有没有提前通知?基本时间是在沟通等待,这个得看网站的重要程度,得看用户多不多,有没有重大活动,哪边的领导是否着急。不管如何要形成完整的证据链,别忘了截图和通报起因经过结果。