Amazon web services 强制AWS EC2实例对本地通信使用专用IP
如果这个问题对这个社区来说是离题的,请原谅我;我找不到更合适的,StackOverflow总是在我需要的时候出现 我正试图用AmazonEC2建立一个堡垒主机。我希望连接到我的任何实例的唯一方法是来自这个bastion实例的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 web服务器,具有公共IPAmazon web services 强制AWS EC2实例对本地通信使用专用IP,amazon-web-services,ssh,amazon-ec2,acl,aws-security-group,Amazon Web Services,Ssh,Amazon Ec2,Acl,Aws Security Group,如果这个问题对这个社区来说是离题的,请原谅我;我找不到更合适的,StackOverflow总是在我需要的时候出现 我正试图用AmazonEC2建立一个堡垒主机。我希望连接到我的任何实例的唯一方法是来自这个bastion实例的SSH。包含堡垒的公共子网使用CIDR块10.0.128.0/17,包含我的其他实例的子网使用CIDR块10.0.0.0/17。我有网络ACL和安全组规则,允许SSH从堡垒进入另一个子网,并允许SSH从堡垒进入另一个子网。一切都会好起来的。不幸的是,我的堡垒正在尝试使用其公共
52.14.20.167
(请不要垃圾邮件lol)和自定义的www
DNS名称。然而,虽然我希望我的堡垒能够使用该DNS名称通过SSH连接到它,但我仍然希望所有SSH通信都是本地的,这样我的安全组和网络ACL就可以非常严格地限制。根据:
我们将公共DNS主机名解析为
实例的网络之外的实例,并连接到专用IPv4
实例网络中的实例地址
然而,我认为这条规则只适用于AWS提供的(类似IP的)公共DNS名称。我的自定义DNS总是解析为公共IP,而不是私有IP,如下面我的堡垒子网的流量日志所示10.0.128.6
是堡垒,52.14.20.167
是web服务器。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
在与OP反复询问/回答一些问题后,我们确定问题的根本原因之一是使用自定义DNS名称 用户将访问bastion主机,并从那里将自定义DNS名称解析为相关EC2实例的公共IP地址。这就是为什么来自堡垒主机的流量没有使用EC2实例的私有IP地址。使用EC2实例的私有IP地址的关键是从AWS中解析该实例的AWS分配的公共DNS主机名。正如OP在AWS文档中指出的,AWS分配的公共DNS主机名将从AWS外部解析为公共IP地址,但将从AWS内部解析为私有IP地址。因此,关键是使用AWS分配的公共DNS主机名获取用户 保持自定义DNS主机名的使用,并且仍然从bastion主机解析EC2实例的私有IP地址的一种方法是使自定义DNS名称成为
CNAME
记录(而不是a
记录),该记录指向AWS分配的公共DNS名称。是的,这需要在出现新的/不同的EC2实例时更新DNS记录,但无论如何都需要这样的更新,以便a
记录指向新的公共IP地址。通过使用CNAME
,事情应该按预期进行
希望这有帮助 从bastion主机,您是否使用DNS名称或IP地址来访问这些其他实例?如果使用DNS名称,这些DNS名称在该堡垒主机上解析到什么IP地址?“这似乎应该是VPC中本地流量的默认行为,但显然不是!”当然,除非您错误地诊断了问题。。。你是谁。VPC中的一个实例永远不会尝试使用其自己的公共IP与另一个实例的私有IP通信,即使您希望它这样做。你认为为什么会发生这种情况?你的路线表的内容是什么?谢谢大家的评论,这是非常有用的@卡斯塔利亚堡垒使用DNS,这些名称正在解析为公共IP,所以这一定是个问题。我决不会抓到那个!那么,在这样的场景中,最好的做法是什么,创建解析到私有IP的附加a记录?@Michael我完全不会让自己误认为lol。但是,在这种情况下,我在bastion的公共子网上放置了一个流日志,被拒绝的SSH通信拥有bastion的公共IP作为“发件人”地址和另一个实例的“to”地址的私有IP,因此我进行了诊断。然而,鉴于我之前的评论,现在我不确定第二个实例的私有IP是如何解决的。EC2是否足够聪明,可以在本地通信期间计算出私有IP?拆分解析行为的引用:。为了方便将来的访问者,请注意,要使其工作,需要在专有网络中启用启用启用DNShostName和
启用DNSSSupport
,并且您必须使用AWS提供的解析程序。。。但很少有不做这些事情的理由。