ゾーンの管理

マネージド ゾーンとは、同じドメイン名(例: example.com)を共有する DNS レコードをすべて格納するコンテナを指します。マネージド ゾーンを作成すると、そのゾーンに対する DNS クエリへのレスポンスを処理するためにネームサーバーのセットが自動的に割り当てられます。マネージド ゾーンには、含めることができるリソース レコード数の割り当てがあります。

始める前に

Cloud DNS API を使用するには、Cloud DNS プロジェクトを作成して、Cloud DNS API を有効にする必要があります。

REST API を使用するアプリケーションを作成している場合は、OAuth 2.0 のクライアント ID も作成する必要があります。

  1. Google アカウントをまだお持ちでない場合は、Google アカウントを登録します。
  2. GCP Console で Cloud DNS API を有効にします。既存の Compute Engine または App Engine プロジェクトを選択するか、新しいプロジェクトを作成できます。
  3. REST API にリクエストを行う必要がある場合は、OAuth 2.0 の ID を作成する必要があります。OAuth 2.0 を設定
  4. プロジェクト内の以下の情報は、後の手順で入力するために必要になります。
    • クライアント ID(xxxxxx.apps.googleusercontent.com
    • 使用するプロジェクト ID。この ID は、GCP Console の [概要] ページの上部に表示されます。また、ユーザーがアプリで使用するプロジェクト名を入力するようにもできます。

これまでに gcloud コマンドライン ツールを実行したことがない場合は、次のコマンドを実行してプロジェクト名を指定し、GCP Console で認証する必要があります。

gcloud auth login

また、コマンドに --project パラメータを指定すると、さまざまなプロジェクトを呼び出してコマンドを実行できます。

マネージド ゾーンの作成

Cloud DNS API の使用を開始する際に、DNS レコードを格納するためのマネージド ゾーンを作成する必要があります。マネージド ゾーンは、Cloud DNS プロジェクトに接続されています。ゾーンを作成した場合、ドメイン登録を更新するか、明示的にいくつかのリゾルバをポイントするか、またはゾーンのネームサーバーのいずれか 1 つに直接クエリを実行するまで、新しいゾーンは使用できないことに注意してください。

ゾーンを作成するには、DNS ゾーン名、説明、ゾーンを識別するための名前を指定する必要があります。--visibility フラグを使用してマネージド ゾーンを一般公開または限定公開として指定するか、--networks フラグを使用して限定公開ゾーンが表示される VPC ネットワークを指定します。

一般公開ゾーンの作成

マネージド ゾーンは、同じ DNS 名サフィックスの DNS レコードのコンテナです。マネージド ゾーンには、クエリを受け入れて応答するネームサーバーのセットがあります。

新しい一般公開マネージド ゾーンを作成します。

Console

  1. GCP Console の [DNS ゾーンの作成] ページに移動します。

    [DNS ゾーンの作成] ページに移動

  2. [ゾーンのタイプ] には [一般公開] を選択します。

  3. [ゾーン名] を入力します。たとえば my-new-zone です。

  4. 所有しているドメイン名を使用して、ゾーンの [DNS 名] のサフィックスを入力します。たとえば example.com です。

  5. DNSSEC の下で、[Off]、[On]、または [Transfer] 選択します。詳細については、DNSSEC の構成をご覧ください。

  6. [作成] をクリックします。

[ゾーンの詳細] ページが表示されます。NS レコードと SOA レコードはデフォルトで作成されています。

gcloud

gcloud dns managed-zones create my-zone-name \
    --dns-name="example.com" \
    --description="A zone" \
    --visibility=public

Python

def create_zone(project_id, name, dns_name, description):
    client = dns.Client(project=project_id)
    zone = client.zone(
        name,  # examplezonename
        dns_name=dns_name,  # example.com.
        description=description)
    zone.create()
    return zone

限定公開ゾーンの作成

マネージド ゾーンは、同じ DNS 名サフィックスの DNS レコードのコンテナです。限定公開マネージド ゾーンは、指定した 1 つ以上の VPC ネットワークからのみ表示される DNS レコードのコンテナです。

新しい限定公開ゾーンを作成します。

Console

  1. GCP Console の [DNS ゾーンの作成] ページに移動します。

    [DNS ゾーンの作成] ページに移動

  2. [ゾーンのタイプ] には [限定公開] を選択します。

  3. [ゾーン名] を入力します。たとえば、my-new-zone です。

  4. 所有しているドメイン名を使用して、ゾーンの [DNS 名] のサフィックスを入力します。たとえば example.com です。

  5. [説明] を追加します(省略可)。

  6. 限定公開ゾーンが表示されるネットワークを選択します。

  7. [作成] をクリックします。

gcloud

限定公開ゾーンを作成するには、次のコマンドを実行します。

gcloud dns managed-zones create my-zone-name \
    --dns-name="example.com" \
    --description="A zone" \
    --visibility=private \
    --networks=default

Python

def create_zone(project_id, name, dns_name, description):
    client = dns.Client(project=project_id)
    zone = client.zone(
        name,  # examplezonename
        dns_name=dns_name,  # example.com.
        description=description)
    zone.create()
    return zone

accessNotConfigured エラーが表示された場合は、Cloud DNS API を有効にする必要があります。

転送ゾーンの作成

転送ゾーンは、指定ゾーンの通常の DNS 解決よりも優先されます。指定ゾーンのクエリはリストの転送先に転送されます。

Console

  1. GCP Console の [DNS ゾーンの作成] ページに移動します。

    [DNS ゾーンの作成] ページに移動

  2. [ゾーンのタイプ] には [限定公開] を選択します。

  3. [ゾーン名] に「my-new-zone」と入力します。

  4. 所有しているドメイン名を使用して、ゾーンの [DNS 名] のサフィックスを入力します。たとえば example.com です。

  5. [説明] を追加します(省略可)。

  6. 限定公開ゾーンが表示されるネットワークを選択します。

  7. [クエリを別のサーバーに転送する] の横のボックスをオンにします。

  8. [転送先 DNS サーバー] に転送先を入力します。

    転送先は静的 IP アドレスのリストです。同じ VPC ネットワークか、VPN またはインターコネクト経由で到達可能なネットワーク上にある場合、こうした IP アドレスは RFC 1918 形式のアドレスにできます。それ以外の場合は、公開でアクセス可能な IP アドレスにする必要があります。

  9. [作成] をクリックします。

gcloud

 gcloud beta dns managed-zones create example-forwarding-zone \
     --dns-name="example.com" \
     --description="A zone" \
     --networks="default,my-network" \
     --visibility=private \
     --forwarding-targets="8.8.8.8,8.8.4.4"

ここで

  • --dns-name は、転送ゾーンによって解決されるドメインのリストです。
  • --networks は、転送ゾーンを使用できるネットワークのリストです。
  • --visibility は、転送ゾーンが publicprivate かを示します。
  • --forwarding-targets は静的 IP アドレスのリストです。同じ VPC ネットワークか、VPN またはインターコネクト経由で到達可能なネットワーク上にある場合、こうした IP アドレスは RFC 1918 形式のアドレスにできます。それ以外の場合は、公開でアクセス可能な IP アドレスにする必要があります。

要件: 転送先ネームサーバーが VPC ネットワーク内の VM からの DNS リクエストを処理するためには、以下を実行する必要があります。

  • 転送先ネームサーバーが VPC ネットワーク内から到達可能であることを確認してください。dig@ オペレーターを使用し、直接ネームサーバーにクエリします。
  • ネームサーバーに適用されるオンプレミス ネットワークのファイアウォール ルールで、35.199.192.0/19 からのパケットを許可します。
  • オンプレミス ネットワークには、Cloud VPN トンネル、Dedicated Interconnect の接続(VLAN)、または Partner Interconnect の接続(VLAN)を経由して、35.199.192.0/19 宛てのトラフィックを VPC ネットワークに戻すルートが必要です。VPC ネットワークからの DNS クエリに対する応答は 35.199.192.0/19 に返す必要がありますが、インターネット経由で送信することはできません。静的ルーティングを使用する Cloud VPN トンネルの場合は、オンプレミス ネットワーク内に、宛先が 35.199.192.0/19 でネクストホップが VPN トンネルのルートを手動で作成する必要があります。このルートを追加するだけでなく、ポリシーベースのルーティングを使用する Cloud VPN トンネルでは、35.199.192.0/19 を含めるように、オンプレミスの VPN ゲートウェイのリモート トラフィック セレクタと Cloud VPN のローカル トラフィック セレクタを構成する必要があります。ダイナミック ルーティング、Dedicated Interconnect、または Partner Interconnect を使用する Cloud VPN トンネルの場合は、関連付けられた Cloud Router でカスタムルート アドバタイズを構成する必要があります。
  • 転送ゾーンを介して別の VPC ネットワークにある転送先へクエリを転送することはサポートされていません。代わりに、ピアリング ゾーンをこの目的に使用できます。

さらに、以下の注意点があります。

  • VPC ネットワーク内の GCP VM から送信されたすべてのクエリは、35.199.192.0/19 でプロキシされます。すべてのユーザーが 35.199.192.0/19 を使用している場合でも、オンプレミス ネームサーバーは VPC ネットワークからのリクエストのみを受信します。
  • 35.199.192.0/19 のアドレス範囲は、VPC ネットワーク内、または VPC ネットワークに接続されているオンプレミス ネットワーク内からのみ到達可能です。オンプレミス ネットワークが 35.199.192.0/19 宛てのパケットをインターネット経由でルーティングする場合、ドロップされます。
  • GCP では、リクエストを受信するオンプレミス ネームサーバーが 35.199.192.0/19 に応答を送信する必要があります。ネームサーバーが別のネームサーバーにリクエストを送信し、その別のネームサーバーが 35.199.192.0/19 に応答した場合、そのレスポンスは無視されます。セキュリティ上の理由で、GCP では DNS 応答の送信元アドレスがリクエストの宛先アドレスと一致すると想定しています。
  • Cloud DNS は、転送先ネームサーバーに到達可能である限り、最大 60 秒間、またはレコードの TTL の期間(どちらか短い方)の間、送信転送されたクエリの結果をキャッシュに保存します。転送先ネームサーバーが到達不能になると、送信転送されたクエリの結果は TTL の間キャッシュに保存されます。これは、転送ゾーンを介して送信転送されるクエリ、および DNS サーバー ポリシーを通して代替ネームサーバーに送信転送されるクエリに適用されます。

要件: 転送された DNS クエリを外部のネームサーバーで受信できるようにするには、以下を行う必要があります。

  • 外部ネームサーバーが VPC ネットワークから到達可能であることを確認します。
    • オンプレミス ネットワークで、Google の 35.199.192.0/19 IP アドレス範囲からのトラフィックを許可するようにルーティングを設定し、ファイアウォールを構成します。
      • このアドレス ブロックは、VPC ネットワークから別のネームサーバーに DNS クエリを転送するために、Google のプロキシが排他的に使用します。
      • このアドレス ブロックは VPC ネットワーク内からのみ到達可能で、転送が構成されている場合はオンプレミス ネットワークから接続できます。
      • すべての GCP ユーザーに対して 35.199.192.0/19 が使用されていても、オンプレミスのネームサーバーは、限定公開ゾーンへのアクセスが許可されている(転送が有効になっている)VPC ネットワークからのリクエストのみを受信します。
  • GCP では、転送されたクエリを受信するオンプレミスのネームサーバーの IP アドレスからレスポンスを送信する必要があります。オンプレミスのネームサーバーが異なる送信元 IP アドレスから応答した場合、セキュリティ上の理由から GCP はこのレスポンスを無視します。

ピアリング ゾーンの作成

2 つのネットワークがピアリングされている場合、それらは自動的には DNS 情報を共有しません。DNS ピアリングを使用すると、あるネットワーク(コンシューマ ネットワーク)から別のネットワーク(プロデューサー ネットワーク)に DNS リクエストを転送できます。これを行うには、一致する DNS リクエストをプロデューサー ネットワークに転送するピアリング ゾーンをコンシューマ ネットワークに作成します。

Console

  1. GCP Console の [DNS ゾーンの作成] ページに移動します。

    [DNS ゾーンの作成] ページに移動

  2. [ゾーンのタイプ] には [限定公開] を選択します。

  3. [ゾーン名] に「my-new-zone」と入力します。

  4. 所有しているドメイン名を使用して、ゾーンの [DNS 名] のサフィックスを入力します。たとえば example.com です。

  5. [説明] を追加します(省略可)。

  6. 限定公開ゾーンが表示されるネットワークを選択します。

  7. [DNS ピアリング] で、[DNS ピアリングを有効にする] の横にあるボックスを選択します。

  8. [ピアリング プロジェクト] で、ピアリング プロジェクトを選択します。

  9. [ピアリング ネットワーク] で、ピアリング ネットワークを選択します。

  10. [作成] をクリックします。

gcloud

この手順は、すでに 2 つのネットワークをピアリングしていることを前提としています。

  1. まだピアリングしていない場合は、実際に DNS リクエストを処理するネットワーク(プロデューサー ネットワーク)に限定公開ゾーンまたは転送ゾーンを作成します。
gcloud beta dns managed-zones create example-private-zone \
    --dns-name="example.com" \
    --description="This is the zone for example.com" \
    --networks="default,my-network" \
    --visibility=private

ここで

  • --dns-name は、ゾーンによって解決されるサフィックスです。
  • --description は、ゾーンの短い説明です。
  • --networks は、このゾーンを使用できるプロジェクト内のネットワークのリストです。
  • --visibility は、限定公開ゾーンを作成するため、private に設定します。
  1. リソース レコードをゾーンに追加します。

  2. プロデューサー ネットワーク プロジェクトで、他のネットワークにピアリング ゾーンを作成するアカウントに dns.peer IAM 役割を付与します。通常、ピアリング ゾーンを作成するアカウントはサービス アカウントです。

    gcloud beta projects add-iam-policy-binding [PRODUCER_PROJECT] \
        --member=[SERVICE_ACCOUNT] \
        --role=dns.peer
    

    ここで

    • [SERVICE_ACCOUNT] の形式は serviceAccount:test123@example.domain.com です。
  3. DNS リクエストをプロデューサー ネットワークに転送するピアリング ゾーンをコンシューマ ネットワークに作成します。リクエストを処理する限定公開ゾーンの名前は指定せず、ネットワークだけを指定します。そうすれば、プロデューサー ネットワーク内のどのゾーンでもリクエストを処理できます。

    gcloud beta dns managed-zones create example-peering-zone \
        --account=[SERVICE_ACCOUNT] \
        --dns-name="example.com" \
        --description="This is the zone for example.com" \
        --networks=[CONSUMER_NETWORK] \
        --visibility=private \
        --target-network=[PRODUCER_NETWORK] \
        --target-project=[PRODUCER_PROJECT]
    

    ここで

    • --account=[SERVICE_ACCOUNT] は、プロデューサー ネットワークに対する dns.peer 役割を持つサービス アカウントです。
    • --dns-name は、ピアリングされたゾーンによって解決されるドメインのリストです。
    • --description は、ゾーンの短い説明です。
    • --networks=[CONSUMER_NETWORK] は、ピアリング ゾーンを作成するネットワークです。
    • ピアリング ゾーンは限定公開のみが可能なため、--visibilityprivate に設定します。
    • --target-network=[PRODUCER_NETWORK] は、ピアリング ゾーンをピアリングするネットワークです。
    • --target-project=[PRODUCER_PROJECT] は、ピアリング ゾーンをピアリングするネットワークを含むプロジェクトです。

構成がすべて完了したら、コンシューマ ネットワークのインスタンスにログインし、構成したゾーンに対して DNS リクエストを行います。ピアリング ゾーンはプロデューサー ネットワーク内の限定公開ゾーンにリクエストを転送し、プロデューサー ネットワークから IP アドレスの応答があるはずです。

マネージド ゾーンの更新

DNS レコードを格納するマネージド ゾーンを作成したら、そのプロパティの一部を更新してください。現在、一般公開ゾーンの説明と DNSSEC 構成のみを更新できます。

ゾーンを更新するには、ゾーンリソース名(DNS 名とは異なり、ゾーンリソース名には . を使用できません)と、ゾーンに関連付けられている最新情報を提供する必要があります。

gcloud

gcloud dns managed-zones update --description="My zone" "myzonename"

Python

 BODY = {
      'name' : 'myzonename',
      'description' : 'My zone'
    }
    service = build('dns', 'v1')
    response = service.managedZones().create(project=PROJECT_NAME,
                                             body=BODY
                                             ).execute()
 

限定公開ゾーンのネットワークの変更

限定公開ゾーンが表示されるネットワークを変更するには、次のコマンドを実行します。

gcloud

gcloud dns managed-zones update my-zone-name \
    --networks default,newnetwork 

このコマンドは、限定公開ゾーンが default および newnetwork というネットワークに表示されるようにします。限定公開ゾーンが表示されていたすべてのネットワークは、新しいリストのネットワークで置き換えられます。

マネージド ゾーンのラベルの追加と更新

マネージド ゾーンにラベルを追加したり、既存のラベルを削除したりできます。

次の例で、[KEY]:[VALUE] は任意の Key-Value ペアです(Dept:MarketingProject:project1 など)。

マネージド ゾーンを作成するときにラベルを追加する

gcloud dns managed-zones create \
    --dns-name="example.com." \
    --labels [KEY]:[VALUE] \
    --description="A zone" "myzonename"

既存のマネージド ゾーンにラベルを追加する

次のコマンドは、既存のマネージド ゾーンにラベルを追加します。

gcloud dns managed-zones update \
    --labels [KEY]:[VALUE],[[KEY]:[VALUE]] \
    "myzonename"

ラベルの Key-Value ペアの値を更新する

次のコマンドは、既存のラベルの Key-Value ペアの value を更新します。key が存在しない場合は、新しい Key-Value ペアが作成されます。

gcloud dns managed-zones update \
    --update-labels [KEY]:[VALUE],[[KEY]:[VALUE]] \
    "myzonename"

ラベルの Key-Value ペアを削除する

次のコマンドは、指定されたラベルの Key-Value ペアを削除します。

gcloud dns managed-zones update \
    --remove-labels [KEY]:[VALUE],[[KEY]:[VALUE]] \
    "myzonename"

すべてのラベルの Key-Value ペアをクリアする

次のコマンドは、すべてのラベルをクリアします。

gcloud dns managed-zones update \
    --clear-labels \
    "myzonename"

マネージド ゾーンのリスト

プロジェクト内のすべてのゾーンを一覧表示するには:

gcloud

gcloud dns managed-zones list

Python

def list_zones(project_id):
    client = dns.Client(project=project_id)
    zones = client.list_zones()
    return [zone.name for zone in zones]

マネージド ゾーンの詳細の取得

マネージド ゾーンに関する詳細情報(関連付けられているネームサーバーを検索する必要があるかなどの情報)を取得する方法は、次のとおりです。

gcloud

gcloud dns managed-zones describe "myzonename"

Python

def get_zone(project_id, name):
    client = dns.Client(project=project_id)
    zone = client.zone(name=name)

    try:
        zone.reload()
        return zone
    except NotFound:
        return None

マネージド ゾーンの削除

ゾーンを削除するには、delete コマンドにゾーン名を指定します。

gcloud

gcloud dns managed-zones delete "myzonename"

削除できるのは、空のゾーンのみです。空のマネージド ゾーンには、SOA と NS のレコードセットしかありません。次のように import コマンドを使用すると、簡単にゾーンを空にできます。

touch empty-file
gcloud dns record-sets import -z "myzonename" --delete-all-existing empty-file
rm empty-file

Python

def delete_zone(project_id, name):
    client = dns.Client(project=project_id)
    zone = client.zone(name)
    zone.delete()

DNS サーバー ポリシーの使用

DNS サーバー ポリシーは、ゾーンをホストするネームサーバーの動作を制御する Cloud DNS ルールのコレクションです。DNS サーバー ポリシーを使用すると、次のことができます。

  • 指定されたネットワークからの DNS クエリをすべて処理する代替ネームサーバーを指定する
  • DNS クエリの受信転送の受け入れを有効または無効にする

DNS サーバー ポリシーは 1 つ以上の GCP ネットワークに適用できます。

概要については、DNS サーバー ポリシーをご覧ください。

受信 DNS 転送を有効にする DNS ポリシーを作成する

このポリシーは、プロジェクトの default ネットワークで受信 DNS 転送を有効にします。

gcloud beta dns policies create my-policy --project=myproject \
    --description="Inbound DNS forwarding for default network" \
    --enable-inbound-forwarding \
    --networks=default

受信フォワーダの IP アドレスを一覧表示する

gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \
    --format='csv[no-heading](address, subnetwork)'

代替ネームサーバーを有効にする DNS ポリシーを作成する

このポリシーは、VPC ネットワークがオンプレミス ネットワークにある代替ネームサーバーを使用するように指定するものです。

gcloud beta dns policies create [OUTBOUND_POLICY_NAME] --project=[PROJECT_ID] \
    --description="Alternative nameservers for for the VPC network" \
    --networks=[NETWORK] \
    --alternative-name-servers="[ALTERNATIVE_NAMESERVERS]"

プレースホルダを適切な値に置き換えます。

  • [OUTBOUND_POLICY_NAME] は送信 Cloud DNS ポリシーの名前です。
  • [PROJECT_ID] はプロジェクト ID です。
  • [NETWORK] は VPC ネットワークの名前です。
  • [ALTERNATIVE_NAMESERVERS] はオンプレミス ネットワーク内の代替ネームサーバーの IP アドレスをコンマで区切って並べたリストです。

要件: 代替ネームサーバーに、VPC ネットワーク内の VM からの DNS リクエストを処理させるには、以下を実行する必要があります。

  • 代替ネームサーバーが VPC ネットワーク内から到達可能であることを確認してください。dig@ オペレーターを使用し、代替ネームサーバーに直接クエリします。
  • 代替ネームサーバーに適用されるオンプレミス ネットワークのファイアウォール ルールで、35.199.192.0/19 からのパケットを許可します。
  • オンプレミス ネットワークには、Cloud VPN トンネル、Dedicated Interconnect の接続(VLAN)、または Partner Interconnect の接続(VLAN)を経由して、35.199.192.0/19 宛てのトラフィックを VPC ネットワークに戻すルートが必要です。VPC ネットワークからの DNS クエリに対する応答は 35.199.192.0/19 に返す必要がありますが、インターネット経由で送信することはできません。静的ルーティングを使用する Cloud VPN トンネルの場合は、オンプレミス ネットワーク内に、宛先が 35.199.192.0/19 でネクストホップが VPN トンネルのルートを手動で作成する必要があります。このルートを追加するだけでなく、ポリシーベースのルーティングを使用する Cloud VPN トンネルでは、35.199.192.0/19 を含めるように、オンプレミスの VPN ゲートウェイのリモート トラフィック セレクタと Cloud VPN のローカル トラフィック セレクタを構成する必要があります。ダイナミック ルーティング、Dedicated Interconnect、または Partner Interconnect を使用する Cloud VPN トンネルの場合は、関連付けられた Cloud Router でカスタムルート アドバタイズメントを構成する必要があります。

さらに、以下の注意点があります。

  • VPC ネットワーク内の GCP VM から送信されたすべてのクエリは、35.199.192.0/19 でプロキシされます。すべてのユーザーが 35.199.192.0/19 を使用している場合でも、オンプレミスの代替ネームサーバーは VPC ネットワークからのリクエストのみを受信します。
  • 35.199.192.0/19 のアドレス範囲は、VPC ネットワーク内、または VPC ネットワークに接続されているオンプレミス ネットワーク内からのみ到達可能です。オンプレミス ネットワークが 35.199.192.0/19 宛てのパケットをインターネット経由でルーティングする場合、ドロップされます。
  • GCP では、リクエストを受信する代替ネームサーバーが 35.199.192.0/19 に応答を送信する必要があります。代替ネームサーバーが別のネームサーバーにリクエストを送信し、その別のネームサーバーが 35.199.192.0/19 に応答した場合、そのレスポンスは無視されます。セキュリティ上の理由で、GCP では DNS 応答の送信元アドレスがリクエストの宛先アドレスと一致すると想定しています。

DNS ポリシーを一覧表示する

gcloud beta --project=my-project dns policies list

DNS ポリシーを削除する

gcloud beta --project=my-project dns policies delete example-policy

DNS ポリシーを更新する

gcloud beta --project=myproject dns policies update --networks="default, somenewnetwork"

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud DNS のドキュメント