我有一个在AWS中运行的EC2实例。当我试图从我的本地盒子ping它是不可用的。

我如何能使实例pingable?


当前回答

如果您在安全组和VPC中打开,可能是您的内部网络正在阻止该IP到ping或在您的防火墙中阻止ping包。

其他回答

如果你想通过SDK以编程方式启用ping(从任何地方),神奇的公式是:

cidrIp:     "0.0.0.0/0"
ipProtocol: "icmp"
toPort:     -1
fromPort:   8

例如,在Scala(使用AWS Java SDK v2)中,以下工作用于为authorizeSecurityGroupIngress端点定义IpPermission。

  val PingPermission = {
    val range = IpRange.builder().cidrIp( "0.0.0.0/0" ).build()
    IpPermission.builder().ipProtocol( "icmp" ).ipRanges( range ).toPort( -1 ).fromPort( 8 ).build()
  }

(我只在EC2-Classic上尝试过。我不知道在VPC下可能需要什么出口规则)

请仔细检查下面的核对表

1)您必须首先检查实例是否启动在一个子网中,该子网可以从internet访问

为此,检查实例启动的子网是否附加了internet网关。有关AWS网络的详细信息,请访问下面的链接。

aws VPC中的公网子网和私有子网

2)检查你是否添加了正确的安全组规则,如果没有,在附加到实例的安全组中添加以下规则。安全组是连接到每个启动实例的防火墙。安全组包含入站/出站规则,这些规则允许流量进出实例。默认情况下,每个安全组允许来自该实例的所有出站流量,而不允许进入该实例的流量。查看下面的链接,了解更多流量的详细信息。

安全组文档

类型:自定义ICMPV4

协议:ICMP

Portrange: Echo Request

来源:0.0.0.0/0

3)检查子网级防火墙(称为NACL)中是否有足够的规则。NACL是一种无状态防火墙,需要分别指定入站和出站流量。NACL应用于子网级别,子网下的所有实例都将遵循NACL规则。下面是有更多细节的链接。

氯化钠的文档

入站规则。出站规则

Type:自定义IPV4 Type:自定义IPV4

Protocol: ICMP协议:ICMP

Portrange: ECHO REQUEST Portrange: ECHO REPLY

源:0.0.0.0/0目的:0.0.0.0/0

Allow/Deny:允许Allow/Deny:允许

4)检查任何防火墙,如IPTABLES和禁用测试ping。

1.Go to EC2 Dashboard and click "Running Instances" on "Security Groups"
2.select the group of your instance which you need to add security.  
3.click on the "Inbound" tab
4.Click "Edit" Button (It will open an popup window)
5.click "Add Rule"
6.Select the "Custom ICMP rule - IPv4" as Type
7.Enter the "0.0.0.0/0" as Source or your public IP

7.点击“保存”

当ping两个系统时,默认启用SSH(如果您通过putty或终端连接)。为了允许ping,我为每个实例(入站)添加了安全组。

默认情况下,EC2由AWS安全组(EC2和VPC中的服务)保护。缺省情况下,安全组不允许任何包含ping的ICMP请求。允许:

Goto: AWS EC2实例 定位:绑定到该实例的安全组(可以有多个安全组) 检查:协议(ICMP)端口入站规则(0 - 65535)如果不存在,您可以添加它,并允许它在指定的源IP或另一个安全组上使用。