【问题标题】:Why can't I ping an aws instance by public IP even though I can ping the private IP just fine?为什么我不能通过公共 IP ping aws 实例,即使我可以 ping 私有 IP 就好了?
【发布时间】:2017-05-20 02:23:01
【问题描述】:

我有两个实例(实例 A 和实例 B)都属于同一个安全组(例如 sg-1)。

安全组具有以下入站规则集:

  • 类型:所有流量
  • 协议:全部
  • 端口范围:全部
  • 来源:sg-1

我可以使用实例 B 的私有 IP 从实例 A ping 实例 B,但是当我使用实例 B 的公共地址时,我没有得到任何响应。

我错过了什么?

编辑:
如果我将上述安全配置中的源更改为“Anywhere”,则可以 ping 到公共 IP。

【问题讨论】:

标签: amazon-web-services amazon-ec2


【解决方案1】:

只有当您 ping 实例 B 的 private 地址时没有得到响应时,您才会感到惊讶。

您子网的路由表会将公共地址路由到您的 VPC 外部。当它离开 VPC 并返回流量时,源地址将是公共 IP(或 NAT IP),而不是私有 IP。路由表排在安全组之前。当您将流量发送到另一台机器时:

  • DNS 名称解析为 IP
  • 在您的情况下,您指定了一个 IP,因此不会进行 DNS 解析
  • 如果地址属于路由表规则之一,则会进行相应的路由
  • 当您指定私有 IP 时,它很可能在内部路由并且安全组允许流量并且您可以 ping 通
  • 当您指定公共 IP 时,它很可能会被路由出去。如果不查看子网路由表,很难猜测流量的去向。向我们展示路由表,我可以告诉你到底发生了什么。 在这种情况下,源地址将是公共 IP(或 NAT IP),而不是私有 IP
  • 使用traceroutelft 跟踪网络跃点

【讨论】:

  • 这是有道理的。感谢您的澄清
  • 源地址会是公网IP吗?如果 A 没有公共 IP 怎么办?拥有公共 IP 是例外而不是规则。它并不像暗示的那么简单。
  • @RickO'Shea 如果 A 没有公共 IP,那么它可以访问公共 IP 的唯一方法是通过 NAT。在 B 的安全组中可见的公共 IP 将是 NAT 的。如果 A 没有公共 IP 并且没有通过 NAT 的路由,则其所有发往公共 IP 的流量都会被丢弃。
【解决方案2】:

您提到的 SG 配置仅适用于基于私有 IP 的通信。

https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules

当您将安全组指定为规则的源时,允许来自与指定协议和端口的源安全组关联的网络接口的流量。根据与源安全组关联的网络接口的私有 IP 地址(而不是公共 IP 或弹性 IP 地址)允许传入流量。

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2015-01-16
    • 2017-10-09
    相关资源
    最近更新 更多