3

如果这个问题对这个社区来说是题外话,请原谅我;我找不到更合适的,而且 StackOverflow 总是在我需要的时候出现!

我正在尝试使用 Amazon EC2 设置堡垒主机。我希望连接到我的任何实例的唯一方法是来自此堡垒实例的 SSH。包含堡垒的公共子网使用 CIDR 块 10.0.128.0/17,而包含我的其他实例的子网使用 CIDR 块 10.0.0.0/17。我有网络 ACL 和安全组规则,允许 SSH 从堡垒出口到另一个子网,并允许 SSH 从堡垒进入另一个子网。一切都应该工作。不幸的是,我的堡垒正在尝试使用它们的公共 IP 与其他实例通信,这当然不在 10.0.0.0/17 块中,因此流量被阻止。如何确保我的堡垒在与私有子网中的其他实例通信时使用私有 IP 地址?这似乎应该是 VPC 中本地流量的默认行为,但显然不是!

编辑:

我遗漏了一些关键信息。给我带来麻烦的“私人”实例实际上是公开的;它是一个带有公共 IP 52.14.20.167(请不要发送垃圾邮件)和自定义wwwDNS 名称的 Wordpress 网络服务器。然而,虽然我希望我的堡垒能够使用该 DNS 名称通过 SSH 连接到它,但我仍然希望所有 SSH 流量都是本地的,以便我的安全组和网络 ACL 可以非常严格。根据此 AWS 文档

我们将公共 DNS 主机名解析为实例网络外的实例的公共 IPv4 地址,以及实例网络内的实例的私有 IPv4 地址。

但是,我认为此规则仅适用于 AWS 提供的(类似 IP)公共 DNS 名称。我的自定义DNS 始终解析为公共 IP,而不是私有 IP,如下面我的堡垒子网的流日志中所示。 10.0.128.6是堡垒,52.14.20.167也是网络服务器。Idk190.14.地址是什么。所以我更有根据的问题是,如何让自定义 DNS 名称解析为同一 VPC 中堡垒主机和第二个实例的私有 IP?

10.0.128.6  52.14.20.167    56008   22  6   7   420 1485465879  1485465996  REJECT  OK
190.173.143.165 10.0.128.6  27754   22  6   1   40  1485466241  1485466296  REJECT  OK
10.0.128.6  52.14.20.167    56012   22  6   7   420 1485466903  1485467016  REJECT  OK
190.13.10.206   10.0.128.6  28583   22  6   1   40  1485467140  1485467197  REJECT  OK
10.0.128.6  52.14.20.167    56014   22  6   7   420 1485467437  1485467557  REJECT  OK
14.158.51.244   10.0.128.6  55532   22  6   1   44  1485467500  1485467557  REJECT  OK
4

2 回答 2

3

在与 OP 反复提问/回答后,我们确定问题的根本原因之一是使用自定义 DNS 名称。

用户将访问堡垒主机,并从那里将自定义DNS 名称解析为相关 EC2 实例的公共 IP 地址。这就是来自堡垒主机的流量没有使用 EC2 实例的私有 IP 地址的原因。使用 EC2 实例的私有IP 地址的关键是从 AWS解析该实例的 AWS 分配的公共 DNS 主机名。正如 OP 从 AWS 文档中指出的那样,AWS 分配的公共 DNS 主机名将解析为来自AWS外部的公共 IP 地址,但将解析为来自 AWS内部的私有IP 地址。因此,关键是让用户使用 AWS 分配的公共 DNS 主机名。

保持使用自定义 DNS 主机名仍然从堡垒主机解析为 EC2 实例的私有 IP 地址的一种方法是使自定义 DNS 名称成为CNAME记录(而不是A记录),它指向AWS 分配的公有 DNS 名称。是的,这需要在出现新的/不同的 EC2 实例时更新该 DNS 记录,但无论如何都需要进行此类更新,以使A记录指向新的公共 IP 地址。通过使用 a CNAME,事情应该按需要工作。

希望这可以帮助!

于 2017-01-27T17:18:00.983 回答
0

为您的 ec2 实例设置 DNS 时,您需要使用 CNAME 记录而不是 A 记录。假设您有一个带有 url my-site.com 的 www 站点。如果您放置 DNS 记录my-site.com A your_public_ip example my-site.com A 52.14.20.167 ,如果您尝试从您的 VPC 内部的任何服务器访问该 URL,您的流量将超出 aws VPC。

为避免这种情况,您需要将该记录更改为 my-site.com CNAME your_EC2_instance_AWS_DNS_address

例子: my-site.com CNAME ec2-XX-YY-ZZZ-17.eu-west-1.compute.amazonaws.com

这样,如果您在 AWS 之外访问您的 www 服务,您的公共 IP 将得到解析,而在 AWS VPC 内部,您将获得服务的私有地址,并且流量将留在 AWS VPC 内。

于 2022-02-07T13:33:07.303 回答