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

我如何能使实例pingable?


当前回答

我想提到一些ISP引起的罕见问题。我偶尔也会用BSNL。这是一个奇怪的问题,它占用了你日常生活中的几个小时。在这种情况下,人们可能会提出与ISP或更换ISP的问题。

Amazon实例可以从浏览器访问(所有开放端口) 控制台无法ping通 SSH / Telnet也不能正常使用。

其他回答

如果你想通过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下可能需要什么出口规则)

我也有同样的问题,从linux服务器连接到EC2,你有两个确保的事情,“所有ICMP”是从EC2添加如上所示,这是不会工作的,你必须更新Ansible到最新版本2.4,它不与我以前的版本2.2工作。

请仔细检查下面的核对表

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。

您必须编辑EC2实例所属的Security Group并允许访问(或者创建一个新的Security Group并将该实例添加到其中)。

默认情况下,一切都被拒绝。您需要添加到安全组的例外取决于您需要向internet提供的服务。

如果它是一个web服务器,你需要允许访问端口80为0.0.0.0/0(这意味着任何IP地址)。

要允许ping实例,您需要启用ICMP通信。

AWS Web控制台在相关下拉列表中提供了一些最常用的选项。

terrraform安全组的特定指令,因为-1对我来说不明显。

resource "aws_security_group" "Ping" {
  vpc_id = "${aws_vpc.MyVPC.id}"
  ingress {
    from_port   = -1
    to_port     = -1
    protocol    = "icmp"
    cidr_blocks = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
}