這個頁面提供解決方案,協助您排解使用 Cloud DNS 建立 公開區域、 私人區域、反向查詢區、 轉送區域和資源記錄時,可能遇到的常見問題。
公開區域
本節說明公開區域的問題。
無法建立公開區域
如果收到 attempted action failed 錯誤,表示專案未啟用 Cloud DNS API。
如要啟用 Cloud DNS API,請按照下列步驟操作:
前往 Google Cloud 控制台的「API Library」(API 程式庫) 頁面。
在「Select a recent project」(選取近期專案) 中,選取要啟用 API 的 Google Cloud 專案。
在「API library」(API 程式庫) 頁面中,使用「Search for APIs & Services」(搜尋 API 和服務) 方塊搜尋
Cloud DNS API。系統會隨即顯示 API 說明頁面。按一下「Enable」(啟用)。
私人區域
本節說明私人區域的問題。
Shared VPC 服務專案的私人區域相關問題
如需將私人區域與 Shared VPC 網路搭配使用的重要資訊,請參閱這一節。
無法建立私人區域、無法列出或建立政策
您必須擁有 DNS 管理員角色,才能執行各種私人區域操作,例如列出網域名稱系統 (DNS) 伺服器政策或建立私人區域。這個角色可以透過 Identity and Access Management (IAM) 授予。
私人區域無法在同一個虛擬私有雲網路中解析
首先,請確認您是在同一個網路上執行測試。
確認 VM 執行個體的主要介面,與您建立的私人區域位於同一個網路
虛擬機器 (VM) 會將所有流量從主要介面傳送出去,除非流量的目的地是連線到其他介面之一的子網路,或者 VM 已設定了政策轉送。請確認您測試的 VM 主要介面,與您正在測試的私人區域位於同一個網路上。
確定 VM 目前使用以下網路:
gcloud compute instances describe VM_NAME \
--zone=GCE_ZONE \
--format="csv[no-heading](networkInterfaces['network'])"
確認該網路已加入有權查詢您私人區域的網路清單:
gcloud dns managed-zones describe PRIVATE_ZONE_NAME \
--format="csv(privateVisibilityConfig['networks'])"
確認查詢中的 DNS 名稱是否與您的區域相符
Google Cloud 會根據名稱解析順序解析記錄,並使用最長尾碼的區域,決定要查詢特定 DNS 名稱的區域。請確保您要查詢的記錄尾碼,與可透過虛擬私有雲網路存取的至少一個私人區域相符。舉例來說, Google Cloud會先在提供 dev.gcp.example.lan 的區域中尋找 myapp.dev.gcp.example.lan (如可存取),然後才在提供 gcp.example.lan 的區域中尋找 (如可存取)。
下列指令的輸出內容顯示特定私人區域的 DNS 尾碼:
gcloud dns managed-zones describe PRIVATE_ZONE_NAME \
--format="csv[no-heading](dnsName)"
使用中繼資料伺服器查詢 DNS 名稱
使用 dig 將 DNS 名稱查詢直接提交到 Google Cloud中繼資料伺服器 169.254.169.254:
dig DNS_NAME @169.254.169.254
使用 dig 查詢 VM 的預設名稱伺服器:
dig DNS_NAME
如果兩個 dig 指令的輸出內容產生不同的答案,請檢查第二個指令的 ;; SERVER: 區段。回應伺服器必須是中繼資料伺服器 169.254.169.254。如果不是的話,則表示您已將客體作業系統設定為使用自訂的 DNS 名稱伺服器,而不是預設的Google Cloud 中繼資料伺服器。Cloud DNS 私人區域會要求您使用中繼資料伺服器進行名稱解析。Linux 客體環境和 Windows 客體環境都會為您執行這項作業。如果您已匯入用於 VM 的映像檔,請確認是否已安裝適當的客體環境。
私人區域無法透過 Cloud VPN 或 Cloud Interconnect 解析
首先,確認您可以從已授權的虛擬私有雲網路成功查詢及解析 DNS 名稱。
驗證透過 Cloud VPN 或 Cloud Interconnect 的連線能力
確保從內部部署系統到虛擬私人雲端網路的連線能力可以正常運作。具體而言,通訊埠 53 上的 TCP 和 UDP 流量必須能夠離開您的地端部署網路,並傳送到虛擬私有雲網路。請確認地端部署防火牆的設定,以確保允許這類輸出流量。
您可以使用任何通訊協定 (例如 ping (ICMP)) 來測試從地端部署到您虛擬私有雲網路中範例 VM 的連線能力。雖然系統不會將 Cloud DNS 要求傳送到 Google Cloud VM,但測試與範例 VM 之間的連線能力,可讓您確認透過 Cloud VPN 通道或 Cloud Interconnect 連線的連線能力。請務必為範例Google Cloud VM 設定適當的允許輸入防火牆規則,否則默示拒絕輸入規則會封鎖所有傳入流量。
確保為已授權的虛擬私有雲網路啟用傳入轉送功能
您必須為有權查詢您 Cloud DNS 私人區域的每個虛擬私有雲網路啟用傳入轉送功能。請使用下列指令列出所有政策:
gcloud dns policies list
識別輸出資料表中的網路並檢查「Forwarding」(轉送) 欄位,查看是否已啟用轉送功能。
確保已授權的網路是虛擬私有雲網路
DNS 轉送需要子網路,只有虛擬私有雲網路才有子網路,舊版網路則「沒有」。
gcloud compute networks list \
--format="csv[no-heading](name, SUBNET_MODE)"
舊版網路在輸出內容中會識別為 LEGACY。
確保該網路中保留了有效的 DNS 轉送位址
下列指令會顯示專案中所有保留的 DNS 轉送 IP 位址。
gcloud compute addresses list \
--filter="purpose=DNS_RESOLVER" \
--format='csv[no-heading](address, subnetwork)'
您可以在篩選器中加入 AND 子句,將輸出內容限制為只包含您關注的子網路。
範例:
--filter="name ~ ^dns-forwarding AND subnetwork ~ SUBNETWORK_NAME"
如果您在預期的網路或區域中沒有看到 IP 位址,請向 Google Cloud 支援團隊提交支援單。
執行 dig 指令,將查詢指向您在前一個指令中找到的位址。請從同一個網路中的 VM 執行此操作。這項測試可驗證傳入轉送站是否正常運作、問題是否出在其他地方。
dig DNS_NAME @10.150.0.1 # address returned by previous command
重複相同的 dig 指令,但透過 VPN 另一端的地端部署主機執行。
在私人區域中定義的 CNAME 記錄無法運作
Cloud DNS 只會追蹤 CNAME 記錄,如「CNAME 追蹤」一文所述。
反向查詢區
本節提供反向查詢區的疑難排解提示。某些私人區域的問題也適用於反向查詢區。如需其他提示,請參閱這篇文章的「私人區域」一節。
無法解析非 RFC 1918 位址的 VM
如果您有非 RFC 1918 位址,請協調 VM。
使用非 RFC 1918 位址協調 VM
如果您在 Cloud DNS 支援功能推出前,於非 RFC 1918 Alpha 版期間建立 VM,這些 VM 可能無法正確解析。如要解決這個問題,請重新啟動 VM。
轉送區域
本節提供轉送區域的疑難排解提示。 某些私人區域的問題也適用於轉送區域。如需其他提示,請參閱這篇文章的「私人區域」一節。
轉送區域 (傳出轉送) 無法運作
首先,確認您可以從已授權的虛擬私有雲網路成功查詢及解析 DNS 名稱。
無法將查詢從用戶端虛擬私有雲網路中的 VM 轉送至供應商虛擬私有雲網路
如果您使用 DNS 對接,並想將用戶虛擬私有雲網路中 VM 的查詢轉送至供應商虛擬私有雲網路,然後再轉送到一或多個地端部署名稱伺服器,請確認符合下列其中一項必要條件:
供應商虛擬私有雲網路的動態轉送模式已設為
GLOBAL用戶虛擬私有雲網路中的 VM 與供應商虛擬私有雲中的 VPN 通道或 Cloud Interconnect 位於相同區域
(僅限傳統版 VPN) 供應商虛擬私有雲網路已設定靜態路徑,可透過傳統版 VPN 通道傳送目的地為地端部署名稱伺服器的流量。供應商虛擬私有雲網路也必須有 VM 或 VPN 通道,與用戶端 VM 使用的子網路位於相同區域
舉例來說,假設 VPC1 使用對接區域,將
example.com.的查詢傳送至 VPC2。假設 VPC2 也有example.com.的私人轉送區域,並使用傳統版 VPN 通道將查詢轉送至地端部署名稱伺服器如果是位於 VPC1 中
us-east1的 VM 查詢example.com.,VPC2 必須有位於us-east1的 VM。您也必須設定靜態路由,涵蓋地端部署名稱伺服器的 CIDR 範圍,並將下一個躍點設為傳統版 VPN 通道。驗證透過 Cloud VPN 或 Cloud Interconnect 的連線能力
您可以使用任何通訊協定 (例如 ping (ICMP)) 來測試從地端部署到您虛擬私有雲網路中範例 VM 的連線能力。我們也建議您嘗試使用 dig 之類的工具,直接從範例Google Cloud VM 查詢地端部署名稱伺服器:
dig DNS_NAME @192.168.x.x # address of the onprem DNS server
檢查虛擬私有雲網路的防火牆規則
默示允許輸出防火牆規則允許來自虛擬私有雲網路中的 VM 傳出連線和已建立的回應,除非您已建立自訂規則來拒絕輸出。如果您已建立自訂拒絕輸出規則,則將需要建立優先順序更高的允許規則,以允許至少輸出到內部部署名稱伺服器。
檢查地端部署防火牆
確保您的地端部署防火牆已設為允許 35.199.192.0/19 的傳入流量和外送流量。
檢查地端部署防火牆中的記錄,尋找來自 35.199.192.0/19 的 DNS 要求。如要使用 regex 運算式進行搜尋,請使用下列項目:
"35\.199\.(19[2-9]|20[0-9]|21[0-9]|22[0-3]).*"
檢查地端部署名稱伺服器
確認您的地端部署名稱伺服器中未設定任何會封鎖來自 35.199.192.0/19 的查詢的 ACL。
檢查您的地端部署名稱伺服器是否正在接收來自 35.199.192.0/19 的封包。如果您擁有殼層存取權,則可以使用 tcpdump 等工具,尋找與 35.199.192.0/19 的傳入封包和外送封包:
sudo tcpdump port 53 and tcp -vv
確認傳回路由
您的地端部署網路必須具有連往 35.199.192.0/19 目的地的路由,且下一個躍點必須是傳送 DNS 要求的同一個虛擬私有雲網路的 VPN 通道或 Interconnect 連線。如要瞭解這項行為,請參閱「建立轉送區域」一節。
如果您使用多個 VPN 通道將同一個虛擬私有雲網路連線到地端部署網路,則無須使用與傳送回應相同的通道來傳遞回應,但必須使用在產生要求的「同一個」虛擬私有雲網路中具有下一個躍點的 VPN 通道來傳遞回應。
如果您已將多個虛擬私有雲網路連線到地端部署網路,則必須確保不會將 DNS 回覆傳送到錯誤的網路。 Google Cloud 會捨棄傳送到錯誤虛擬私有雲網路的 DNS 回應。如需建議解決方案,請參閱最佳做法指南。
傳出轉送至使用非 RFC 1918 IP 位址的名稱伺服器失敗
Cloud DNS 預設會使用標準路由,如果目標名稱伺服器具有非 RFC 1918 IP 位址,系統會透過公開網際網路轉送查詢。標準路由不支援將查詢轉送至非 RFC 1918 位址的名稱伺服器,這類伺服器無法透過公開網際網路連線。
如要透過虛擬私有雲網路將查詢轉送至使用非 RFC 1918 IP 位址的名稱伺服器,請設定 Cloud DNS 轉送區域或伺服器政策,針對目標名稱伺服器使用私人路由。
如要瞭解標準和私人轉送之間的差異,請參閱轉送目標和轉送方法。
即使目標名稱伺服器有虛擬私有雲路由,這項限制也適用。設定標準轉送時,非 RFC 1918 位址的路由不會影響 Cloud DNS 的輸出轉送行為。
傳出查詢轉送至次要 NIC 失敗
請確認已正確設定次要網路介面控制器 (NIC)。
如需設定額外 NIC 的操作說明,請參閱「建立內含多個網路介面的虛擬機器執行個體」一節。
傳出轉送的查詢收到 SERVFAIL 錯誤
如果 Cloud DNS 從所有目標名稱伺服器收到錯誤,或是未從任何目標名稱伺服器收到回應,就會傳回 SERVFAIL 錯誤。
如要解決這個問題,請確認您的地端部署名稱伺服器設定正確無誤。接著,確認地端部署名稱伺服器會在 4 秒內,回應「將 Google Cloud和地端部署防火牆設為允許 DNS 流量」一節所述的 Cloud DNS 位址範圍查詢。如果地端部署名稱伺服器會查詢上游名稱伺服器 (例如,因為設定為快取解析器),請檢查上游名稱伺服器是否沒有問題。
此外,如果轉送目標是地端部署系統,請注意,為該路徑設定的路由可以是自訂動態路由或自訂靜態路由,但「含有網路標記的自訂靜態路由不適用於轉送 DNS 查詢」,這點非常重要。請確保用於連線至地端部署名稱伺服器的路由未指定網路標記。
資源記錄
本節提供資源記錄的疑難排解提示。
查詢區域中的資源記錄集時發現非預期資料
查詢 Cloud DNS 代管區域中的資源記錄集時,您可能會收到非預期的資料,原因如下:
系統不支援使用 RFC 1035 所指定
@語法建立的資源記錄集。Cloud DNS 會直接解讀這類資源記錄集中的@符號。因此,在example.com.區域中,為 QNAME@建立的記錄集會解讀為@.example.com.,而不是example.com.。如要解決這個問題,請確保建立的記錄集不含@符號,且所有名稱都與區域的頂端節點相關。與所有記錄一樣,萬用字元 CNAME 記錄也須遵守 RFC 4592 中所述的存在規則。舉例來說,假設您在
example.com.區域中定義下列記錄集:*.images.example.com. IN CNAME _static.example.com.srv1.images.example.com. IN A 192.0.2.91_static.example.com. IN A 192.0.2.92查詢
public.srv1.images.example.com.會傳回NOERROR,但答案部分為空白。CNAME 與 QNAME「之間」存在記錄,導致系統無法傳回 CNAME,但沒有與 QNAME 完全相符的記錄,因此 Cloud DNS 會傳回空白答案。這是標準 DNS 行為。
Google Cloud VM 顯示的指標 (PTR) 記錄不正確
在維護事件期間遷移 VM 時,PTR 記錄邏輯無法正確處理某些極端情況,且會將 DNS PTR 記錄還原為 googleusercontent.com 完整網域名稱 (FQDN)。如要還原功能,請再次套用 PTR 記錄。
想瞭解如何在 VM 上套用 PTR 記錄,請參閱「為 VM 執行個體建立 PTR 記錄」一文。
Cloud DNS 資源記錄集以隨機順序傳回
為配合 DNS 實務做法,Cloud DNS 名稱伺服器現在會隨機排序資源記錄集,並忽略授權伺服器提供的排序。這是正常的 DNS 行為,適用於公開 「和」 私人 Cloud DNS 區域。
不支援的區域資源類型
如果您針對某項功能在 gcloud 指令或 API 要求中輸入 --location 旗標,但該功能指定的是其他 Cloud DNS 區域,系統就會拒絕要求。舉例來說,如果您將僅限區域的功能要求傳送至全域伺服器,或是將僅限全域的功能要求傳送至區域伺服器,伺服器會拒絕該要求,並提供 _UNSUPPORTED_ZONAL_RESOURCE「TYPE」錯誤。
如需區域 Cloud DNS 支援的資源和功能清單,請參閱「區域 Cloud DNS 支援」一節。
進階威脅偵測功能
本節針對使用 DNS Armor 時可能遇到的問題提供相關資訊,以及每項問題的修正建議。
指標顯示傳送至威脅偵測工具的 DNS 查詢次數為零或極低
首先,請確認您有 DNS 威脅偵測工具。
驗證 DNS 威脅偵測工具
前往 Google Cloud 控制台的「Advanced threat detection」(進階威脅偵測) 頁面。
確認您已列出威脅偵測工具。
確認您有網際網路的查詢
只有在對網路提出網際網路的查詢或要求時,系統才會傳送查詢記錄。
前往 Google Cloud 控制台的「Monitoring」頁面。
在「Metric」(指標) 中,依序選擇「
Cloud DNS Query」、「Query」和「DNS response counts」。查看網際網路的目標類型指標。
或者,如果您已啟用 DNS 查詢的 Cloud Logging,請使用 Logs Explorer 確認您具備網際網路查詢。
前往 Google Cloud 控制台的「Logs Explorer」頁面。
查看 DNS 記錄,並檢查網際網路查詢。
未傳回威脅事件記錄
如果 Cloud Logging 未收到威脅事件,請先在資訊主頁上確認是否已設定進階威脅偵測工具。請注意,只有在偵測到威脅時,系統才會傳回威脅事件記錄。
確認威脅偵測功能已啟用
前往 Google Cloud 控制台的「Advanced threat detection」(進階威脅偵測) 頁面。
確認您已列出威脅偵測工具。
系統未針對部分濫用或不良網域產生 DNS 威脅事件
如果網域是從網路上公開的惡意網域清單取得,由於 DNS 威脅網域經常變更,系統可能不會為這類網域產生 DNS 威脅事件。這些清單中的舊網域或過期網域不會產生 DNS 威脅事件。
以下是可用於驗證 DNS 威脅網域的測試網域:
- dnst-gcp-blox.com
- ftags-gcp-blox.com
- dga-gcp-blox.com
確認測試網域是否產生 DNS 威脅事件
登入您要監控的專案所屬的 VM。
開啟終端機,並對其中一個測試網域發出 Dig 指令。
domain=TEST_DOMAIN
dig $domain -t A將
TEST_DOMAIN替換成系統列出的其中一個網域。前往 Google Cloud 控制台的「Logs Explorer」頁面。
執行下列查詢:
resource.type="networksecurity.googleapis.com/DnsThreatDetector"搜尋您在 Dig 指令中使用的測試網域。
這類網域會產生 DNS 威脅事件。如果找不到系統所列網域的 DNS 記錄,請與支援團隊聯絡。
後續步驟
- 如要進一步瞭解 Cloud DNS 功能,請參閱「Cloud DNS 總覽」一文。
- 如要解決錯誤,請參閱「錯誤訊息」一文。
- 如需其他協助,請參閱這個網頁。