EC2实例没有公共DNS。

364

我和一个同事一起工作,他给了我 EC2 凭证以便登录他的 EC2 控制台。但是我不是那个设置它的人。有些实例显示公共 DNS 名称,而其他实例则没有。我想要连接到没有公共 DNS 的实例上。我一直没能找出为什么会这样。


2
实例是否在VPC内?请检查实例描述屏幕中的VPC ID字段旁边是否有值。 - David Levesque
1
我有同样的问题。我的实例在VPC内部,而在子网上,我已经检查了公共DNS是否可用。但是我仍然无法获取公共DNS名称。我可以看到在我的VPC配置中,它显示“DNS主机名:否”,但我无法更改该值,并且添加新的VPC也没有给我选择。 - Wrench
1
当我设置my-vpc时,我遇到了不同的问题。 DNS主机名:是,但只有在启动实例时才是私有ID。只有在使用弹性IP时,我才能获取公共IP。 - eQ19
1
对我有帮助的是停止并重新启动实例,但不分配公共IP/DNS(重新启动无效)。在实例重新启动后,它获得了公共IP。 - justadev
22个回答

692

我曾经遇到了同样的问题并解决了它。请查看以下逐步说明:

  • 前往 console.aws.amazon.com
  • 进入 Services -> VPC
  • 打开您的VPCs
  • 选择连接到您的EC2的您的VPC
  • 选择操作 => 编辑DNS主机名 ---> 更改DNS主机名:为“YES”

3
VPC所在的部分现在称为“网络”。要进行编辑,您需右键单击VPC。 - nasch
115
+1 现在你还需要设置子网以允许自动分配公共 IP。右键单击你的子网 > 修改自动分配公共 IP > 选中复选框。 - Adam Hey
2
即使我尝试添加弹性IP,直到将更改DNS主机名的选项设置为是,它才能正常工作。 - RenatoSz
1
@ Jack BeNimble 是的。这将影响 VPC 中现有的实例。这些实例将获得公共 DNS。 - Vignesh
10
@Vignesh,我没有为现有实例获得公共IP或DNS。停止和重新启动都没有改变任何东西。唯一有效的方法是终止并重新创建该实例。 - Y     e     z
显示剩余5条评论

65

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

昨天我遇到了这个问题,并尝试了 Manny 提供的答案,但它并没有起作用。然而,VPC 设置对我有效。

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


1
有没有一种方法可以在不修改整个 VPC 的情况下完成这个操作?我想要为 VPC 中的一个节点提供公共 DNS,但不希望它适用于该 VPC 中具有弹性 IP 的其他节点。 - scrowler
2
我认为你应该可以为那个节点添加弹性IP,对吧? - Mike T
是的,但如果没有你在答案中的建议,它就无法在内部解决 :-) - scrowler
使用“DNS主机名”,我能够看到公共DNS。 - Sujit Dhamale

44
听起来像是实例在VPC中启动,但在此过程中,未选中“自动为您的实例分配公共 IP 地址”复选框。因此该实例没有公共IP。
您可以向该实例分配弹性IP地址,然后使用该IP地址登录。

1
我尝试使用Putty连接公共IP,但它显示“服务器拒绝了我们的密钥”。我使用Puttygen将.pem文件转换为.ppk文件。 - user1456508
1
你使用的用户名是什么?这是哪个AMI?这是什么操作系统? - slayedbylucifer
3
有没有方法在事后分配公共IP地址?我没有看到任何编辑实例详细信息设置的方法。 - David Balažic
2
@slayedbylucifer 停止的实例怎么办? - David Balažic
3
@DavidBalažic,同意。对于实例的生命周期,您无法附加公共 IP 地址。公共 IP 地址只能在启动实例时附加。 - slayedbylucifer
显示剩余3条评论

37
在我的情况下,我从 slayedbylucifer 和其他人的答案中找到了解决方法,它们都指向了同一个有效的方向。
即使设置了 DNS 主机名:是,在 my-pvc 上没有分配公共 IP(只有私有 IP)。

确定要设置 自动分配公共 IP启用.
如果未选择,则默认设置为 使用子网设置(禁用)

分配公共 IP


24

这是解决无法工作问题的提示:

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

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


24
  1. 进入 AWS 控制台。
  2. 前往“服务”并选择 VPC。
  3. 点击 VPC。
  4. 选择实例并单击“操作”。
  5. 选择“编辑 DNS 主机名”并单击“是”。

最终您将获得公共 DNS。


将公共DNS添加到VPC中,以及分配的弹性IP一起使用是有效的。由于某种原因,弹性IP可以通过安全组从外部世界ping通,但是如果没有分配公共DNS,则无法访问像Solr这样的Web应用程序。 - roguequery

23

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

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

22

这与VPC的名为“DNS主机名”的功能相关。您可以启用或禁用它。转到VPC,在操作菜单下选择“编辑DNS主机名”项,然后选择“是”。这样做后,EC2实例的公共DNS应该会显示出来。


我可以使用自定义名称吗?因为当我从我的实例发送电子邮件时,Gmail显示的是由ec2..ip地址...位置等发送,而不是我的域名。 - mrid
@mrid 你需要将你的DNS与EC2生成的DNS关联起来。你可以使用AWS Route53服务或者你的托管/DNS管理器来完成这个操作。 - Lior Kirshner
1
我不小心删除了默认设置,然后我不得不重新创建基础设施,这对我有帮助,谢谢 :) - Dnyaneshwar Jadhav

16

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

当您创建自定义VPC时,如果您希望AWS资源(例如EC2实例)获取公共IP地址以便互联网可以与它们通信,则首先必须确保EC2实例与自定义VPC的公共子网相关联。这意味着该子网具有与之关联的Internet网关。此外,您需要确保与EC2实例相关联的VPC的安全组具有允许入站流量到所需端口(如ssh、http和https)的规则。但是以下是一些常见的疏忽:

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

2)您必须确保与EC2实例链接的公共子网启用了其“自动分配公共IP”标志

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


一旦这个公共 IP 在实例中可见,我们可以使用此 IP 通过 Putty SSH 连接该实例。 - rinilnath

12

只需启动另一个实例(如果该实例无用,请将其删除),并确保这次勾选“自动分配公共 IP 地址给您的实例”。如果没有,就像 slayedbylucifer 建议的那样;为实例分配弹性 IP(EIP),然后使用该 IP 登录。但要小心,如果您正在运行免费的 AWS 层,则 EIP 将花费您的资金 - 这是完全另一回事。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接