将防火墙后面的 mongodb 流数据服务器暴露给互联网

将防火墙后面的 mongodb 流数据服务器暴露给互联网

我在 Windows 平台上拥有流数据,我以每秒约 800 个数据点的相当高的速度将其捕获到 Mongodb 中。我希望能够从公司外部访问这些数据,但公司不希望将 27017 (mongod) 端口转发到外部世界。我已经设置了授权并为 ssl 编译了 mongod。

我如何将 Mongo 暴露给外部服务器?我的服务器位于“免费”互联网的另一个位置,我希望它每 10 秒从服务器获取最新的 1000 个数据点。如果我无法进行端口转发,我该怎么做?

我可以让 mongo 服务器以某种方式将数据“推送”到外部服务器(具有固定 IP)吗?FTP 不是一个解决方案,因为数据流太快了(我认为)。

我可以使用 http 或其他协议以某种方式将其流式传输出去吗?

理想情况下,我希望能够“本机”访问 mongo 服务器,因为这样我就可以使用可跟踪游标,因此任何接近此功能的解决方案都是不错的选择。但是,如果这不可能或不切实际,那么从受防火墙保护的服务器到外部服务器的流式推送解决方案也适用于我。

答案1

如果您的私人服务器始终处于在线状态,并且您的公司同意您使用 VPN(这是一个很大的如果,请与 IT 部门核实),我会使用 openVPN 和可能的 MongoDB 副本集。

OpenVPN 的安全/工作量比相当好 - 它作为大多数 Linux 发行版的标准包提供,在配置文件上运行,有许多教程,使用静态密钥(简单设置)或 TLS(每个客户端/服务器一个密钥)。
OpenVPN 操作指南
您的“外部”服务器将是 VPN 服务器,并且 MongoDB“主服务器”将在启动时自动连接到该服务器。

在您的服务器连接后,您需要选择是否要通过 VPN 查询“主”服务器,或者使用“外部”上的辅助 MongoDB 服务器进行同步,然后查询它。
MongoDB 的副本集允许一台服务器与主服务器保持“同步”。它通常用于容错,但您也可以将其用于自己的目的。
MongoDB 地理冗余副本集.
确保“外部”服务器不参与投票,且优先级为 0(意味着它不会参与集群计算)

最好向 IT 人员透露整个解决方案,并在开始依赖它执行与生产相关的任务之前对其进行测试

答案2

一种可能性是设立一个SSH 隧道这将用于您的 Mongo 数据库连接。SSH 隧道将加密 Mongo 流量,SSH 隧道是一种众所周知的技术。

看:

答案3

关于隧道已经有很好的建议(其中我更喜欢 OpenVPN),但在这里我将建议一种不同的方法。

为了获取特定的数据集,您不必将整个 mongodb 数据暴露给远程服务器,而是最好构建一个更紧密聚焦的 Web API,该 API 可以在任一位置运行。

  1. 您可以在 mongodb 服务器计算机上或靠近它(并在防火墙内)运行脚本或守护程序,以本机方式访问 mongodb,然后打包数据并将其推送到远程 Web 服务器上的 API。 REST 和 JSON 可能是您在设计 Web 服务器上的 API 时要考虑的东西。
  2. 或者,您可以拥有一个靠近 mongodb 服务器的 Web 服务器,该服务器可以从远程 Web 服务器访问。您可以在 mongodb 服务器本地的 Web 服务器上实现合适的 API,然后通过从远程 Web 服务器调用该 API 来从该 API 中提取数据。

哪种方法效果更好主要取决于公司网络内是否有适合运行程序的地方,以及所涉及的网络策略。您可以严格锁定对 API 的访问,以满足网络管理员的顾虑。例如,通过 IP 锁定访问,要求进行适当的身份验证,或许将其锁定到特定的 SSL 密钥。

如果可能的话,最有效的方法可能是运行一个靠近 mongodb 服务器的守护进程,该守护进程使用您提到的可尾游标,并将数据发送到远程 Web 服务器上的 API。

相关内容