ChatGPT解决这个技术问题 Extra ChatGPT

EC2 实例没有公共 DNS

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

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

A
Anye

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

转到 console.aws.amazon.com

转到服务-> VPC

打开您的 VPC

选择连接到 EC2 的 VPC,然后

选择 Actions => Edit DNS Hostnames ---> Change DNS hostnames: to YES


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

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

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

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


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

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

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


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

就我而言,我发现来自 slayedbylucifer 的答案和其他指向相同的答案是有效的。
即使设置为 DNS hostname: yesmy-pvc 上也没有分配公共 IP(仅私有 IP)。

肯定是自动分配公共 IP 必须设置为启用。如果未选中,则默认设置为使用子网设置(禁用)

https://i.stack.imgur.com/RsYUq.png


B
Bill Parker

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

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

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


J
Jitendra Bhalothia

转到 AWS 控制台。转到服务并选择 VPC 单击 vpc。选择实例并单击操作。选择编辑 DNS 主机名单击是。

最后,您将获得您的公共 dns。


将公共 DNS 与分配的弹性 IP 一起添加到 VPC 可以正常工作。出于某种原因,可以通过安全组从外部 ping 弹性 IP,但是除非分配了公共 DNS,否则访问像 Solr 这样的 Web 应用程序会失败。
N
Neftanic

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

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


L
Lior Kirshner

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


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

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

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

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

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

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


一旦这个公共 IP 在启动的实例中可见,我们就可以使用这个 IP 通过 putty SSH 连接实例
M
Manny Fernandez

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


P
Patrick R

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

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

要解决这个问题:

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

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

            OR

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

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


这是许多可能原因中的两个,当然不是唯一的两个可能性。
B
BenR

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

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

从 EC2 仪表板:

从侧边栏转到弹性 IP。

单击分配新地址,然后单击分配。

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

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

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

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

单击关联地址。

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


这就是我的答案。我的 VPC 已经设置为启用公共 DNS。
显示公共 DNS,但仍无法通过 scp/putty 连接。显示连接超时!
T
Tung Vu

转到 VPC 选择您的 VPC 单击操作并选择编辑 DNS 主机名 勾选为 DNS 主机名启用 单击保存更改


M
Mostafa Wael

问题是您的 VPC 中的 DNS 主机名被删除。您可以像这样轻松启用它:

在控制台中转到您的实例,然后单击您的 VPC ID。在您的 VPC 中,选择编辑 DNS 主机名选项将其设置为启用并保存您的更改。现在,在您的 EC2 实例窗口中,您可以找到 DNS:


P
Paul Pritchard

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

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

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

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


佚名

对于使用 CloudFormation 的用户,关键属性是 EnableDnsSupport 和 EnableDnsHostnames,应设置为 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 就足够了。
T
Trunal Bhanse

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


K
Kingz

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


1
1082E1984

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

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

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

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


T
Trouble

您不必为您的实例分配公共 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


K
Kishor Pant

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

步骤1:

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

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

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

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

第2步:

AWS 为您提供了一项名为 Route53 的服务。在这里您可以创建托管区域并在创建后输入不带www的域名,您将获得托管区域的名称服务器值。

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


M
Mostafa Wael

对于那些使用 Terraform 的人。

要启用 DNS 主机名,请在 VPC 中使用以下行,如下所示:

resource "aws_vpc" "app_vpc" 
{
   enable_dns_hostnames = true # Add this line

   cidr_block = var.vpc_cidr
   tags = { Name = "tact_space_vpc" }
}