【发布时间】:2018-11-20 06:05:54
【问题描述】:
我正在尝试使用Node.js DNS resolve 来查找属于我的域的IP 地址(我们称之为host.mydomain.com)。如果 host.mydomain.com 的查找是从 host.mydomain.com 实际指向的服务器完成的,它会返回服务器的本地 NIC IP 地址 (192.168.0.10),而不是服务器的外部 IP 地址。
使用相同的代码从外部计算机对host.mydomain.com 进行主机查找会返回预期的外部 IP 地址。更重要的是,我在另一个环境中有一个不同的服务器,称为host.otherdomain.com,它在使用相同的代码进行查找时确实正确地返回了自己的外部 IP 地址。
我的主机文件中没有任何可以覆盖它的内容。两个域都来自同一个 DNS 提供商,并且都是通配符域。
我的代码:
var dns = require('dns');
dns.setServers([ "8.8.8.8", "8.8.4.4" ]);
domain="host.mydomain.com";
dns.resolve(domain, function (error, addresses) {
console.log("Error: ", error); // null
console.log("DNS servers: ", dns.getServers()); // [ '8.8.8.8', '8.8.4.4' ]
console.log(domain + " resolves to: ", addresses); // [ '192.168.0.10' ]
});
我目前在所有服务器上都使用 Node.js 6。
【问题讨论】:
-
您说您的代码在另一个环境中运行。所以问题可能在于您的环境而不是您的代码。 8.8.8.8 是否有可能路由到您特定环境中的内部 DNS 服务器。您在尝试其他公共 DNS 服务器时是否遇到同样的问题? (见lifewire.com/free-and-public-dns-servers-2626062)。
-
当您从内部服务器对您的域进行挖掘时,您会得到什么?通过挖掘,检查底部提供答案的解析器。如果不是 Google,请使用 @8.8.8.8 重新进行挖掘。您的主机文件中可能没有任何明确的内容,但听起来您在解析路径中配置了导致此问题的内容。
-
@KMo 现在看来我们的 DNS 很可能被某些东西劫持了,是的。该服务器位于 IBM 数据中心,我已经向他们发送了支持请求。使用其他 DNS 服务器时也会出现同样的问题。无论我尝试使用哪个 IP,
nslookup mydomain.com dns_ip和dig mydomain.com @dns_ip都会返回本地 NIC 地址。 -
不幸的是,@Renée
dig @8.8.8.8 mydomain.com返回相同的结果。也尝试了其他几个 DNS IP,结果相同。 -
如果您尝试查找非本地域的内容,您的代码是否会为您提供非本地 IP?一些共同的东西或您的其他已知领域?您的名称服务器在这台机器之外吗?如果是,那么我会进行数据包捕获以查看真正穿过接口的内容。如果不是,则怀疑某个区域或常规 conf 文件中存在某些内容。