【问题标题】:Node.js dns.resolve not returning correct IP addressNode.js dns.resolve 未返回正确的 IP 地址
【发布时间】: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 文件中存在某些内容。

标签: node.js dns


【解决方案1】:

在我的情况下,问题出在托管机器的 IBM 数据中心。它在他们的工作人员设置的经过修改的 vCenter 设置上运行,并且正在使用 DNS 做一些时髦的事情。我知道 vCenter 有 Linux 来宾集成,我不确定这是否是问题的一部分。

所以简而言之,我想解决方案是确保您的环境(在我的情况下是数据中心)不会给您带来麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 2015-07-26
    • 2016-09-09
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多