【问题标题】:EC2 instance has no public DNSEC2 实例没有公共 DNS
【发布时间】:2014-01-23 08:51:38
【问题描述】:

与我一起工作的一个人给了我 EC2 凭据以登录他的 EC2 控制台。我不是设置它的人。一些实例显示一个公共 dns 名称,而另一些实例则有一个空白的公共 DNS。我希望能够连接到具有空白公共 DNS 的实例。我一直无法弄清楚为什么这些显示为空白。

【问题讨论】:

  • 实例是否在 VPC 中?检查实例描述屏幕中 VPC ID 字段旁边是否有值。
  • 我也有同样的问题。我的实例位于 VPC 内,并且在子网上,我已检查公共 DNS 是否可用。我仍然没有获得公共 DNS 名称。我可以看到,在我的 VPC 配置中,它是 DNS hostnames: no,但我无法更改该值,并且添加新的 VPC 也没有给我选择。
  • 我在设置my-vpcDNS hostname: yes时遇到了不同的问题,但在实例启动时它只是私有ID。使用弹性 IP 时,我只能获取公共 IP。
  • 帮助我的是停止和启动没有公共 IP/DNS 的实例(重启没有帮助)。实例重启后,获得公网IP。

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


【解决方案1】:

我遇到了同样的问题并解决了。查看分步说明:

  • 转到 console.aws.amazon.com
  • 转到 服务 -> VPC
  • 打开您的 VPC
  • 选择您的 VPC 连接到您的 EC2 并
  • 选择操作 => 编辑 DNS 主机名 ---> 更改 DNS 主机名:为 YES

【讨论】:

  • 包含 VPC 的部分现在称为网络。要进行编辑,请右键单击 VPC。
  • +1 您现在还需要设置子网以允许自动分配公共 IP。右键单击您的子网 > 修改自动分配公共 ip > 选中该框
  • 即使我尝试添加弹性 Ip,但在更改 dns 主机名的选项设置为是之前,它也无法正常工作。
  • 这样做对已经拥有公共 DNS 的实例有何影响?
  • @Vignesh 我没有获得现有实例的公共 IP 或 DNS。停止和重新启动并没有改变任何东西。唯一有效的是终止并重新创建实例。
【解决方案2】:

实际上在 VPC 中有一个名为“DNS 主机名”的设置。您可以修改 EC2 实例所在的 VPC,并将其更改为“是”。这应该可以解决问题。

我昨天遇到了这个问题,并尝试了 Manny 的上述答案,但没有奏效。然而,VPC 设置确实对我有用。

最后我添加了一个 EIP 并用它来连接。

【讨论】:

  • 有没有办法在不修改整个 VPC 的情况下做到这一点?我想要 VPC 中一个节点的公共 DNS,但不希望它应用于该 VPC 中具有弹性 IP 的每个其他节点。
  • 我认为您应该能够为该节点添加弹性 IP,不是吗?
  • 是的,但如果没有您在答案中的建议,它不会在内部解决 :-)
  • 使用“DNS 主机名”我可以看到公共 DNS
【解决方案3】:

听起来该实例已在 VPC 中启动,但在此过程中,Automatically assign a public IP address to your instances 的复选框未选中。因此该实例没有公共 IP

您可以为该实例分配一个弹性 IP,然后使用该 IP 登录。

【讨论】:

  • 我尝试使用公网 IP 和 putty 进行连接。但它说“服务器拒绝了我们的密钥”。我使用 puttygen 将 .pem 文件转换为 .ppk 文件
  • 您使用的是什么用户名?这是哪个AMI?这是什么操作系统?
  • 有没有办法事后分配公网IP?我没有看到编辑实例详细信息设置的方法。
  • @slayedbylucifer 停止的实例呢?
  • @DavidBalažic,同样。对于实例的生命周期,您不能附加 pub IP。 Pub IP 只能在发布时附加。
【解决方案4】:

就我而言,我从slayedbylucifer 找到了答案,其他指向相同的答案是有效的。
即使设置了DNS hostname: yesmy-pvc 上也没有分配公共 IP(只有私有 IP)。

自动分配公网IP肯定要设置Enable
如果未选中,则默认设置为Use subnet setting (Disable)

【讨论】:

    【解决方案5】:

    这是为解决不起作用的问题而提供的提示:

    提示 - 如果您的实例没有公有 DNS 名称,请打开 VPC 控制台,选择 VPC,然后检查摘要选项卡。如果 DNS 解析或 DNS 主机名中的任何一个为否,请单击编辑并将值更改为是。

    假设您已完成此操作,但仍未获得公共 IP,然后转到 VPC 管理屏幕中的相关子网,您可能会发现“自动分配公共 IP”未设置为“是”。然后修改该设置,我知道您不想在这里,在该子网中创建一个新实例。据我所知,您无法在主机上修改它,我尝试过,只是终止它。

    【讨论】:

      【解决方案6】:
      1. 转到 AWS 控制台。
      2. 转到服务并选择 VPC
      3. 点击vpc。
      4. 选择实例并点击操作。
      5. 选择编辑 DNS 主机名点击是。

      最后你会得到你的公共 dns。

      【讨论】:

      • 将公共 DNS 与分配的弹性 IP 一起添加到 VPC 可以正常工作。出于某种原因,弹性 IP 可以通过安全组从外部世界 ping 通,但访问像 Solr 这样的 Web 应用程序会失败,除非分配了公共 DNS。..
      【解决方案7】:

      对我来说,问题出在子网设置中。

      1. 打开https://console.aws.amazon.com/vpc
      2. 转到左侧菜单中的子网
      3. 选择您的子网
      4. 修改自动分配 IP 设置以启用

      【讨论】:

        【解决方案8】:

        这与 VPC 的“DNS 主机名”功能有关。您可以启用或禁用它。转到 VPC,在 Actions 菜单下选择“Edit DNS Hostnames”项,然后选择“Yes”。完成后,应该会显示 EC2 实例的公共 DNS。

        【讨论】:

        • 我可以使用我的自定义名称吗?因为当我从我的实例发送电子邮件时,Gmail 显示通过 ec2..ip 地址...location..etc 而不是我的域名发送邮件
        • @mrid 您需要将您的 DNS 与生成的 EC2 的 DNS 相关联。您可以使用我们的托管/DNS 管理器 AWS Route53 服务来实现。
        【解决方案9】:

        在这里我将总结最常见的问题:

        当您创建自定义 VPC 时,如果您希望 ec2 实例等 AWS 资源获取公有 IP 地址以便互联网可以与其通信,那么您首先必须确保 ec2 实例与自定义 VPC。这意味着子网有一个与之关联的互联网网关。此外,您需要确保与 ec2 实例关联的 VPC 的安全组具有允许入站流量到所需端口的规则,例如 ssh、http 和 https。但这里有一些仍然会发生的常见疏忽:

        1) 您必须确保为 VPC 启用 DNS 主机名

        2) 您必须确保链接到 EC2 实例的公有子网启用了“自动分配公有 ip”标志

        3) 如果实例已经创建,那么您可能需要终止它并创建一个新实例以填充公共 IP 和公共 DNS 字段。

        【讨论】:

        • 一旦这个公网IP在启动的实例中可见,我们就可以使用这个IP通过putty SSH连接实例
        【解决方案10】:

        只需启动另一个实例(如果它没有用,也删除有问题的实例)并确保这次选中“自动为您的实例分配公共 IP 地址”。如果不是,那么就像 slayedbylucifer 所建议的那样;为实例分配弹性 IP (EIP),然后使用该 IP 登录。不过要小心,如果您运行的是免费 AWS 层,那么 EIP 将花费您的钱——这完全是“另一个话题”。

        【讨论】:

          【解决方案11】:

          验证 VPC 和子网设置后,我的 EC2 实例仍然没有公共 DNS。经过一天的寻找解决方案,我终于想通了。

          我必须创建一个新的弹性 IP 地址,然后将其关联到我的实例。

          从 EC2 仪表板:

          从侧边栏中转到弹性 IP

          点击分配新地址,然后点击分配

          返回 EC2 仪表板。转到网络接口

          选择没有公共 DNS 的 EC2 实例。然后操作 - 关联地址

          地址字段,选择新的弹性IP地址。

          关联到私有 IP 地址字段,选择没有公共 DNS 的私有 IP 地址。

          点击关联地址

          您的 EC2 实例现在应该有一个公共 DNS。

          【讨论】:

          • 这就是我的答案。我的 VPC 已设置为启用公共 DNS。
          • 显示公共 DNS,但仍无法通过 scp/putty 连接。显示连接超时!
          【解决方案12】:

          首先,这可能有两个原因:

          1. 您已创建自己的 VPC,但忘记启用公共 DNS。

          解决这个问题:

          i) 转到 AWS VPC 控制台并选择您创建的 VPC。

          ii) 然后点击操作,然后启用 DNS 解析。

                      OR
          
          1. 您尚未在 EC2 配置中启用公共 ip-assign 选项。

          这里不能更改设置;所以创建一个 ami 图像,然后从中重新创建实例。

          【讨论】:

          • 这是许多可能的原因中的两个,当然不是唯一的两个可能性。
          【解决方案13】:
          1. 转到 VPC
          2. 选择您的 VPC
          3. 单击操作并选择编辑 DNS 主机名
          4. 勾选为 DNS 主机名启用
          5. 点击保存更改

          【讨论】:

            【解决方案14】:

            也可以使用 AWS CLI 更改 DNS 主机名设置:

            aws ec2 modify-vpc-attribute --vpc-id $vpc_id --enable-dns-hostnames '{"Value": true}'
            

            (其中 $vpc_id 是您的实例附加到的 VPC 的 ID。)

            VPC 更新后,实例将获得公共 DNS。

            【讨论】:

              【解决方案15】:

              对于使用 CloudFormation 的用户,关键属性是 EnableDnsSupportEnableDnsHostnames,应设置为 true

              VPC: {
                  Type: 'AWS::EC2::VPC',
                  Properties: {
                    CidrBlock: '10.0.0.0/16',
                    EnableDnsSupport: true,
                    EnableDnsHostnames: true,
                    InstanceTenancy: 'default',
                    Tags: [
                      {
                        Key: 'env',
                        Value: 'dev'
                      }]
                  }
                }
              

              【讨论】:

              • 有用的答案,谢谢。仅供参考,EnableDnsSupport 的默认值为 true,因此通常指示 EnableDnsHostnames: true 就足够了。
              【解决方案16】:

              如果实例在 VPC 中,请确保“DNS 解析”和“DNS 主机名”都设置为“是”。您可以在 Aws 控制台 UI 中执行此操作。 HTH!

              【讨论】:

                【解决方案17】:

                转到 VPC 控制台,选择您的 VPC,然后单击操作菜单,选择编辑 DNS 主机名 - 选择是。那应该解决它。

                【讨论】:

                  【解决方案18】:

                  我尝试修复“无公共 DNS” 一旦 EC2 启动并运行,我就无法添加公共 DNS

                  即使在按照上述步骤对 VPC 或子网进行修改后也是如此

                  所以,在启动另一个实例之前,我必须对子网和 vpc 进行修改,然后启动一个新实例。

                  新实例有一个公共 DNS。这就是它对我的工作方式。

                  【讨论】:

                    【解决方案19】:

                    您不必为您的实例分配公共 IP 地址。 您可以使用 NAT 实例或 NAT 网关。

                    https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-comparison.html

                    【讨论】:

                      【解决方案20】:

                      首先对于公共 IP / DNS,您必须有一个正在运行的 EC2 服务(可以是 Instance / Docker / Lightsail。对于任何服务,您将有两个不同的 IP( Private & Public ) 也是安全选项卡下可用的安全组,一旦您选择了主动实例。

                      第 1 步

                      您可以根据端口使用情况启用,例如如果您想使用 HTTP 和 HTTPS 端口托管网站

                      EC2->安全组 -> 编辑入站规则 -> 添加或删除所需端口

                      如 80,443,22 等和端口的流量来源(如果您想为所有选择打开端口,或者如果您想打开所选 IP 的应用程序 - 手动输入 IPV4/IPV6。

                      完成上述配置后,创建弹性 IP 并将其附加到正在运行的 EC2 实例。将 IP 附加到实例后,您的公共 IP 将成为弹性 IP

                      第 2 步

                      AWS 为您提供了一项名为 Route53 的服务。这里可以创建Hosted Zones,创建后输入不带www的域名,就可以得到hosted zone的Name Server值。

                      关于Route53的更多信息https://aws.amazon.com/route53/

                      【讨论】:

                        猜你喜欢
                        • 2014-12-29
                        • 2015-03-23
                        • 2021-04-25
                        • 1970-01-01
                        • 2023-03-03
                        • 2016-04-16
                        • 2012-03-03
                        • 1970-01-01
                        相关资源
                        最近更新 更多