2

我目前正在开发一个服务应用程序,它从 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 服务器的情况下,如何获得连接?

期望的结果

4

1 回答 1

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"

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

于 2015-10-15T12:53:04.560 回答