Como trabalhar com o Cloud DNS

Nesta página, mostraremos como definir as configurações de DNS para um domínio usando o Cloud DNS e o Cloud Tools for PowerShell. Ela contém um exemplo simples de como criar uma zona gerenciada para governar um domínio e os subdomínios dele. Também mostraremos como adicionar registros de recurso à zona para fornecer informações que determinam o comportamento do servidor DNS ao lidar com solicitações para os domínios dela.

Para este guia, pressupomos que você já tem um nome de domínio e um endereço IP para onde esse nome será apontado. Caso você não tenha, poderá registrar um nome de domínio por meio do Google Domains ou outro registro de domínios da sua escolha.

Leia a referência de cmdlets do Cloud Tools for PowerShell para saber mais sobre os cmdlets do Google Cloud DNS. Para saber mais sobre o Cloud DNS no geral, leia a Visão geral do Cloud DNS.

Como criar uma zona gerenciada para seu domínio

A totalidade do namespace DNS é composta de vários domínios, que em breve incluirão seu próprio nome de domínio. As zonas gerenciadas no Cloud DNS modelam zonas DNS e operam como contêineres para organizar os registros de DNS (como entradas A, CNAME ou TXT) para o mesmo sufixo de nome de DNS. Por exemplo, os registros de "example.com." e subdomínios como "first.example.com." podem estar na mesma zona, porque compartilham o sufixo "example.com.". Observe o ponto no final, que é necessário e indica um nome de DNS absoluto.

Para começar, configure uma zona gerenciada a fim de organizar os registros DNS que você criará para o nome de domínio. Você pode criar uma nova zona gerenciada e adicioná-la ao projeto do console do Google Cloud usando o widget Add-GcdManagedZone:

Add-GcdManagedZone `
    -Name "my-new-zone" `
    -DnsName "example.com." `
    -Description "This is my first zone."

Isso cria uma nova zona com os detalhes especificados e a adiciona ao projeto atual da configuração da CLI gcloud ativa, mas você também pode especificar um ID do projeto diferente, se quiser. Isso cria adicionalmente registros NS e SOA padrão na zona para você.

No entanto, para publicar os novos registros da zona na Internet, você também precisa atualizar os servidores de nomes do seu domínio para usar o Cloud DNS. Mesmo que o domínio esteja registrado no Google Domains, você ainda precisará atualizar os servidores de nomes.

Para encontrar os servidores de nomes do Cloud DNS atribuídos ao seu domínio, use o cmdlet Get-GcdManagedZone na zona gerenciada que rege o domínio para retornar informações sobre a zona:

Get-GcdManagedZone -Zone "my-new-zone"

Adicionar e remover conjuntos de registros de recursos

Os registros de recursos DNS oferecem informações que definem o comportamento do servidor DNS ao lidar com as solicitações enviadas para um domínio. Por exemplo, os registros DNS podem ser usados para informar ao servidor qual endereço IP um domínio resolve, indicar os servidores de troca de e-mails utilizáveis para um domínio, entre outras coisas.

No Cloud DNS, você pode adicionar ou remover registros DNS em uma zona para definir esse comportamento. Para adicionar ou remover conjuntos de registros de recursos imutáveis, não opere diretamente nos registros de uma zona. Em vez disso, crie registros de recursos independentes ou recupere os existentes usando os cmdlets New-GcdResourceRecordSet e Get-GcdResourceRecordSet, respectivamente, e envie solicitações de alteração com esses registros para uma zona específica usando o cmdlet Add-GcdChange.

Como criar conjuntos de registros de recursos

É possível usar o cmdlet auxiliar New-GcdResourceRecordSet para criar um conjunto de registros de recursos que você pode colocar em uma alteração e depois adicionar ou remover de uma zona gerenciada.

Por exemplo, se você quiser criar um registro A para apontar seu domínio para um endereço IPv4 externo no formato #.#.#.# (Se você tiver um endereço IPv6, use um registro AAAA), use o seguinte comando:

$ARecord = New-GcdResourceRecordSet `
    -Name "example.com." -Rrdata "107.1.23.134" -Type "A"

Da mesma forma, para criar um registro CNAME para o subdomínio www de modo que "www.example.com." seja resolvido para o mesmo IP e se comporte da mesma maneira que "example.com.", você poderá usar o comando:

$CNAMERecord = New-GcdResourceRecordSet `
    -Name "www.example.com." -Rrdata "example.com." -Type "CNAME"

Os tipos de registro de recurso compatíveis que podem ser criados e incluídos nas alterações de uma zona são A, AAAA, CNAME, MX, NAPTR, NS, PTR, SOA, SPF, SRV e TXT. Para ajuda sobre como decidir de quais registros você precisa e como criá-los, consulte os formatos de registro de recurso compatíveis com o Cloud DNS.

Como recuperar conjuntos de registros de recursos

Se você quiser recuperar um conjunto de registros de recursos existente em uma zona, use o cmdlet Get-GcdResourceRecordSet para retornar todos os registros em uma zona e indexar os resultados:

$allRecords = Get-GcdResourceRecordSet -Zone "my-new-zone"
$record0 = $allRecords[0]

Se você quer apenas os registros de um tipo específico, pode filtrar os resultados assim:

$ARecord = Get-GcdResourceRecordSet -Zone "my-new-zone" -Filter "A"

Como aplicar alterações a uma zona gerenciada

Os cmdlets New-GcdResourceRecordSet e Get-GcdResourceRecordSet retornam conjuntos de registros de recursos, mas não os adicionam ou removem. Para isso, use o cmdlet Add-GcdChange:

Add-GcdChange `
    -Zone "my-new-zone" -Add $record1,$record2 -Remove $record0

Por exemplo, para adicionar à zona os registros A e CNAME que você criou acima, faça isto:

Add-GcdChange -Zone "my-new-zone" -Add $ARecord,$CNAMERecord

Se mais adiante você quiser alterar o endereço IPv4 para o qual seu domínio é resolvido, crie um novo registro do tipo A, adicione-o à zona gerenciada e exclua o registro A antigo ao mesmo tempo:

$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

Cada chamada para o cmdlet Add-GcdChange retorna o objeto de solicitação de alteração recém-executado. Também é possível transmitir ao cmdlet Add-GcdChange um objeto de solicitação de alteração para ser executado diretamente em vez de listas de conjuntos de registros de recursos:

Add-GcdChange -Zone "my-new-zone" -ChangeRequest $change0

A criação manual de objetos de solicitação de alteração não é recomendada, mas é útil se você quiser reaplicar uma alteração feita anteriormente ou feita em outra zona. Você pode recuperar todos os objetos de solicitação de alteração anteriores que foram aplicados a uma zona usando o cmdlet Get-GcdChange:

$allChanges = Get-GcdChange -Zone "my-new-zone"

Para escolher uma alteração específica, basta indexar o resultado anterior ou especificar qual alteração será recuperada com um ChangeId. Solicitações de alteração geralmente recebem um número de 0 em diante com base na ordem em que foram enviadas para a zona:

$firstChange = Get-GcdChange -Zone "my-new-zone" -ChangeId 0
Add-GcdChange -Zone "my-new-zone" -ChangeRequest $firstChange

Como excluir zonas gerenciadas

Às vezes, pode ser necessário remover completamente uma zona gerenciada. Isso ocorre por diversos motivos. Talvez você tenha a zona gerenciada "user1-zone" para o subdomínio "user1.example.com.", mas user1 excluiu a conta. Assim, você quer excluir o subdomínio e todos os registros DNS associados a ele.

Para remover uma zona gerenciada do projeto, use o cmdlet Remove-GcdManagedZone:

Remove-GcdManagedZone -Zone "user1-zone"

Se o procedimento for bem-sucedido, o comando não retornará nada.

Entretanto, esse cmdlet não funciona imediatamente no que o Cloud DNS considera zonas gerenciadas "não vazias" ou zonas que contêm registros do tipo não NS ou não SOA (registros não padrão). Por exemplo, não seria possível excluir os "my-new-zone" em que você adicionou registros A e CNAME, sem conceder permissão ao cmdlet durante o processamento ou usando a chave -Force:

Remove-GcdManagedZone -Zone "my-new-zone" -Force

O cmdlet Remove-GcdManagedZone também aceita entradas de pipeline para as zonas a serem excluídas. Por exemplo, o comando a seguir força a exclusão de todas as zonas gerenciadas do projeto atual. Isso poderá ser útil se você não tiver mais nenhum dos domínios configurados em um projeto:

Get-GcdManagedZone | Remove-GcdManagedZone -Force