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


当前回答

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

已创建VPC,但忘记开启“公共DNS”。

要解决这个问题:

i)进入“AWS VPC控制台”,选择已创建的VPC。

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

            OR

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

这里你不能改变设置;因此,创建一个ami映像,然后从中重新创建实例。

其他回答

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

步骤1:

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

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

例如80,443,22等和端口的流量来源(如果你想让端口对所有人开放,请选择任何地方,或者如果你想为所选的ip打开应用程序-手动输入IPV4/IPV6。

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

步骤2:

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

了解更多关于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 = "mostafa_vpc" }
}

只需启动另一个实例(如果它没有用处,也可以删除有问题的实例),并确保这次选中了“自动为您的实例分配公共IP地址”。如果不像路西法说的那样;为实例分配一个弹性IP (EIP),然后使用该IP登录。但是要小心,如果你运行的是免费的AWS层,一个EIP会让你花钱——这是另一个话题了。

这是解决这个问题的技巧,它不起作用:

提示—如果您的实例没有公共DNS名称,请在VPC控制台,选择VPC,在“概要”页签。如果“DNS解析”或“DNS主机名”中有一个为“否”,单击“编辑”,修改为“是”。

假设你已经这样做了,你仍然没有得到一个公共IP,然后在VPC管理屏幕转到有问题的子网,你可能会发现“自动分配公共IP”没有设置为yes。修改这个设置,我知道你不想在子网中创建一个新实例。据我所知,你不能在主机上修改这个,我试了又试,只是终止它。

对于那些使用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'
        }]
    }
  }