首页 文章

强制AWS EC2实例使用专用IP进行本地流量

提问于
浏览
1

如果这个问题不属于这个社区,请原谅我;我找不到更合适的一个,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中本地流量的默认行为,但显然不是!

EDIT:

我遗漏了一些关键信息 . 给我带来麻烦的"private"实际上是公开的;它是一个Wordpress网络服务器与公共IP 52.14.20.167 (请不要垃圾邮件大声笑)和自定义 www DNS名称 . 但是,虽然我希望我的堡垒能够使用该DNS名称连接到它,但我仍然希望所有SSH流量都是本地的,这样我的安全组和网络ACL可能会非常严格 . 根据this AWS doc

我们将公共DNS主机名解析为实例网络外部实例的公共IPv4地址,并从实例网络中解析实例的私有IPv4地址 .

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

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

1 回答

  • 1

    在与OP来回回答一些问题后,我们确定问题的根本原因之一是使用自定义DNS名称 .

    用户将访问堡垒主机,并从那里将自定义DNS名称解析为相关EC2实例的公共IP地址 . 这就是来自堡垒主机的流量未使用EC2实例的原因' private IP addresses. The key to using an EC2 instance'的私有IP地址是从AWS内部解析该实例的AWS分配的公共DNS主机名 . 正如OP文档中提到的那样,AWS分配的公共DNS主机名将从AWS外部解析为公共IP地址,但将从AWS内部解析为私有IP地址 . 因此,关键是让用户使用AWS分配的公共DNS主机名 .

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

    希望这可以帮助!

相关问题