Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 强制AWS EC2实例对本地通信使用专用IP_Amazon Web Services_Ssh_Amazon Ec2_Acl_Aws Security Group - Fatal编程技术网

Amazon web services 强制AWS EC2实例对本地通信使用专用IP

Amazon 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从堡垒进入另一个子网。一切都会好起来的。不幸的是,我的堡垒正在尝试使用其公共

如果这个问题对这个社区来说是离题的,请原谅我;我找不到更合适的,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服务器,具有公共IP
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服务器。Idk
190.
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提供的解析程序。。。但很少有不做这些事情的理由。