內部 DNS 總覽


建立 Compute Engine 執行個體時,內部 DNS 會自動為執行個體建立 DNS 名稱。這個 DNS 名稱可解析內部 IP 位址,方便執行個體之間進行內部通訊。 Google Cloud 上的虛擬私有雲網路會使用內部 DNS 服務,讓同一個網路中的運算執行個體使用內部 DNS 名稱互相存取。

Google Cloud 在管理執行個體時,系統會自動建立、更新和移除下列 DNS 記錄類型:

  • 系統會為 .internal 的 DNS 區域中的執行個體建立 DNS 位址記錄 (或稱為 A 記錄)。
  • 執行個體的 PTR 記錄會在對應的反向區域中建立,用於反向 DNS 查詢。

舉例來說,當您刪除執行個體時, Google Cloud 會自動移除其內部 DNS 名稱的相關 A 和 PTR 記錄。如果您之後建立相同名稱的執行個體, Google Cloud 會為此替換項目建立新的記錄。

限制

  • Compute Engine 只會為執行個體 nic0 網路介面的內部 IPv4 主要位址建立內部 DNS 名稱 A 和 PTR 記錄。因此,nic0 網路介面的堆疊類型必須是「僅限 IPv4」或雙重堆疊。內部 DNS 不支援僅限 IPv6 的網路介面 (預先發布版)。

  • Compute Engine 不會為下列項目建立內部 DNS 記錄:

    • 網路介面的主要內部 IPv4 位址,與 nic0 不同。
    • 任何網路介面的外部 IPv4 位址。
    • 任何網路介面的別名 IP 範圍內部 IPv4 位址。
    • 任何網路介面的內部或外部 IPv6 位址範圍。
  • 解析內部 DNS 名稱時,用戶端 VM 和與內部 DNS 記錄相關聯的 VM 必須符合以下條件:

    • 位於相同的虛擬私有雲網路。
    • 在同一個專案中 (特定共用虛擬私有雲情境除外)。

    如要進一步瞭解共用虛擬私有雲情境,請參閱「內部 DNS 名稱與共用虛擬私有雲」。

區域和全域內部 DNS 名稱

Google Cloud 有兩種類型的內部 DNS 名稱:

  • 區域 DNS:執行個體名稱在每個區域中不得重複,但您可以在不同區域重複使用執行個體名稱。舉例來說,只要執行個體位於不同區域,您可以有幾個名為 instance-1 的執行個體。
  • 全域 DNS:每個專案中的執行個體名稱不得重複。使用全域 DNS 時,您無法在專案中重複使用執行個體名稱。

Google 強烈建議使用區域性 DNS,因為這種 DNS 能確保較高的可靠性,全域 DNS 在服務中斷時會發生下列問題:

  • 執行個體名稱在整個專案中不得重複。因此,您無法在發生控制平面錯誤的區域中建立新執行個體,即使您在該區域中擁有或先前擁有專案資源也一樣。 Google Cloud 無法驗證無法使用的區域中現有的資源 DNS 名稱。
  • 您無法使用 Compute Engine 的某些功能,例如代管執行個體群組 (MIG) 的自動調度資源功能。因此,使用自動調度資源功能來妥善處理工作負載增加情形的應用程式無法擴充。

啟用 Compute Engine API 時,系統會設定預設的內部 DNS 類型。

  • 預設的內部 DNS 類型為可用區 DNS。
  • 如果您的機構或獨立專案在 2018 年 9 月 6 日前啟用 Compute Engine API,則預設的內部 DNS 類型會設為全球 DNS。

下表說明內部 DNS 名稱的完整網域名稱。

內部 DNS 類型 完整網域名稱 (FQDN)
區域 DNS INSTANCE_NAME.ZONE.c.PROJECT_ID.internal
全域 (全專案) DNS INSTANCE_NAME.c.PROJECT_ID.internal

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。對於區域 DNS,這個值在區域內不得重複,但可在不同區域重複。對於全球 DNS,執行個體名稱必須在專案中不重複。
  • ZONE:執行個體所在的區域。
  • PROJECT_ID:執行個體所屬的專案。

如要瞭解如何控制在專案或執行個體層級使用哪一種內部 DNS 名稱類型,請參閱設定專案或執行個體的 DNS 名稱一節。

DNS 名稱解析

執行個體會接收內部 DNS 解析資訊做為其 DHCP 租約的一部分。DNS 解析方法視作業系統平台而定:

  • Linux:根據預設,執行個體的 DNS 伺服器 (169.254.169.254:53) 會解析內部 DNS 名稱。
  • Windows:根據預設,子網路的預設閘道會解析內部 DNS 名稱。

PTR 記錄的反解區域

Google Cloud的內部 DNS 服務會自動針對下列反解區域中的執行個體建立 PTR 記錄:

  • 10.in-addr.arpa.
  • 168.192.in-addr.arpa.
  • 16.172.in-addr.arpa.17.172.in-addr.arpa.、... 至 31.172.in-addr.arpa.

內部 DNS 名稱與共用的 VPC

與內部 DNS 記錄相關聯的用戶端 VM 和 VM 可位於不同的專案中,但必須使用相同的共用虛擬私有雲網路。舉例來說,用戶端可位於一個服務專案,而與內部 DNS 記錄相關聯的 VM 則可位於其他服務專案或主機專案中。

用戶端必須針對內部 DNS 記錄發出完整網域名稱 (FQDN) 查詢,而非依賴部分查詢和 DNS 搜尋網域。每個專案的 DNS 搜尋網域不盡相同,原因如下:

  • 每個內部 DNS A 記錄的網域名稱部分,都包含所含 VM 專案的專案 ID。如果服務專案中的 VM nic0 網路介面使用共用虛擬私有雲網路,則該 VM 的專案與包含該網路的專案不同。

  • 使用區域或全域 (全專案) 內部 DNS 名稱取決於包含 VM 的專案設定。

如要進一步瞭解共用虛擬私人雲端,請參閱:

自訂內部 DNS 名稱

部分機構或應用程式可能需要自訂內部 DNS 名稱,而非由 Google Cloud建立的預設內部 DNS 名稱。

使用 Cloud DNS 建立私人區域和自訂記錄

您可以使用 Cloud DNS 私人區域為執行個體建立自訂 DNS 項目。您可以設定 PTR 記錄,讓您使用提供的自訂網址覆寫執行個體的預設內部 DNS 網址。

如要建立自訂 PTR 記錄以覆寫自動建立的內部 DNS PTR 名稱,請參閱「不公開區域中 RFC 1918 位址的 PTR 記錄」。如要瞭解如何為執行個體建立 PTR 記錄,請參閱「為執行個體建立 PTR 記錄」。

自訂主機名稱

您可以在建立執行個體時指定自訂主機名稱。內部 DNS 無法解析以這種方式指派的自訂主機名稱。使用自訂主機名稱時,您仍需要在適當的區域中建立對應的 DNS 記錄 (例如,使用 Cloud DNS)。詳情請參閱「使用自訂主機名稱建立執行個體」。

內部 DNS 和 DHCP

Compute Engine 執行個體是設定為每 24 小時更新 DHCP 租約。針對啟用區域 DNS 的執行個體,DHCP 租約則是每小時到期一次。使用區域 DNS 的執行個體在 DHCP 設定檔中同時擁有區域和全域項目。

根據預設,大多數 Linux 發行版會將 DHCP 資訊儲存在 resolv.conf 中。手動編輯 resolv.conf 會導致執行個體在每 24 小時 DHCP 租約到期時,都會恢復為預設 DHCP。如要在 resolv.conf 檔案中進行靜態修改,有幾個 Linux 發行版允許在 DHCP 政策的開頭或結尾附加項目。

修改 DHCP 政策或設定檔的方式取決於您使用的 Linux 發行版。舉例來說,Red Hat Enterprise Linux 和 Debian 會使用 /etc/dhcp/dhcpd.conf 設定檔。在 CentOS 上,您可以使用 Network Manager 指令列公用程式 nmcli

如要瞭解如何設定自訂 DHCP 和 DNS 網路設定,請參閱作業系統說明文件。舉例來說,如果是具備高可用性與更新服務的 Red Hat Enterprise Linux for SAP 8.6,請使用以下連結:手動設定 /etc/resolv.conf 檔案

resolv.conf 檔案範例

根據預設,大多數 Linux 發行版會將 DHCP 資訊儲存在 resolv.conf 中。systemd-resolved 服務也提供 DNS 解析器服務。您可以編輯 /etc/systemd/resolved.conf.d/ 目錄中的 /etc/systemd/resolved.conf 檔案和其他 *.conf 檔案,設定這項服務。在將 DHCP 資訊儲存在 resolved.conf 中的 Linux 發行版上,您可以在 /etc/systemd/resolved.conf 檔案中查看區域和全域 DNS 項目。

這些檔案的限制如下:

  • 搜尋路徑只能處理 6 個記錄,其中 3 個由 Compute Engine 提供。如果您在搜尋路徑中新增項目,使項目總數超過 6 個,則作業系統將不會套用第 6個項目之後的搜尋規則。這可能導致 Compute Engine 功能停止運作,例如透過執行個體名稱存取執行個體。
  • 手動編輯 resolv.conf 會導致執行個體在每 24 小時 DHCP 租約到期時,都會恢復為預設 DHCP。對於使用區域 DNS 的執行個體,DHCP 租約則每小時到期一次。如要在 resolv.conf 檔案中進行靜態修改,有幾個 Linux 發行版允許在 DHCP 政策的開頭或結尾附加項目。

區域 DNS 設定

區域 resolv.conf 範例檔案:

# Local domain name. Computed from your project name.
domain ZONE.c.PROJECT_ID.internal
# Search list for hostname lookup. Starting with entries that represent
# your project and ending with google.internal to facilitate metadata server requests.
search ZONE.c.PROJECT_ID.internal. c.PROJECT_ID.internal. google.internal.
# Address of the DNS server to resolve project specific, and global domain names.
nameserver 169.254.169.254

更改下列內容:

  • ZONE:執行個體所在的區域
  • PROJECT_ID:例項所屬的專案

區域 dhcp.lease 範例檔案:

lease {
  # What interface we are using for the network
  interface "eth0";
  fixed-address 10.128.0.9;
  option subnet-mask 255.255.255.255;
  option routers 10.128.0.1;
  # Lease timeout, older instances will have this value set to infinite.
  option dhcp-lease-time 3600;
  option dhcp-message-type 5;
  option domain-name-servers 169.254.169.254;
  option dhcp-server-identifier 169.254.169.254;
  option interface-mtu 1460;
  # Search path options that are copied into the resolv.conf
  option domain-search "ZONE.c.PROJECT_ID.internal.", "c.PROJECT_ID.internal.", "google.internal.";
  option ntp-servers 169.254.169.254;
  option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1;
  option host-name "INSTANCE_NAME.ZONE.c.PROJECT_ID.internal";
  option domain-name "ZONE.c.PROJECT_ID.internal";
  renew 4 2017/11/16 02:15:52;
  rebind 4 2017/11/16 02:43:59;
  expire 4 2017/11/16 02:51:29;
}

更改下列內容:

  • INSTANCE_NAME:執行個體名稱
  • ZONE:執行個體所在的區域
  • PROJECT_ID:例項所屬的專案

全域 DNS 設定

全域 resolv.conf 範例檔案:

# Local domain name. Computed from your project name.
domain c.PROJECT_ID.internal
# Search list for hostname lookup. Starting with entries that represent
# your project and ending with google.internal to facilitate metadata server requests.
search c.PROJECT_ID.internal google.internal.
# Address of the DNS server to resolve project specific, and global domain names.
nameserver 169.254.169.254

PROJECT_ID 替換為執行個體所屬的專案。

全域 dhcp.lease 範例檔案:

lease {
  # What interface we are using for the network
  interface "eth0";
  fixed-address 10.128.0.8;
  option subnet-mask 255.255.255.255;
  option routers 10.128.0.1;
  # Lease timeout, older instances will have this value set to infinite.
  option dhcp-lease-time 86400;
  option dhcp-message-type 5;
  option domain-name-servers 169.254.169.254;
  option dhcp-server-identifier 169.254.169.254;
  option interface-mtu 1460;
  # Search path options that are copied into the resolv.conf
  option domain-search "c.PROJECT_ID.internal.", "google.internal.";
  option ntp-servers 169.254.169.254;
  option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1;
  option host-name "INSTANCE_NAME.c.PROJECT_ID.internal";
  option domain-name "c.PROJECT_ID.internal";
  renew 4 2017/11/16 12:07:00;
  rebind 4 2017/11/16 22:44:53;
  expire 5 2017/11/17 01:44:53;
}

更改下列內容:

  • INSTANCE_NAME:執行個體名稱
  • PROJECT_ID:例項所屬的專案

dhclient.conf 檔案範例

某些作業系統 (例如 Debian 9) 會使用 dhclient.conf 檔案,而非 resolv.conf 檔案。

/etc/dhcp/dhclient.conf 範例檔案:

# Configuration file for /sbin/dhclient.
#
...
append domain-search "mydomain.com";
prepend domain-name-servers 172.16.1.1;

在這個範例中,mydomain.com 是新的搜尋網域,而 172.16.1.1 是 DNS 伺服器的 IP。

後續步驟