EC2 t2.micro 实例没有公共 DNS

Posted

技术标签:

【中文标题】EC2 t2.micro 实例没有公共 DNS【英文标题】:EC2 t2.micro instance has no public DNS 【发布时间】:2014-12-29 15:54:51 【问题描述】:

我启动了一个 Amazon Web Service (AWS) EC2 实例 t2.micro,它必须启动到 VPC 中。

VPC 已将 Auto-assign Public IP 设置为 Yes。

DNS 解析:是

DNS 主机名:是

但在 EC2 仪表板上,该实例仍然有一个空白的公共 DNS 和公共 IP。我曾多次尝试重启实例,但仍未为其分配公共 IP。我们的 AWS 账户附带的 5 个弹性 IP 已被使用。是否可以在不使用弹性 IP 的情况下将公共 IP 分配给 t2.micro 实例?

我已阅读帖子:EC2 instance has no public DNS, 但我没有能够添加评论的声誉点数,所以我将其作为新问题发布。

【问题讨论】:

我能够在不使用 VPC 的情况下启动另一个实例 t1.micro,并且获得公共 IP 没有任何问题。所以我不知道为什么 VPC - 自动分配公共 IP 不起作用,但我并没有为此失眠。 【参考方案1】:

EC2 实例没有公共 IP 地址的最常见原因是您在私有子网中启动 EC2 实例。私有子网意味着位于该子网中的任何 EC2 实例都不能直接从公共 Internet 寻址。换句话说,根据定义,私有子网中的 EC2 实例不能有公共 IP 地址。

这可以解释为什么检查“公共 IP 地址”无效,以及为什么您无法分配弹性 IP 地址。

您不能只是将实例从一个子网重新定位到另一个子网。如果您需要这样做,您可以为您的实例创建一个 AMI(右键单击 EC2 实例并单击 create image),然后在不同子网中从该 AMI 启动一个新实例。

要确定您的子网是否为私有子网,请查看 路由表 并查看您是否有 Internet 网关 路由。转到 VPC > 子网 > 选择子网 > 路由表 选项卡。查找类似igw-*** 的条目。如果你看到这个,它是一个公共子网。如果您看到类似eni-*** / i-*** 的内容,则它是一个私有子网。

【讨论】:

我不能 100% 确定发生了什么,因为我已经删除了使用的 VPC 和路由表,但这是我听到的最好的解释。此后,我使用新的 VPC 创建了一个新的 t2.micro 实例,“自动分配公共 IP”= 是,并且公共 IP 工作正常。谢谢乔什·帕德尼克。 Internet 网关实际上并不为您的实例提供公共 IP。它只是一种资源,您可以通过它向 Internet 发送和接收来自 Internet 的网络流量。尝试将您的实例放在一个公共子网中,该子网将 0.0.0.0/0 路由到 IG。【参考方案2】:

右键单击 VPC 管理控制台页面中的 VPC 行并选择"EDIT DNS Hostname"。将其设置为"Yes"。必须允许所有实例具有相同的 VPC。

"Step 3: Configure Instance Details"创建新实例时,需要启用"Auto-assign Public IP"

就是这样! :-)

【讨论】:

确实如此。不得不重新发现它。来这里写答案。看到你已经回答了。投票。评论这段文字。 EOF。 这为我解决了问题。感谢您的回答。 好在即使没有它,公共 DNS 也会分配给已经创建的虚拟机(如果其他配置没问题的话)【参考方案3】:

同时检查:

VPC -> Subnets -> Subnet Actions -> Modify Auto-Assign Public IP

【讨论】:

这应该被选为最正确的答案,因为它会在未来在供应实例上“自动”启用该功能。谢谢老哥! 把我的头撞在墙上将近一个小时,这解决了问题。谢谢 还要确保在创建 EC2 实例时将 Auto-assign public IPv4 address 设置为 Enabled【参考方案4】:

今天面临同样的问题。我的 EC2 实例没有公共 DNS,因此我无法通过 ssh 连接。

我尝试了以下步骤并取得了成功:

转到 VPC > Internet 网关:确保已创建 Internet 网关并将其连接到 EC2 的 VPC

转到 VPC > 路由表,选择一个 VPC 路由,导航到 Routes 选项卡:使用

添加新规则

++ 目的地:0.0.0.0/0

++ 目标:选择已创建的 Internet 网关

Goto VPC > Subnet > Route Table 选项卡:点击编辑,切换到上面目的地为 0.0.0.0/0 的 Route Table

完成。

【讨论】:

这些是使它对我有用的唯一步骤。如果没有这一步编辑路由表,就无法连接,即使它显示实例有一个公共 DNS 地址。 +1【参考方案5】:

我有同样的问题。我的问题的原因原来是我使用的路由表与子网无关。

enter image description here

更改子网后,我的实例被分配了公共 ip。

【讨论】:

【参考方案6】:

有很多可能的原因。检查以下内容。

您需要创建一个 VPC。

应该启用 DNS 解析和 DNS 主机名。

Choose your VPC -> Actions -> Edit DNS resolution -> enable
Choose your VPC -> Actions -> Edit DNS hostnames -> enable

进入 VPC,您可能需要一个私有和公共子网。

在私有子网中,您需要有一个与之关联的 NAT 网关。 在公共子网中,您需要有一个与之关联的 Internet 网关。

您需要为您的公共子网启用自动分配 IP。

Choose the public subnet -> Actions -> Modify auto-assign IP settings -> enable

稍后当您在 第 3 步:配置实例详细信息。

您应该选择您的 VPC 和公有子网。并在“自动分配公共 IP”部分选择“使用子网设置(已启用)”

我认为这应该可以解决您的问题...

【讨论】:

就是这样。谢谢。【参考方案7】:

创建子网后 - 确保将自动分配公共 IPv4 设置设置为是或启用。 确保打开上述设置后 - 然后启动 EC2 实例。 如果在创建子网后未启用上述设置 - EC2 实例将被视为私有并且不会有公共 IPV4 地址。

【讨论】:

【参考方案8】:

转到 VPC -> 子网 并确保自动分配公共 IPv4 地址设置为 YES

【讨论】:

【参考方案9】:

对此,我最大的“问题”是从 CloudFormation 堆栈创建 VPC 和子网时,我的子网缺少属性“MapPublicIpOnLaunch”:true。

【讨论】:

【参考方案10】:

当我从已停止的实例中使用“启动更像这样”选项时,我将获得一个没有公共 IP 的新实例。但是,如果我从正在运行的实例“启动更像这样”,则新实例具有公共 IP。

【讨论】:

【参考方案11】:

我的观察:

您需要为您的公共子网启用自动分配 IP。选择公共子网 -> 操作 -> 修改自动分配 IP 设置 -> 启用

仅在完成上述操作后,启动一个 EC2 实例,您将开始看到分配的公共 IP。 一旦在没有启用上述设置的情况下创建了 EC2 实例,即使在重新启动后该 EC2 也不会分配公共 IP,它已经认为该子网是私有的。 希望这会有所帮助!

【讨论】:

【参考方案12】:

嗯。这么多回复。所有这些都按照“你做错了什么”的顺序。

Newsflash:AWS 并不总是能正常工作。我已经使用 AWS 很长时间了。我亲眼目睹了不启动的实例、不停止的实例、已部署实例的磁盘损坏以及正在运行的实例的网络故障。

我从未见过没有创建公共 IP 的情况。直到今天早上。现在我可以将它添加到列表中。

记录在案 - 这是我验证的内容:)

集群中的三个相同实例 所有实例都在同一个可用区中 所有实例具有相同的 VPC VPC DNS 设置正确(启用解析/主机名) 所有实例具有相同的子网 子网有: a) 公共路由表; b) 启用创建公共 IP 的选项 子网中有大量可用的 IP 空间

三个实例中的两个接收公共 IP。第三个没有。

因此,对于以后看到这篇文章的任何其他人:不,你没有疯。是的,AWS 有可能搞砸了。

在我们的例子中,手动终止问题实例并启动新集群...“修复”了问题。

而且 - 我赞成从 STOPPED 实例“启动更像这样”对公共 IP 产生影响的答案。不是因为它是正确的答案(不是),而是因为它展示了对其他无法解释的情况的令人钦佩的反应:反复试验/实验。古老的“天啊,如果我尝试 this...会发生什么”。作为云专业人士:如果所有其他标准故障排除步骤都失败了,唯一的选择是清除实例(或子网、Lambda 函数、DynamoDb 或 SNS 队列;无论是失败的资源),那么跳出框框思考是明智的,并且尝试其他操作。

换句话说:保持开放的心态

【讨论】:

祝福你分享这个并拯救我的理智 我希望我能反刍给这个答案一枚奖章。我刚刚终止了我的实例并使用相同的 terraform 模板重新启动了完全相同的实例。它现在有公共ip。 mofos【参考方案13】:

很可能,公共子网没有启用“自动分配 IPv4”功能。它被选为“否”。在您的实例创建过程中,默认选项是“使用子网设置(启用)”。这就是为什么新发布的实例无法获得公共IP地址的原因。

转到 VPC 仪表板并单击子网。选择一个公共子网并从操作列表中选择修改自动分配 IP 设置并选中自动分配 IPv4。保存更改后,您的实例将自动获得公共 IP。

【讨论】:

以上是关于EC2 t2.micro 实例没有公共 DNS的主要内容,如果未能解决你的问题,请参考以下文章

是否可以为 AWS 公共 DNS EC2 实例设置 SSL

我为AWS EC2实例更改了区域。但我无法从新的IP地址和公共DNS看到一个网站

在 bash 中使用 ec2 命令行工具获取 ec2 实例的公共 dns 名称

更改 EC2 实例上的公共 DNS

带有 PHP SDK 的 AWS EC2 - 等到实例具有公共 DNS 名称

使用 BOTO3 检索 EC2 实例的公共 dns