【问题标题】:Access on-premise database from AWS services (e.g.: Lambda) via OpenVPN that is hosted inside an EC2 instance [closed]通过托管在 EC2 实例内的 OpenVPN 从 AWS 服务(例如:Lambda)访问本地数据库 [关闭]
【发布时间】:2021-01-19 10:41:45
【问题描述】:

我有一个托管 OpenVPN 服务的 EC2 实例。该公司有多个使用该服务与总部同步数据的小型站点。所以站点 1 的 IP 为 10.8.0.1,站点 2 的 IP 为 10.8.1.1,等等。

我想慢慢转向收集这些分布式数据并将其聚合到将托管在 AWS 上的数据仓库中。

有多种服务可以帮助这种方法 (AWS Glue),无论它是 ETL 还是基于流的。

我的问题是:我无法使用当前设置连接到本地网络。或者至少我不知道怎么做。我知道有 AWS 站点到站点 VPN 或 AWS Client VPN,但我们选择了当前选项来推出我们自己的 VPN。

问题是:有没有什么办法可以在当前设置下进行这项工作?

我认为也许有一种方法可以在 VPC 内分配一个内部 IP,该 IP 将使用 EC2 实例通过 OpenVPN 网络将数据传输到相应的客户端。例如:如果我告诉 Lambda 函数连接到托管在 192.168.0.1 上的数据库,它将被重定向到 EC2 实例,它会将 192.168.0.1 转换为 10.8.0.1 并将连接转发到该客户端。

我不是网络专家,所以我不知道这是否可以通过路由、NAT-ing 或其他方式完成。

【问题讨论】:

  • 在您深入尝试使用托管服务(如 Lambda)使用此设置之前,我建议您尝试使用自己的 EC2。因此,只需在同一个 VPC 上设置另一个 EC2 实例,看看您是否可以访问您的内部本地服务——这将允许您完成此设置的所有网络步骤。至少,您需要在您的 OpenVPN 实例上禁用源/目标检查,在路由表上配置您的本地 CIDR 以将该流量发送到您的 EC2 实例。这是您期望从这里得到的答案吗?
  • 你建议的方法也是可行的。主要问题不是“来源”(EC2、Lambda 等等),而是“如何”。正如我所说,我不知道如何配置您提到的内容(源/目标检查,路由表上的本地 CIDR)。请详细说明一下好吗?
  • 这简化了很多,因为测试也会更容易,因为您可以完全控制“源”(又名不是 Lambda)。谢谢你的解释,让我把一些细节写出来
  • 我们是否可以假设您的 OpenVPN 服务器已设置并正常工作(因此您的问题只是关于服务的使用),还是这也是您的问题的一部分?

标签: amazon-web-services amazon-ec2 routes openvpn


【解决方案1】:

我将把这个答案集中在设置的 AWS 部分,因为 OpenVPN 配置步骤广泛可用。在您的情况下,您正在寻找从本地到 AWS 的站点到站点 OpenVPN 配置。 https://openvpn.net/vpn-server-resources/site-to-site-routing-explained-in-detail/ 上有一个关于配置的 OpenVPN 端的很好的教程。 AWS 上 OpenVPN 配置的一些额外细节可以在 https://stackoverflow.com/a/19976330/891772 上找到(虽然截图有点过时,但大多数步骤仍然有效)。

网络

您应该将您的 AWS OpenVPN 放在您的 VPC (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario3.html) 上的“公共子网”(我们称之为 ovpn-subnet 并为其指定一个 192.168.255.0/24 范围)。公共子网只是路由表的默认目标 (0.0.0.0/0) 进入 Internet 网关的子网。这将允许您在 AWS 上的 AWS OpenVPN 访问互联网,并最终访问您的本地 IP。

除了该子网之外,您还应该有子网来将您的客户端服务器放置在 AWS 上。我们称它们为 client-subnet1 (192.168.0.0/24) 和 client-subnet2 (192.168.1.0/24)。注意:它们可以统称为192.168.0.0/23。确保您的 AWS OpenVPN 安全组仅允许来自 192.168.0.0/23 上的服务器的流量,以及来自您的本地 OpenVPN 的流量。

我还假设您已将另一个 EC2 实例部署到与您的 OpenVPN 服务器相同的 VPC/子网,因此可以更轻松地开始测试 - 在您对自己的简单设置充满信心后,您就可以开始展开测试了。

配置

您在 AWS OpenVPN 服务器上需要的最重要的事情是disable the source/destination check。这是 AWS 通常启用的一项安全功能,可防止 EC2 服务器接收不打算用于该实例的数据包。在您的情况下,由于服务器的行为类似于防火墙/路由器/网关/NAT 网关,因此它需要接收不打算发送给它的数据包。总之:转到您的 EC2 控制台,找到您的 OpenVPN 服务器,选择操作 > 网络,更改源/目标。检查。并确认您要禁用它。

接下来是在您的 VPC 上配置一个路由表,将流量发送到您的 OpenVPN 服务器。详细信息在同一 AWS 文档中的“Updating the main route table”项下。只需确保您对 OpenVPN 子网中的这些客户端子网有一个单独的路由表(因为您希望 OpenVPN 流量通过 Internet,而客户端通过您的 VPN)。为此,您将转到您的 VPC 控制台,选择“路由表”,创建一个新的路由表并与客户端子网 1 和 2 关联。进入路由表页面后,选择“路由”选项卡,单击“编辑路线”并选择“添加路线”。 “目标”字段应填写本地网络的 CIDR 块(可能是10.8.0.0/16?),对于“目标”,您应该选择实例,然后选择您的 OpenVPN 实例 ID。如果您的 OpenVPN 实例未显示在列表中,请确保您遵循了禁用源/目标检查。

检查点

此时,您基本上在您的 VPC 路由器上创建了一条规则,该规则说“任何前往 10.8.0.0/16 网络的数据包都不应在 AWS 内处理,而是发送到此 EC2 实例”。配置 OpenVPN 实例以实际访问您的本地网络是您的职责。

测试

此时,您可以尝试登录到您的测试 EC2 实例并与您的本地服务进行通信。

【讨论】:

  • 感谢您的回答。我听从了你的建议,但它部分满足了我的要求。您能否帮忙解决这部分问题:“配置 OpenVPN 实例以实际访问您的本地网络是您的职责。”?在我看来,我必须配置 OpenVPN 以允许来自172.31.0.0/16 的任何流量,对吗?我该怎么做?
  • 仅供参考:在完成您提到的所有操作后,我尝试设置一个测试实例并 ping OpenVPN 客户端。 ping 不成功,我只能 ping 10.8.0.1,这是 OpenVPN 服务器的 IP。
  • A 添加了更多关于网络配置的详细信息。希望对你有帮助!由于我不是专家,所以我不能说太多关于 OpenVPN 的配置。我从他们的文档中提供了一个链接,应该可以帮助你。我现在强调了一些重要的事情,例如您需要有多个子网和 2 个路由表(1 个用于您的 AWS OpenVPN 子网,另一个用于您的客户端)。你必须把你的问题分解成碎片:你需要第一个让 VPN 工作,我认为你已经做到了。只有在那之后,您才应该开始将客户端添加到等式中。
  • @SLOBY 让我知道这是否回答了您的问题和/或让您处于可以弄清楚后续步骤的位置。
猜你喜欢
  • 2018-04-18
  • 2019-11-25
  • 2019-01-28
  • 1970-01-01
  • 2020-11-10
  • 2012-03-14
  • 2019-06-26
  • 2020-03-14
  • 2021-11-23
相关资源
最近更新 更多