【问题标题】:EC2 instance in public subnet has no public IP公共子网中的 EC2 实例没有公共 IP
【发布时间】:2023-03-03 16:20:01
【问题描述】:

我创建了一个 VPC 并在其中创建了一个 子网 和一个 Internet 网关(附加到 VPC)。在那个子网中,我创建了一个路由表,在其中我将路由 0.0.0.0/0 设置为以 Internet 网关为目标。

之后我在我的子网中启动了一个 EC2 实例,但它没有公共 IP,因此我无法使用 RDP 连接到它。

我尝试启用“DNS 主机名”和“DNS 解析”,但它没有向我的实例添加公共 IP(即使在重新启动后)。在我的子网中,我启用了“自动分配 IPv4”,但仍然没有公共 IP。

请知道我在这里缺少什么吗?

【问题讨论】:

  • 每个区域默认限制为 5 个弹性 IP 地址,您检查了吗?
  • 我没有使用任何弹性 IP,如果可以不用的话我也不想使用
  • 您是否启动 EC2 实例后启用了“自动分配 IPv4”?它不会追溯生效。
  • @jarmod 是的。但后来我重新启动了实例,所以我猜这应该不是问题?
  • 该设置在启动时很重要,并且仅在启动时。之后更改它没有影响。停止和重新启动不会改变这一点。无论如何,关键是您不能在启动后附加(非 EIP)公共 IP。因此,附加 EIP 或捕获实例的 AMI 并启动新实例,这次在启动时请求公共 IP。

标签: amazon-web-services amazon-ec2 amazon-vpc


【解决方案1】:

在您的子网中启用“自动分配 IPv4”后,您的实例不会自动将公共 IP 附加到其 ENI。在不启动新 EC2 的情况下,一种可能的解决方案是将弹性 IP(如评论中的 @Oleksii Donoha 建议的那样)附加到此实例。您可以关注 aws 文档到 allocate an Elastic IP address,然后是 associate it with your running instance

附注:不可能将 临时 ip 附加到已创建的 ENI 或 EC2 实例。见讨论here

【讨论】:

  • 感谢您的回答。但是我想避免使用弹性 IP,因为它是有限的资源。即使在启用“自动分配 IPv4”并重新启动实例之后,您是否知道阻止我获得临时 IP 的技术原因?
  • 好的,所以我在设置“自动分配 IPv4”之后创建了一个新的 EC2 实例,现在我的实例有一个可以连接的公共 IP。这种行为对我来说似乎很奇怪,希望能得到一些解释:为什么重启实例还不够?
  • @Mit94 重启实例是不行的,因为公网IP实际上是由底层的网卡决定的,重启实例不会改变它。只需将 ENI 视为虚拟网卡。根本问题是 AWS 不允许您在创建后将临时 IP 添加到主 ENI。
  • @Mit94 Auto-assign IPv4 是一个子网级别的默认设置,假设您当时没有覆盖它,它会在实例启动时复制到实例的 ENI 属性。它是复制,而不是继承,这就是行为看起来令人困惑的原因。
【解决方案2】:

虽然您的实例位于公共子网中,但您必须确保在配置实例详细信息页面上将“自动分配公共 IP”设置为“启用”或“使用子网设置(启用)”。有时人们在创建 EC2 实例时忘记检查/重新验证此设置。

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 2014-01-23
    • 2018-12-29
    • 2016-12-02
    • 2019-09-16
    • 1970-01-01
    • 2014-12-29
    相关资源
    最近更新 更多