Firebase反向dns查找ENOTFOUND错误node.js dns

时间:2018-01-31 17:29:04

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

Hello 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地址。
  5. 这是为节点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主机上的localhost上执行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' }
    

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

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

    可能存在服务器设置,这可能会阻止进行反向DNS查找,但允许解析?

1 个答案:

答案 0 :(得分:0)

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

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