簡體   English   中英

EC2 實例沒有公共 DNS

[英]EC2 instance has no public DNS

與我一起工作的一個人給了我 EC2 憑據以登錄他的 EC2 控制台。 我不是設置它的人。 一些實例顯示一個公共 dns 名稱,而另一些實例則有一個空白的公共 DNS。 我希望能夠連接到具有空白公共 DNS 的實例。 我一直無法弄清楚為什么這些顯示為空白。

我有同樣的問題並解決了它。 查看分步說明:

  • 轉到 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)。

肯定是Auto assign Public IP必須設置為Enable
如果未選中,則默認設置為Use subnet setting (Disable)

分配公共 IP

這是為解決不起作用的問題而提供的提示:

提示 - 如果您的實例沒有公有 DNS 名稱,請打開 VPC 控制台,選擇 VPC,然后檢查摘要選項卡。 如果 DNS 解析或 DNS 主機名不是,請單擊編輯並將值更改為是。

假設您已完成此操作,但仍未獲得公共 IP,然后轉到 VPC 管理屏幕中的相關子網,您可能會發現“自動分配公共 IP”未設置為“是”。 然后修改該設置,我知道您不想在這里,在該子網中創建一個新實例。 據我所知,您無法在主機上修改它,我嘗試過,只是終止它。

  1. 轉到 AWS 控制台。
  2. 轉到服務並選擇 VPC
  3. 點擊vpc。
  4. 選擇實例並單擊操作。
  5. 選擇編輯 DNS 主機名單擊是。

最后,您將獲得您的公共 dns。

對我來說,問題出在子網設置中。

  1. 打開https://console.aws.amazon.com/vpc
  2. 轉到左側菜單中的子網
  3. 選擇您的子網
  4. 修改自動分配 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 將花費您的錢——這完全是“另一個話題”。

首先,這可能有兩個原因:

  1. 您已創建自己的 VPC,但忘記啟用公共 DNS。

要解決這個問題:

i) 轉到 AWS VPC 控制台並選擇您創建的 VPC。

ii) 然后單擊操作,然后啟用 DNS 解析。

            OR
  1. 您尚未在 EC2 配置中啟用公共 ip-assign 選項。

在這里您不能更改設置; 所以創建一個 ami 圖像,然后從中重新創建實例。

驗證 VPC 和子網設置后,我的 EC2 實例仍然沒有公共 DNS。 經過一天的尋找解決方案,我終於想通了。

我必須創建一個新的彈性 IP 地址,然后將其關聯到我的實例。

從 EC2 儀表板:

從側邊欄轉到彈性 IP

單擊分配新地址,然后單擊分配

返回 EC2 儀表板。 轉到網絡接口

選擇沒有公有 DNS 的 EC2 實例。 然后是 Actions - Associate Address

地址字段,選擇新的彈性 IP 地址。

關聯到私有 IP 地址字段,選擇沒有公共 DNS 的私有 IP 地址。

單擊關聯地址

您的 EC2 實例現在應該有一個公共 DNS。

  1. 轉到 VPC
  2. 選擇您的 VPC
  3. 單擊操作並選擇編輯 DNS 主機名
  4. 勾選啟用 DNS 主機名
  5. 點擊保存更改

問題是您的 VPC 中的 DNS 主機名被刪除。 您可以像這樣輕松啟用它:

  1. 在控制台中轉到您的實例,然后單擊您的VPC ID 在此處輸入圖像描述

  2. 在您的 VPC 中,選擇Edit DNS Host names選項選擇編輯 DNS 主機名

  3. 將其設置為啟用並保存您的更改。 在此處輸入圖像描述

  4. 現在,在您的 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 的用戶,關鍵屬性是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'
        }]
    }
  }

如果實例在 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" }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM