EC2实例没有公共DNS


299

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


2
实例是否在VPC内?检查实例描述屏幕中VPC ID字段旁边是否有一个值。
David Levesque 2014年

1
我也有同样的问题。我的实例在VPC内,并且在子网中,我检查了公共DNS是否可用。仍然没有公共DNS名称。我可以在VPC配置中看到它的意思DNS hostnames: no,但是我无法更改该值,并且添加新的VPC也不给我任何选择。
扳手

设置my-vpc时我遇到了不同的问题DNS hostname: yes,但是启动实例时它只是私有ID。当使用弹性IP时,我只能获得公共IP。
Chetabahana

1
帮助我的是在没有公共IP / DNS的情况下停止和启动实例(重新启动无济于事)。实例重新启动后,它获得了公共IP。
justadev

Answers:


612

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

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

希望这可以帮助!

干杯


6
这是最好的答案。应该检查一下!
Alberto Spelta

2
现在,包含VPC的部分称为网络。要进行编辑,请右键单击VPC。
nasch

89
+1现在,您还需要设置子网以允许自动分配公共IP。右键单击您的子网>修改自动分配公共IP>选中该框
Adam Hey

1
即使当我尝试添加Elastic Ip时,在将更改dns主机名的选项设置为yes之前,它也无法正常工作。
RenatoSz

5
@Vignesh我没有为现有实例获取公共IP或DNS。停止和重新启动并没有什么改变。唯一有效的方法是终止并重新创建实例。
Y e z

59

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

昨天,我遇到了这个问题,并尝试了Manny的上述回答,但没有成功。VPC的设置,但是,确实为我工作。

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


1
有没有一种方法可以在不修改整个VPC的情况下做到这一点?我想要一个VPC中一个节点的公共DNS,但不希望它应用于该VPC中具有弹性IP的每个其他节点。
罗比·阿弗里尔

2
我认为您应该能够仅为该节点添加一个弹性IP,不是吗?
Mike T

是的,但是没有您的建议,它就不会在内部解决:-)
Robbie Averill 2014年

使用“ DNS主机名”,我可以看到公共DNS
Sujit Dhamale

38

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

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


1
我尝试使用公共IP与腻子进行连接。但它说“服务器拒绝了我们的钥匙”。我使用puttygen将.pem文件转换为.ppk文件
user1456508 2014年

1
您使用什么用户名?这是哪个AMI?这是什么操作系统?
slayedbylucifer14年

3
事后有办法分配公共IP吗?我看不到编辑“实例详细信息”设置的方法。
DavidBalažic15年

2
@slayedbylucifer停止的实例呢?
DavidBalažic2015年

3
@DavidBalažic,一样。在实例的生命周期中,您无法附加发布IP。只能在启动时附加Pub IP。
slayedbylucifer

29

以我为例,我发现slayedbylucifer的答案是正确的。
即使设置为DNS hostname: yes,在my-pvc上也没有分配公共IP (仅分配了Privat IP)。

绝对必须设置自动分配公共IPEnable
如果未选中,则默认情况下设置为Use subnet setting (Disable)

分配公共IP


23
  1. 转到AWS控制台。
  2. 转到服务并选择VPC
  3. 点击vpc。
  4. 选择实例,然后单击“操作”。
  5. 选择“编辑DNS主机名”,然后单击“是”。

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


将公共DNS与分配的弹性IP一起添加到VPC。出于某种原因,弹性IP可以从外界通过安全组ping通,但打一个web应用程序像Solr的失败,除非有分配公共DNS ..
false_memories

22

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

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

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



14

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


我可以使用我的自定义名称吗?因为我从实例发送电子邮件时,Gmail会显示通过ec2..ip地址...位置..etc而不是我的域名邮寄的邮件
凌晨

@mrid,您需要将您的DNS与EC2生成的DNS相关联。您可以使用我们的托管/ DNS管理员AWS Route53服务来做到这一点。
Lior Kirshner,

10

只需启动另一个实例(如果没有用,也删除该实例),并确保这次选中“自动为实例分配公共IP地址”。如果不是,那么就象路西法所说的那样;为实例分配一个弹性IP(EIP),然后使用该IP登录。但是请注意,如果您正在运行免费的AWS层,那么EIP会花费您的钱-这完全是另一个主题。


6

首先,可能有两个原因:

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

为了解决这个问题:

i)转到AWS VPC控制台,然后选择您已创建的VPC。

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

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

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


这是许多可能原因中的两种,当然不是仅有的两种可能性。
Madbreaks '18

6

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

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

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

2)您必须确保链接到EC2实例的公共子网具有其“自动分配公共IP”标志

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


一旦在启动的实例中可以看到该公共IP,我们就可以使用该IP通过腻子SSH连接该实例
rinilnath

5

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

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

从EC2仪表板:

转到弹性IP从侧边栏。

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

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

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

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

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

单击关联地址

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


1
这就是我的答案。我的VPC已设置为启用公共DNS。
melicent

显示公共DNS,但仍无法通过scp / putty连接。显示连接超时!
ShivarajRH

2

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

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

(其中$ vpc_id是实例所连接的VPC的ID。)

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


2

对于使用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。
jarmod

1

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


1

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



0

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

即使按照上述步骤制作了VPC或子网的mod,

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

新实例具有公共DNS。这就是它为我工作的方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.