内部 DNS の概要


Compute Engine 仮想マシン(VM)インスタンスを作成すると、内部 DNS によって VM の DNS 名が自動的に作成されます。この DNS 名によって内部 IP アドレスを解決することで、内部 VM 間の通信が容易になります。Google Cloud の Virtual Private Cloud ネットワークは、内部 DNS サービスを使用して、同じネットワーク内の VM が内部 DNS 名を使用して相互にアクセスできるようにします。

VM を管理する際、Google Cloud によって次の DNS レコードタイプが自動的に作成、更新、削除されます。

  • DNS アドレス レコード(A レコード)は、.internal の DNS ゾーン内の VM に対して作成されます。
  • リバース DNS ルックアップに使用される VM の PTR レコードは、対応するリバースゾーンに作成されます。

たとえば、VM を削除すると、Google Cloud は内部 DNS 名に関連する A レコードと PTR レコードを自動的に削除します。次に、同じ名前の新しい VM を作成すると、Google Cloud は置換用の新しいレコードを作成します。

制限事項

内部 DNS 名の仕様は次のとおりです。

  • VM の内部 DNS 名は、そのプライマリ内部 IP アドレスにのみ解決されます。内部 DNS 名を使用して VM の外部 IP アドレスに接続することはできません。

  • 内部 DNS 名は、セカンダリ エイリアス IP に解決するように構成できません。

  • 内部 DNS 名は、同じネットワーク内の VM からのみ解決できます。これらの VM は、ネットワークと同じプロジェクトにあっても、同じ共有 VPC ネットワークを使用するサービス プロジェクトにあってもかまいません。サービス プロジェクト内の VM の DNS 名を解決するには、VM の FQDN を使用する必要があります。内部 DNS を使用して別のネットワーク内の VM に接続することはできません。

ゾーンおよびグローバルの内部 DNS 名

Google Cloud には、内部 DNS 名が 2 種類あります。

  • ゾーン DNS: VM 名は各ゾーン内で一意である必要がありますが、VM 名はゾーン間で再利用できます。たとえば、各 VM が異なるゾーンにある限り、instance-1 という名前の VM を複数持つことができます。
  • グローバル DNS: VM 名は各プロジェクト内で一意である必要があります。グローバル DNS では、プロジェクト内で VM 名を再利用できません。

個々のゾーンへの DNS 登録の障害を隔離することにより、より信頼性が高まるため、ゾーン DNS を使用することを強くおすすめします。サービスが停止すると、グローバル DNS には次の問題が発生します。

  • VM 名はプロジェクト全体で一意である必要があります。そのため、コントロール プレーンの障害が発生しているリージョン(プロジェクト リソースがある、または以前にプロジェクト リソースが存在していた)では、新しい VM を作成できません。Google Cloud は、使用できないリージョンの既存のリソース DNS 名を確認することはできません。
  • マネージド インスタンス グループ(MIG)の自動スケーリングなど、Compute Engine の一部の機能は使用できません。その結果、自動スケーリングを使用してワークロードの増加を適切に処理するアプリケーションは、スケールアップができなくなります。

デフォルトの内部 DNS タイプは、Compute Engine API を有効にするときに設定されます。

  • デフォルトの内部 DNS タイプはゾーン DNS です。
  • 組織またはスタンドアロンのプロジェクトで 2018 年 9 月 6 日より前に Compute Engine API を有効にしている場合、デフォルトの内部 DNS タイプはグローバル DNS に設定されます。

次の表に、内部 DNS 名の完全修飾ドメイン名を示します。

内部 DNS タイプ 完全修飾ドメイン名(FQDN)
ゾーン DNS VM_NAME.ZONE.c.PROJECT_ID.internal
グローバル(プロジェクト全体)DNS VM_NAME.c.PROJECT_ID.internal

次のように置き換えます。

  • VM_NAME: VM の名前。ゾーン DNS の場合、この値はゾーン内で一意にする必要がありますが、ゾーン間では繰り返すことができます。グローバル DNS の場合、VM 名はプロジェクト全体で一意でなければなりません。
  • ZONE: インスタンスが配置されているゾーン。
  • PROJECT_ID: VM が属するプロジェクト。

プロジェクトまたはインスタンス レベルで使用される内部 DNS 名の種類を制御する方法については、プロジェクトまたはインスタンスの DNS 名の構成に関する記事をご覧ください。

DNS 名前解決

VM は、DHCP リースの一部として内部 DNS の解決情報を受け取ります。DNS の解決方法は、オペレーティング システムのプラットフォームによって異なります。

  • Linux では、デフォルトで VM の DNS サーバー(169.254.169.254:53)が内部 DNS 名を解決します。
  • Windows では、デフォルトでサブネットのデフォルト ゲートウェイが内部 DNS 名を解決します。

PTR レコードのリバースゾーン

Google Cloud の内部 DNS サービスは、次のリバースゾーンにある VM の 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

IP アドレスがホスト プロジェクトの共有 VPC ネットワークにある場合でも、内部 DNS 名を使用して VM の内部 IP アドレスを参照できます。共有 VPC では、ゾーンまたはグローバル(プロジェクト全体)の内部 DNS 名のプロジェクト ID 部分が、サービス プロジェクトの ID です。

内部 DNS 名のカスタマイズ

組織やアプリケーションによっては、Google Cloud によって作成されたデフォルトの内部 DNS 名ではなく、カスタム内部 DNS 名が必要になる場合があります。

Cloud DNS の限定公開ゾーンとカスタム レコード

Cloud DNS 限定公開ゾーンを使用して、VM のカスタム DNS エントリを作成できます。PTR レコードを構成すると、ユーザーが指定したカスタム URL で VM のデフォルトの内部 DNS URL をオーバーライドできます。

自動的に作成された内部 DNS の PTR 名をオーバーライドするカスタム PTR レコードを作成するには、限定公開ゾーン内の RFC 1918 アドレス用の PTR レコードをご覧ください。VM の PTR レコードの作成について詳しくは、VM インスタンスの PTR レコードを作成するをご覧ください。

カスタムホスト名

VM を作成するときに、VM のカスタムホスト名を指定できます。この方法で割り当てられたカスタムホスト名は内部 DNS によって解決されません。カスタムホスト名を使用する場合、該当するゾーンに対応する DNS レコードを作成する必要があります(たとえば、Cloud DNS を使用します)。詳細については、カスタムホスト名を持つ VM インスタンスの作成をご覧ください。

内部 DNS と DHCP

Compute Engine の各 VM は、DHCP リースを 24 時間ごとに更新するように構成されています。ゾーン DNS に対して有効化されている VM では、DHCP リースが 1 時間ごとに期限切れとなります。ゾーン DNS を使用する VM では、DHCP 構成ファイル内にゾーンエントリとグローバル エントリの両方があります。

デフォルトでは、ほとんどの Linux ディストリビューションが DHCP 情報を resolv.conf に格納しています。手動で resolv.conf を編集しても、その VM で DHCP リースが期限切れとなるたびに、そのファイルはデフォルトの DHCP に戻されます。resolv.conf ファイルに静的な変更を加えるために、Linux ディストリビューションによっては、DHCP ポリシーの先頭または末尾にアイテムを追加できるようになっています。

DHCP ポリシーまたは構成ファイルの変更方法は、使用する Linux のディストリビューションによって異なります。たとえば、Red Hat Enterprise Linux と Debian では、/etc/dhcp/dhcpd.conf 構成ファイルを使用します。CentOS では、Network Manager コマンドライン ユーティリティ nmcli を使用します。

カスタムの DHCP と DNS のネットワーク設定を構成する方法については、オペレーティング システムのドキュメントをご覧ください。

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 エントリとグローバル DNS エントリを確認できます。

これらのファイルには、次の制限があります。

  • 検索パスで処理できるのは 6 レコードのみであり、そのうち 3 レコードは Compute Engine によって提供されます。エントリを検索パスに追加した結果としてエントリの総数が 6 を超えるような場合、6 番目のエントリよりも後の検索ルールは OS により適用されません。これにより、Compute Engine の機能が停止する可能性があります。たとえば、インスタンス名を使用して VM にアクセスすることができなくなります。
  • 手動で resolv.conf を編集しても、その VM で 24 時間の DHCP リースが期限切れとなるたびに、そのファイルはデフォルトの DHCP に戻されます。ゾーン DNS を使用している VM では、DHCP リースは 1 時間ごとに期限切れとなります。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: VM インスタンスが配置されているゾーン
  • PROJECT_ID: VM が属するプロジェクト

ゾーン 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 VM 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 "VM_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;
}

次のように置き換えます。

  • VM_NAME: VM の名前
  • ZONE: VM インスタンスが配置されているゾーン
  • PROJECT_ID: VM が属するプロジェクト

グローバル 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 は、VM が属するプロジェクトに置き換えます。

グローバル 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 VM 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 "VM_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;
}

次のように置き換えます。

  • VM_NAME: VM の名前
  • PROJECT_ID: VM が属するプロジェクト

dhclient.conf ファイルの例

Debian 9 などの一部のオペレーティング システムでは、resolv.conf ファイルの代わりに dhclient.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 です。

次のステップ