为什么我无法通过公共IP ping通AWS实例,即使我可以轻松地ping通私有IP?

3
我有两个实例(实例A和实例B),它们都属于同一个安全组(假设为sg-1)。
该安全组具有以下入站规则集: - 类型:所有流量 - 协议:所有 - 端口范围:所有 - 源:sg-1
我可以使用实例B的私有IP从实例A ping通实例B,但当我使用实例B的公共地址时,无响应。
我错过了什么?
编辑: 如果我将上述安全配置中的源更改为“任何地方”,则可以ping通公共IP。

你能使用实例A的公共IP地址ping通它吗?实例A和B内部运行的操作系统是什么?你是否检查过操作系统的防火墙设置? - Frank Schmitt
你的意思是从实例A向实例A ping吗?我在两个实例上都运行了rancherOS。我认为没有任何操作系统防火墙处于活动状态。 - Nithin
4
当您将安全组指定为规则的源或目标时,该规则会影响与安全组相关联的所有实例。根据与源安全组相关联的实例的私有IP地址(而不是公共IP或弹性IP地址),允许入站流量。 - Dusan Bajic
公共IP映射到私有IP,对吧?所以,即使我ping一个公共IP,它也应该到达具有相应私有IP的实例,对吧?而且由于两个实例都在同一安全组中,为什么IP会有影响呢? - Nithin
实例是否在同一子网中或不同子网中? - helloV
子网ID相同。它们位于同一个子网上。 - Nithin
2个回答

6
只有当你ping实例B的私有地址时得不到响应时,才应该感到惊讶。
你子网的路由表将把公共地址路由到VPC之外。当它走出VPC并且流量返回时,源地址将是公共IP(或NAT IP),而不是私有IP。路由表优先于安全组。当你向另一台机器发送流量时:
- DNS名称被解析为IP - 在你的情况下,你指定了一个IP,因此不进行DNS解析 - 如果地址符合路由表规则,则将相应地路由 - 当你指定私有IP时,它很可能在内部路由,并且安全组允许流量,你就能够ping通 - 当你指定公共IP时,它很可能被路由到外部。如果不查看子网路由表,很难猜测流量去哪里。告诉我们路由表,我就可以告诉你发生了什么。在这种情况下,源地址将是公共IP(或NAT IP),而不是私有IP。 - 使用traceroute或lft跟踪网络跳数。

有道理。感谢澄清。 - Nithin
源地址将是公共IP地址吗?如果A没有公共IP地址怎么办?拥有公共IP地址是例外而不是规则。这并不像暗示的那样简单。 - Rick O'Shea
@RickO'Shea 如果A没有公共IP,则它能够到达公共IP的唯一方式是通过NAT。在B的安全组中可见的公共IP将是NAT的IP。如果A没有公共IP且没有通过NAT的路由,则其所有发送到公共IP的流量都会被丢弃。 - jarmod

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接