我有多个 Amazon EC2 实例需要使用私有 IP 进行通信。但是,到目前为止,我无法从另一个实例 ping 一个实例的私有 IP。
我可以 ping 外部地址,比如它们的弹性 IP 和其他网站(yahoo、google 等),所以看起来实例的网络配置没有任何问题。
此外,它们都在同一个区域,所以这不应该是个问题。
有人知道我可能做错了什么吗? 这可能与安全组设置有关吗?
答案1
事实证明,问题毕竟出在安全组设置上。
我一直在限制 IP 流量,因此只有我的外部 IP 可以与实例通信。我以为安全组不适用于实例之间的通信,但事实并非如此。
解决方案是还允许来自 10.0.0.0/8 的流量,该地址涵盖所有可能的 EC2 私有 IP。只允许来自特定私有 IP 的流量会更安全,但这很麻烦,因为它们可能会更改。
这暂时解决了我的问题。最好的解决方案可能是利用 Amazon 的 API 在实例停止和启动时自动调整安全组 IP 限制。
答案2
根据 AWS 常见问题解答,只要您不停止实例……您的私有 IP 将保持不变。
问:我是否需要为每个正在运行的实例分配一个弹性 IP 地址?否。您不需要为所有实例分配弹性 IP 地址。默认情况下,每个实例都带有一个私有 IP 地址和一个可路由到 Internet 的公有 IP 地址。私有地址专门与实例关联,并且仅在实例停止或终止时返回到 Amazon EC2。公有地址专门与实例关联,直到实例停止、终止或被弹性 IP 地址替换。对于许多不需要长期可路由到 Internet 的端点的应用程序,这些 IP 地址应该足够了。计算集群、Web 爬取和后端服务都是通常不需要弹性 IP 地址的应用程序的示例。
答案3
“安全组设置不影响内部 IP”的说法是错误的。您必须将入站流量添加到私有 IP 的安全组,就像外部 IP 一样。
我必须从特定的私有 IP 添加条目,以便我可以允许一个实例使用 subversion、CouchDB、映射网络驱动器等连接到另一个实例。
但是,ping 有所不同...请检查安全设置是否设置为 ICMP,或者只是设置为“所有流量”。而
不仅仅是 TCP。因为 PING 是 ICMP 消息。不要以为只要您打开“所有 TCP”,它就会正常工作。
希望有所帮助。
答案4
安全组设置不会影响内部 IP,因为它们是在集群网关上强制实施的。
由于实例位于同一区域,您可以检查实例防火墙是否已激活,是否接受 ping 请求(ICMP 回显)
否则,尝试生成第三个实例并对它们两个进行 ping 操作,如果成功,则可能是由于其中一个实例的主机服务器上存在问题