【问题标题】:How can one connect from Heroku to a firewalled host to get data from MongoDb?如何从 Heroku 连接到防火墙主机以从 MongoDb 获取数据?
【发布时间】:2016-01-07 22:57:54
【问题描述】:

我目前正在开发一个服务应用程序,它可以从 Mongo 中提取数据并将其返回给消费者。涉及到一层身份验证,我使用 Heroku 来托管服务。 Mongo 托管在 MongoLabs 上,但存在一些重大的性能问题,因此我们已将 Mongo 托管在我们的其中一台云服务器上。我们希望能够使用防火墙保护对 Mongo 的访问,将 Heroku 上服务应用的 IP 地址列入白名单。

这有几个问题。

问题

嗯,至少这些是主要的......

  1. Heroku 在提供一些不错的功能(例如轻松管理集群设置、软件升级等)的同时,还从池中提取 IP 地址。虽然应用程序 url 的 dns 值可能不会改变,但底层 IP 地址可以并且将会改变。
  2. 为了更好地保护,mongo-server01 位于防火墙后面,需要使用静态 IP 地址添加规则以允许访问。

由于 Heroku 无法提供静态 IP 地址,我们需要考虑 Heroku 如何访问mongo-server01,同时仍保护其托管的数据。

出站请求的静态 IP 地址

似乎有几个选项,特别是对于 Heroku。 FixieQuotaGuard Static 似乎都提供该功能,但它们似乎只针对 HTTP 和 HTTPS 通信(甚至可能不是 HTTPS)。

Mongo 不使用 HTTP,默认情况下它使用自己的网络协议通过端口 27017 https://groups.google.com/forum/embed/#!topic/mongodb-user/eX_RIv2cZVw

这是否意味着这些代理不适用于对 Mongo 的调用?从理论上讲,似乎没有任何理由认为代理仅适用于 HTTP 或 HTTPS 请求。话虽如此,似乎没有任何方法可以进入这些 Heroku 插件并将代理配置为使用不同的端口或处理 Mongo 的特定协议。

如果我们可以进入代理,也许我们可以放置一组额外的 ssh 密钥,以便 ssl 隧道链可以继续到mongo-server01。但是没有任何方法可以通过 ssh 连接到这些代理或通过插件仪表板访问配置。

问题(终于!)

如何从 Heroku 连接到防火墙主机以从 MongoDb 获取数据?有没有可以用来实现这一点的代理?

简单的方法。无法工作,因为 Heroku 应用程序不使用静态 IP 地址。

使用代理。 Heroku 代理插件不知道如何代理 mongodb 协议。无法在代理上为 ssh 隧道安装 ssh 密钥。

如何在不向世界开放 Mongo 服务器的情况下获得连接?

【问题讨论】:

    标签: mongodb heroku ssh proxy outbound


    【解决方案1】:

    我与 QuotaGuard 的人交谈过,他们确实有一些可以解决问题的方法。

    我们提供了一个 SOCKS 代理,它在 TCP 层代理应该可以解决问题

    https://devcenter.heroku.com/articles/quotaguardstatic#socks-proxy-setup

    我确实需要对bin/qgsocksify进行简单的更改

    #SOCKS_DIR="$(dirname $(dirname $(readlink -f ${BASH_SOURCE[0]})))/vendor/dante
    SOCKS_DIR="${HOME}/vendor/dante"
    

    在那之后,代理就像一个魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多