本頁面說明如何使用 Cloud DNS 與 Cloud Tools for PowerShell 來完成網域的 DNS 設定。其中提供的簡單範例將逐步說明如何建立代管區域來控管網域及其子網域,然後將資源記錄新增至該區域,藉此提供相關資訊,規定 DNS 伺服器如何處理傳送至區域網域的要求。
本文假設您有一個網域名稱,以及可對應該網域名稱的 IP 位址。如果沒有,您可以透過 Google Domains 或您選擇的其他網域註冊商來註冊網域名稱。
如要進一步瞭解 Cloud DNS cmdlet,請參閱 Cloud Tools for PowerShell cmdlet 參考資料。如要進一步瞭解 Cloud DNS 的一般資訊,請參閱 Cloud DNS 總覽。
建立網域的代管區域
整個 DNS 命名空間是由許多網域構成,而您的網域名稱即將成為其中的一部分。Cloud DNS 中的代管區域會建立 DNS 區域的模型,並可做為容器使用,針對具備相同 DNS 尾碼的網域整理 DNS 記錄 (例如 A、CNAME 或 TXT 項目)。舉例來說,「example.com.」及「first.example.com.」等子網域的記錄可能會在同一個區域中,因為它們的尾碼都是「example.com.」。請注意,尾隨點為必要元素,用來表示絕對 DNS 名稱。
如要開始進行,請設定代管區域,以整理您將為網域名稱建立的 DNS 記錄。您可以使用 Add-GcdManagedZone
指令碼建立新的代管區域,並將其新增至 Google Cloud 主控台專案:
Add-GcdManagedZone ` -Name "my-new-zone" ` -DnsName "example.com." ` -Description "This is my first zone."
這會建立含有指定詳細資料的新區域,並將其新增至有效 gcloud CLI 設定的現有專案中,不過您也可以視需要選擇是否要指定不同的專案 ID。這會為您在區域中額外建立預設 NS 和 SOA 記錄。
不過,如要將區域中的新記錄發布至網際網路,您還必須更新網域的名稱伺服器以使用 Cloud DNS。即使網域已透過 Google Domains 註冊,您仍需更新名稱伺服器。
您可以在控管網域的代管區域上使用 Get-GcdManagedZone
cmdlet 來傳回區域的相關資訊,以找到指派給您網域的 Cloud DNS 名稱伺服器:
Get-GcdManagedZone -Zone "my-new-zone"
新增及移除資源記錄集
DNS 資源記錄可提供相關資訊,規定 DNS 伺服器如何處理傳送給網域的要求。舉例來說,DNS 記錄可用來指示伺服器應將網域解析至哪個 IP 位址、指出網域的可用郵件交換伺服器等等。
在 Cloud DNS 中,您可以在區域中新增或移除 DNS 記錄以設定這類行為。如要新增或移除無法變更的資源記錄集,請不要直接在區域的記錄上執行,而是分別使用 New-GcdResourceRecordSet
和 Get-GcdResourceRecordSet
指令碼建立獨立資源記錄或擷取現有記錄,然後使用 Add-GcdChange
指令碼將變更要求與這些記錄一起傳送至特定區域。
建立資源記錄集
您可以使用輔助 cmdlet New-GcdResourceRecordSet
建立可放入變更中的資源記錄集,然後在代管區域中新增或移除記錄集。
舉例來說,如要建立 A 記錄以將網域指向格式為 #.#.#.# 的外部 IPv4 位址 (如果您有 IPv6 位址,請使用 AAAA 記錄),您可以使用下列指令:
$ARecord = New-GcdResourceRecordSet ` -Name "example.com." -Rrdata "107.1.23.134" -Type "A"
同樣地,如要為 www 子網域建立 CNAME 記錄,以便讓「www.example.com.」與「example.com.」解析至同一個 IP 並產生相同的行為,您可以使用下列指令:
$CNAMERecord = New-GcdResourceRecordSet ` -Name "www.example.com." -Rrdata "example.com." -Type "CNAME"
您可建立並納入區域變更項目的支援資源記錄類型為 A、AAAA、CNAME、MX、NAPTR、NS、PTR、SOA、SPF、SRV 和 TXT。如要瞭解如何選擇所需記錄及該記錄的建立方式,請參閱 Cloud DNS 的支援資源記錄格式。
擷取資源記錄集
如要擷取區域中現有的資源記錄集,您可以使用 Get-GcdResourceRecordSet
cmdlet 傳回區域中的所有記錄,然後對結果編製索引:
$allRecords = Get-GcdResourceRecordSet -Zone "my-new-zone" $record0 = $allRecords[0]
如果您只需要特定類型的記錄,可以視情況篩選結果:
$ARecord = Get-GcdResourceRecordSet -Zone "my-new-zone" -Filter "A"
將變更套用至代管區域
cmdlet New-GcdResourceRecordSet
和 Get-GcdResourceRecordSet
都會傳回資源記錄集,但不會對任何位置新增或移除記錄。如要這麼做,請使用 Add-GcdChange
Cmdlet:
Add-GcdChange ` -Zone "my-new-zone" -Add $record1,$record2 -Remove $record0
舉例來說,如要將您在上述步驟建立的 A 和 CNAME 記錄新增至區域,請執行下列指令:
Add-GcdChange -Zone "my-new-zone" -Add $ARecord,$CNAMERecord
如果您稍後想要變更網域解析的 IPv4 位址,可以建立新的 A 類型記錄,然後將其新增至代管區域,並同時刪除舊的 A 記錄:
$oldARecord = Get-GcdResourceRecordSet -Zone "my-new-zone" -Filter "A" $newARecord = New-GcdResourceRecordSet ` -Name "example.com." -Rrdata "104.1.34.167" -Type "A" Add-GcdChange -Zone "my-new-zone" -Remove $oldARecord -Add $newARecord
每次呼叫 Add-GcdChange
指令碼都會傳回新執行的變更要求物件。您也可以將要直接執行的變更要求物件傳送給 Add-GcdChange
指令碼,而不需要列出資源記錄集:
Add-GcdChange -Zone "my-new-zone" -ChangeRequest $change0
建議您不要手動建立變更要求物件,但如果想要重新套用之前所做的變更或在不同區域所做的變更,則適合使用此方法。您可以使用 Get-GcdChange
cmdlet,擷取所有過去已套用到區域的變更要求物件:
$allChanges = Get-GcdChange -Zone "my-new-zone"
您可以對先前的結果編製索引以選擇特定變更,或使用 ChangeId 指定要擷取哪個變更。變更要求通常都是根據傳送至區域的順序,從 0 開始編號:
$firstChange = Get-GcdChange -Zone "my-new-zone" -ChangeId 0 Add-GcdChange -Zone "my-new-zone" -ChangeRequest $firstChange
刪除代管區域
有時候您可能會想要完全移除代管區域。這麼做的原因有很多,也許是您為子網域「user1.example.com.」建立了代管區域「user1-zone」,但 user1 刪除了他們的帳戶,因此您想要移除這個子網域及所有相關聯的 DNS 記錄。
如要從專案中移除代管區域,請使用 Remove-GcdManagedZone
cmdlet:
Remove-GcdManagedZone -Zone "user1-zone"
如果成功,指令不會傳回任何內容。
不過,這個 cmdlet 不會立即在 Cloud DNS 視為「非空白」代管區域,或包含非 NS 或非 SOA 類型記錄 (非預設記錄) 的區域上運作。舉例來說,如果沒有在處理期間將權限授予 cmdlet 或使用 -Force
切換,您將無法刪除已新增 A 和 CNAME 類型記錄的「my-new-zone」:
Remove-GcdManagedZone -Zone "my-new-zone" -Force
Remove-GcdManagedZone
指令程式也接受使用管道輸入方式來刪除區域。舉例來說,下列指令會強制刪除目前專案中的所有代管區域。如果您不想再維護專案中設定的任何網域,則此方法可能很實用。
Get-GcdManagedZone | Remove-GcdManagedZone -Force