可能的NXDOMAIN劫持?

我们在运行CentOS 6.0的主机上安装了两台Web服务器。 一个运行我们的主要营销网站(生产服务器),另一个是生产服务器的登台服务器,所以几乎是一个确切的副本。 他们都在防火墙后面,并有私人IP地址。 防火墙通过站点到站点VPN tunnell连接到我们的主要办公室。 这两个服务器的名称服务器都设置为在我们的主办公室使用我们的内部DNS服务器。

在生产服务器上,我面对的是完全相同的问题 ,即使是相同的主机名phx1-ss-2-lb.cnet.com。 问题是,只要我ping一个不存在的域名,我就会得到这个cnet.com主机名。 即使在我自己的域名,如果我做一些stupidsubdomain.mydomain.com,它返回与cnet地址。 在那个线程中,他们说这是NXDOMAIN劫持,他们应该使用不同的名称服务器。 在我的情况下,这个生产服务器使用与公司中其他人相同的名称服务器,但这对其他人来说不是问题。 即使是生产服务器镜像的登台服务器也没有问题。

我已经检查了/ etc / hosts文件,没有什么特别的。 我查了一下如何通过nscd或bind来刷新本地DNScaching,甚至都没有安装。 我使用nslookup并查询了我的两个指定的DNS服务器,他们回来时找不到域错误。

我应该在哪里看下?

编辑

我在端口53上使用了tcpdump,并且ping了一些乱码域,这是我得到的输出

14:55:39.884442 IP 192.168.4.11.59726> 192.168.0.22.domain:27749+ A? asdfjjjf.com。 (30)14:55:39.905778 IP 192.168.0.22.domain> 192.168.4.11.59726:27749 NXDomain 0/1/0(103)14:55:39.905930 IP 192.168.4.11.46752> 192.168.0.22.domain:18476 + A? asdfjjjf.com.com。 (34)14:55:39.926982 IP 192.168.0.22.domain> 192.168.4.11.46752:18476 2/0/0 CNAME phx1-ss-2-lb.cnet.com。,A 64.30.224.112(82)

14:55:39.962067 IP 192.168.4.11.44686> 192.168.0.22.domain:5275+ PTR? 112.224.30.64.in-addr.arpa。 (44)

14:55:39.983324 IP 192.168.0.22.domain> 192.168.4.11.44686:5275 1/0/0 PTR phx1-ss-2-lb.cnet.com。 (79)

所以如果我正在阅读这个权利,这是否意味着我的DNS服务器肯定是与cnet.com地址响应? 如果我使用nslookup,将其设置为192.168.0.22服务器,并查询一个Jibberish域Alogging,它返回什么也没有。

啊哈! 你有一个com的search后缀 – 你的第一个查询asdfjjjf.com得到了正确的NXDOMAIN ,而第二个asdfjjjf.com.com回来了准确的信息,显然是*.com.com的通配符CNAME 。 放下search后缀,你应该没问题。

现在正在进行更详细的讨论

http://centos.org/modules/newbb/viewtopic.php?topic_id=36693&forum=59

对“坪”使用“strace”已经明确表明,问题确实在于当地的图书馆。 跟踪显示DNS调用,而本地库确实在DNS请求重试时附加了一个额外的“.com”。 跟踪清楚地显示出该库提出“noexample.com”的DNS请求,然后尝试“noexample.com.com”,然后使用“noexample.com.com”的结果进行ping。

我在Codero上的专用服务器上看到了完全相同的情况。 这是一个完整的专用服务器,64位的CentOS 6,没有虚拟化,与Webminpipe理。 它不运行“命名”; 所有DNS查询都发送到Codero的内部DNS服务器。 与上面的例子一样,“ping”(以及任何使用getaddrinfo的)将在“.com”中给出一个不存在的域,并在CNET返回一个主机:

ping noexample.com PING phx1-ss-2-lb.cnet.com(64.30.224.112)56(84)字节的数据。 来自phx1-ss-2-lb.cnet.com(64.30.224.112)的64字节:icmp_seq = 1 ttl = 246时间= 11.8ms来自phx1-ss-2-lb.cnet.com(64.30.224.112)的64字节: icmp_seq = 2 ttl = 246时间= 12.0毫秒

但是,“nslookup”和“主机”没有find“noexample.com”。 所以Codero的DNS服务器没有这样做。

/etc/resolv.conf(由WebMin生成)就是这样的:

nameserver 69.64.66.11 nameserver 69.64.66.10

如果我尝试“noexample.net”,它不会find一个IP地址。 这只是一个.com问题。

我注意到,“getaddrinfo”现在试图在不能parsing的东西的末尾粘上一个“.com”。 如果我试图解决“示例”,它会find“example.com”。 所以我得到了一个logging的想法。

这看起来像一个“getaddrinfo”中的错误。 它不应该添加“.com”到已经有的东西。

这是怎么回事

我想我知道发生了什么事。 请参阅手册页“resolv.conf:

http://linux.die.net/man/5/resolv.conf

注意默认是什么:

域名本地域名。 这个域名中的大多数查询可以使用相对于本地域的短名称。 如果不存在域条目,则从由gethostname(2)返回的本地主机名确定域; 领域部分被认为是第一个'。'之后的所有东西。 最后,如果主机名不包含域部分,则假定根域。

在这种情况下,服务器的默认名称是“sitetruth.com”。 所以“域名部分”是“.com”,任何失败的查询都会附加“.com”。

为什么这不会一直发生? 由于大多数服务器都有一些托pipe服务分配的名称,如“gator123.hostgator.com”。 在这种情况下,默认域名是“hostgator.com”,这就是在失败的域名search中追加的内容。 如果你的服务器有一个双组件的名字作为它的主名,但是有一个问题。

“resolv”中的默认选项很糟糕。

回到原来的问题,问题只发生在生产服务器上,我敢打赌,生产服务器有一个像“companyname.com”这样的名称,而testing服务器有一个更长的名字,比如“test.companyname”。 COM”。 这足以造成这种情况。

设置“ndots”为0,或提供一个空的“search”行应该禁用此行为,但到目前为止,它不这样做。 所以我还没有修复。