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

时间:2017-01-26 22:17:30

标签: amazon-web-services ssh amazon-ec2 acl aws-security-group

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

修改

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

  

我们将公共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 个答案:

答案 0 :(得分:2)

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

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

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

希望这有帮助!