与我一起工作的一个人给了我 EC2 凭据以登录他的 EC2 控制台。我不是设置它的人。一些实例显示一个公共 dns 名称,而另一些实例则有一个空白的公共 DNS。我希望能够连接到具有空白公共 DNS 的实例。我一直无法弄清楚为什么这些显示为空白。
DNS hostnames: no
,但我无法更改该值,并且添加新的 VPC 也不会给我选择。
DNS hostname: yes
,但它只是实例启动时的私有 ID。我只能在使用弹性 IP 时获得公共 IP。
我有同样的问题并解决了它。查看分步说明:
转到 console.aws.amazon.com
转到服务-> VPC
打开您的 VPC
选择连接到 EC2 的 VPC,然后
选择 Actions => Edit DNS Hostnames ---> Change DNS hostnames: to YES
VPC 中实际上有一个名为“DNS 主机名”的设置。您可以修改 EC2 实例所在的 VPC,并将其更改为“是”。这应该够了吧。
我昨天遇到了这个问题,并尝试了 Manny 的上述答案,但没有奏效。但是,VPC 设置确实对我有用。
最终我添加了一个 EIP 并使用它来连接。
听起来该实例是在 VPC 中启动的,但这样做时,Automatically assign a public IP address to your instances
的复选框未选中。因此该实例没有公共 IP
您可以为该实例分配一个弹性 IP,然后使用该 IP 登录。
就我而言,我发现来自 slayedbylucifer 的答案和其他指向相同的答案是有效的。
即使设置为 DNS hostname: yes
,my-pvc 上也没有分配公共 IP(仅私有 IP)。
肯定是自动分配公共 IP 必须设置为启用。如果未选中,则默认设置为使用子网设置(禁用)
https://i.stack.imgur.com/RsYUq.png
这是为解决不起作用的问题而提供的提示:
提示 - 如果您的实例没有公有 DNS 名称,请打开 VPC 控制台,选择 VPC,然后检查摘要选项卡。如果 DNS 解析或 DNS 主机名不是,请单击编辑并将值更改为是。
假设您已完成此操作,但仍未获得公共 IP,然后转到 VPC 管理屏幕中的相关子网,您可能会发现“自动分配公共 IP”未设置为“是”。然后修改该设置,我知道您不想在这里,在该子网中创建一个新实例。据我所知,您无法在主机上修改它,我尝试过,只是终止它。
转到 AWS 控制台。转到服务并选择 VPC 单击 vpc。选择实例并单击操作。选择编辑 DNS 主机名单击是。
最后,您将获得您的公共 dns。
对我来说,问题出在子网设置中。
打开 https://console.aws.amazon.com/vpc 转到左侧菜单中的子网 选择您的子网 修改自动分配 IP 设置以启用
它与称为“DNS 主机名”的 VPC 功能有关。您可以启用或禁用它。转到 VPC,在 Actions 菜单下选择“Edit DNS Hostnames”项,然后选择“Yes”。完成此操作后,应显示 EC2 实例的公共 DNS。
在这里,我将总结最常见的问题:
在创建自定义 VPC 时,如果您希望 ec2 实例等 aws 资源获取公有 IP 地址以便 Internet 可以与其通信,那么您首先必须确保 ec2 实例与自定义 VPC 的公有子网关联。这意味着子网有一个与之关联的互联网网关。此外,您需要确保与 ec2 实例关联的 VPC 的安全组具有允许入站流量到所需端口的规则,例如 ssh、http 和 https。但是这里仍然存在一些常见的疏忽:
1) 您必须确保为 VPC 启用 DNS 主机名
2) 您必须确保链接到 EC2 实例的公有子网启用了“自动分配公有 ip”标志
3) 如果实例已经创建,那么您可能需要终止它并创建一个新实例以填充公共 IP 和公共 DNS 字段。
只需启动另一个实例(如果它没有用,也删除有问题的实例)并确保这次您选中“自动为您的实例分配公共 IP 地址”。如果不是,那么就像 slayedbylucifer 所建议的那样;为实例分配弹性 IP (EIP),然后使用该 IP 登录。不过要小心,如果您运行免费的 AWS 层,EIP 将花费您的钱——这完全是“另一个话题”。
首先,这可能有两个原因:
您已创建自己的 VPC,但忘记启用公共 DNS。
要解决这个问题:
i) 转到 AWS VPC 控制台并选择您创建的 VPC。
ii) 然后单击操作,然后启用 DNS 解析。
OR
您尚未在 EC2 配置中启用公共 ip-assign 选项。
在这里您不能更改设置;所以创建一个 ami 图像,然后从中重新创建实例。
验证 VPC 和子网设置后,我的 EC2 实例仍然没有公共 DNS。经过一天的寻找解决方案,我终于想通了。
我必须创建一个新的弹性 IP 地址,然后将其关联到我的实例。
从 EC2 仪表板:
从侧边栏转到弹性 IP。
单击分配新地址,然后单击分配。
返回 EC2 仪表板。转到网络接口。
选择没有公有 DNS 的 EC2 实例。然后操作 - 关联地址。
地址字段,选择新的弹性 IP 地址。
关联到私有 IP 地址字段,选择没有公共 DNS 的私有 IP 地址。
单击关联地址。
您的 EC2 实例现在应该有一个公共 DNS。
转到 VPC 选择您的 VPC 单击操作并选择编辑 DNS 主机名 勾选为 DNS 主机名启用 单击保存更改
问题是您的 VPC 中的 DNS 主机名被删除。您可以像这样轻松启用它:
在控制台中转到您的实例,然后单击您的 VPC ID。在您的 VPC 中,选择编辑 DNS 主机名选项将其设置为启用并保存您的更改。现在,在您的 EC2 实例窗口中,您可以找到 DNS:
也可以使用 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'
}]
}
}
如果实例在 VPC 中,请确保“DNS 解析”和“DNS 主机名”都设置为“是”。您可以在 Aws 控制台 UI 中执行此操作。 !
转到 VPC 控制台,选择您的 VPC,然后单击操作菜单,选择编辑 DNS 主机名 - 选择是。那应该解决它。
EC2 启动并运行后,我尝试修复“无公共 DNS”,但无法添加公共 DNS
即使在按照上述步骤对 VPC 或子网进行修改之后也是如此
所以,在启动另一个实例之前,我必须对子网和 vpc 进行修改,然后启动一个新实例。
新实例有一个公共 DNS。这就是它对我有用的方式。
您不必为您的实例分配公共 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
对于公共 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/
对于那些使用 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" }
}