【问题标题】:Firebase reverse dns lookup ENOTFOUND error node.js dnsFirebase 反向 dns 查找 ENOTFOUND 错误 node.js dns
【发布时间】:2018-01-31 17:29:03
【问题描述】:

您好 Stackoverflow 社区! :)

我有一个在 Firebase 上运行的云功能,它用作 API,还有另一个服务器 (fitbit.com),它偶尔会向我的服务器发布数据。

作为安全功能之一,我想做一个 Forward-Confirmed Reverse DNS,基本上如下:

  1. 我在端点上收到来自 IP 169.45.142.104 的 POST。
  2. 我执行反向 DNS 查找以检索服务器的主机名。
  3. 验证这是否返回 fitbit.com 的子域(示例中的 IP 应解析为 ['api-169-45-141-216.fitbit.com'])。
  4. 然后,我对该主机名进行 DNS 查找并验证它是否解析 到原始请求的 IP 地址。

这是为 node v6.11.1 编写的源代码(它在 Util 类中.. :))

static fcrDns(ipAddress, cb) {
        const reverse = Q.denodeify(dns.reverse);
        const resolve4 = Q.denodeify(dns.resolve4);
        return reverse(ipAddress).then(hostNames => {
            console.log("hostNames: ", hostNames);

            if (!hostNames.every(SecurityUtils._isFitbitSubDomain)) {
                return Promise.reject("Hostname did not end with .fitbit.com");
            } else {
                return Promise.all([...hostNames.map(hostName => {
                    return resolve4(hostName)
                        .then(resolvedAddresses => {
                            if (resolvedAddresses.every(address => address === ipAddress)) {
                                return Promise.resolve(true);
                            } else {
                                return Promise.reject("Resolved address did not equal to initial IP address");
                            }
                        })
                })]);
            }
        });
    }

    static _isFitbitSubDomain(hostName) {
        return hostName.endsWith(".fitbit.com");
    };

现在,问题是:如果我在 windows 和 linux 主机上执行 firebase serve --only 功能,这将非常有效。

但是,一旦将其部署到 Firebase 并执行,我会收到以下错误:

{ Error: getHostByAddr ENOTFOUND 169.45.142.104
    at errnoException (dns.js:28:10)
    at QueryReqWrap.onresolve [as oncomplete] (dns.js:219:19)
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getHostByAddr',
  hostname: '169.45.142.104' }

据我了解node的源代码,这意味着它无法执行反向IP查找。

但是,正如我所测试的,解析主机名可以正常工作。

可能有一个服务器设置可以阻止反向 dns 查找,但允许解析?

【问题讨论】:

  • 您的 Firebase 项目采用什么付款计划?
  • 它在火焰计划中
  • 有趣,我会在内部提交一个错误。通常,我们会根据 DNS 查找打开 IP,如果用户使用付费计划或 DNS 地址是列入白名单的 Google API,则允许使用它们。反向 DNS 似乎是一个合理的用例,我们应该研究一下可以做什么。
  • 非常感谢您的意见和帮助@ThomasBouldin!我已经用我得到的完整错误响应编辑了我的问题,也许这将有助于跟踪错误。否则,请告诉我是否可以提供更多信息或帮助。

标签: node.js firebase dns google-cloud-functions


【解决方案1】:

我与 Cloud Functions 后端团队进行了交谈,他们目前不允许反向 DNS 查找。这是可以改变的,所以我会鼓励你file a feature request 详细说明为什么这对你很重要。同时在 SO 上提供此问题的链接。

编辑:看起来进行了更改以允许这样做,但我不清楚它是否已经可用,或者何时可用。

【讨论】:

  • 作为对编辑的回复:到目前为止,我仍然收到原始错误响应,所以我们希望该功能能够在某个时候使其生效。 :)
  • @ZoltánTudlik 我能够在一个简单的函数中反转 DNS OK,除了这个之外什么都不做。项目正在 Blaze 计划中。
  • 确实,我今天刚刚检查过,确实该功能现在正在运行。非常感谢你们的工作!
  • @ZoltánTudlik 似乎它可能会再次被禁用?我看到问题中提到的 ENOTFOUND 错误。
  • @ChrisChiasson 我不确定,抱歉,我不再积极使用 Firebase。
猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 2018-05-24
  • 2016-09-24
  • 2015-09-27
  • 2021-07-08
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多