为什么我在一个区域中的ec2试图在另一区域中使用另一个ec2实例的私有IP?

时间:2018-06-27 02:36:01

标签: amazon-web-services amazon-ec2

我们公司在aws EC2实例中有一个github设置。当然,这将具有私有/公共IP。

我在不同的区域设置了两个ec2实例。

但是,当我尝试从一个实例连接到我们公司的github时,它将使用github实例的公共ip。在这种情况下,连接成功,我可以克隆并进行操作。

但是另一个将使用github实例的私有IP。在这种情况下,它无法连接到github实例。

BTW,第二个(失败的)从设置github实例的区域迁移到另一个区域。保存了AMI并在新区域中重新启动了它。

这是一个描述我的症状的例子。

我会假设:

  • instanceA:将ec2实例迁移到新区域
  • instanceB:在新区域中新创建的ec2实例
  • github实例:域名为“ git.blahblah.com”。它的私有IP为172.31.xx.xx,公共IP为52.78.xx.xx

实例A

$ ping git.blahblah.com
PING git.blahblah.com (172.31.xx.xx) 56(84) bytes of data.

实例B

$ ping git.blahblah.com
PING git.blahblah.com (52.78.xx.xx) 56(84) bytes of data.

是什么原因引起的?解决这个问题有什么提示吗?


我已经通过`$ cat /etc/resolv.conf

检查了DNS设置。

实例A

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.30.0.2
search us-west-2.compute.internal

实例B

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.30.0.2
search us-west-2.compute.internal

instanceA和instanceB的安全组相同。 VPC ID,instanceA和instanceB的子网ID相同。

2 个答案:

答案 0 :(得分:1)

我真笨。

原因是在实例A(从不同区域迁移)中,/etc/hosts文件中有一些配置,这些配置迫使git.blahblah.com引用它的私有IP。

$ cat /etc/hosts
127.0.0.1 localhost
172.31.xx.xx git.blahblah.com

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

我从172.31.xx.xx git.blahblah.com文件中删除了hosts行之后,它起作用了。

对不起我的愚蠢人。

答案 1 :(得分:0)

由于您的实例与github实例位于不同的区域,因此它们不在同一网络上,因此它们无法连接到私有IP地址。

如果您希望他们通过相同的ip地址连接在一起,则它们需要位于同一VPC中,并且要到达那里,它们必须位于同一区域(但不在同一可用区域中)

  

私有IPv4地址是无法通过以下地址访问的IP地址:   互联网。您可以使用专用IPv4地址进行之间的通信   同一网络(EC2-Classic或VPC)中的实例。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-private-addresses