当前位置: 首页 > 知识库问答 >
问题:

为什么当我通过泰拉形态设置 VPC 和 EC2 时,我无法 ping 我的 EC2 实例?

姜献
2023-03-14

我通过Terraform进行了设置,其中包括一个VPC、一个公共子网和一个带有安全组的EC2实例。我正在尝试ping EC2实例,但出现超时。

我试图确保以下几点:

>

  • EC2 位于子网中,子网通过网关路由到互联网

    EC2有一个安全组,允许所有双向流量

    EC2 具有弹性 IP

    VPC有一个附加到子网的ACL,允许所有流量双向传输

    我不确定我错过了什么。

    我的tf文件如下所示(已编辑以反映最新更改):

    
    resource "aws_vpc" "foobar" {
      cidr_block = "10.0.0.0/16"
    }
    
    resource "aws_internet_gateway" "foobar_gateway" {
      vpc_id = aws_vpc.foobar.id
    }
    
    /*
    Public subnet
    */
    resource "aws_subnet" "foobar_subnet" {
      vpc_id = aws_vpc.foobar.id
      cidr_block = "10.0.1.0/24"
    }
    
    resource "aws_route_table" "foobar_routetable" {
      vpc_id = aws_vpc.foobar.id
    
      route {
        cidr_block = "0.0.0.0/0"
        gateway_id = aws_internet_gateway.foobar_gateway.id
      }
    }
    
    resource "aws_route_table_association" "foobar_routetable_assoc" {
      subnet_id = aws_subnet.foobar_subnet.id
      route_table_id = aws_route_table.foobar_routetable.id
    }
    
    /*
    Web
    */
    resource "aws_security_group" "web" {
      name = "vpc_web"
      vpc_id = aws_vpc.foobar.id
    
      ingress {
        protocol    = -1
        from_port   = 0
        to_port     = 0
        cidr_blocks = ["0.0.0.0/0"]
      }
    
      egress {
        protocol    = -1
        from_port   = 0
        to_port     = 0
        cidr_blocks = ["0.0.0.0/0"]
      }
    }
    
    resource "aws_network_acl" "main" {
      vpc_id = aws_vpc.foobar.id
      subnet_ids = [aws_subnet.foobar_subnet.id]
    
      egress {
        protocol   = -1
        rule_no    = 100
        action     = "allow"
        cidr_block = "0.0.0.0/0"
        from_port  = 0
        to_port    = 0
      }
    
      ingress {
        protocol   = -1
        rule_no    = 100
        action     = "allow"
        cidr_block = "0.0.0.0/0"
        from_port  = 0
        to_port    = 0
      }
    }
    
    resource "aws_instance" "web-1" {
      ami = "ami-0323c3dd2da7fb37d"
      instance_type = "t2.micro"
      subnet_id = aws_subnet.foobar_subnet.id
      associate_public_ip_address = true
    }
    
    resource "aws_eip" "web-1" {
      instance = aws_instance.web-1.id
      vpc = true
    }
    

    为什么当我通过泰拉形态设置 VPC 和 EC2 时,我无法 ping 我的 EC2 实例?

  • 共有2个答案

    蔺山
    2023-03-14

    允许所有流量通过安全组不会启用对实例的 ping 操作。您需要添加特定的安全规则 - 如下所示的图像以启用 ping 请求

    因此,建议仔细更改此规则。

    朱伯寅
    2023-03-14

    为什么要在安全组规则中添加self参数。terraform文档声明< code >如果为真,安全组本身将作为源添加到此入口规则中。这基本上意味着只有该安全组可以访问该实例。请删除并尝试。

    编辑:有关修复问题的步骤,请参见下面的评论

     类似资料:
    • 网络:我有一个私有子网和一个公共子网。附有IG的VPC。公共子网中有一个NAT网关。我还有2个路由表,公共路由表将所有内容路由到IG,私有路由表将所有内容路由到NAT网关。 EC2:我的EC2 Windows实例位于带有EIP和公共DNS的私有子网中。它有一个安全组,允许所有来自互联网的入站/出站,但我甚至不能ping两个rdp

    • 我有一个 EC2 实例,其中包含标准的亚马逊 Linux 2 AMI。它位于具有以下入站规则的安全组中: 出站规则: 我可以从我的MacOS命令行SSH实例,但ping失败: 当然,它分配了一个公有IP,它位于具有互联网网关的VPC中的子网中,并且与之关联的NACL如下所示: 出站规则: 我能够成功地 google.com。 我对ping和网络层了解不够,不知道下一步去哪里看,为什么这不起作用。有

    • 我有2个EC2 Ubuntu实例。它们共享相同的VPC、子网和安全组。实例的防火墙已关闭。但我仍然无法通过私有IP彼此ping。如何允许这些实例彼此ping?

    • 我的目标是在VPC上的私有子网中创建一个EC2实例,我可以从外部互联网ping该实例。 到目前为止,我已经: < li >创建弹性IP < li >创建了一个带有一个公共子网和一个专用子网的VPC < li >在公共子网上创建NAT网关,并将其公共IP设置为弹性IP < li >在专用子网上的VPC中创建了EC2实例 < li >为EC2实例创建了允许所有ICMP流量的安全组 当我尝试ping弹性

    • 我对AWS很陌生,已经测试过启动一个实例,如下所示: 下面是附加了入站规则的安全组 我的问题是无法ping此服务器。我能知道我是否理解错了什么吗?