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 のネットワーク設定を構成する方法については、オペレーティング システムのドキュメントをご覧ください。 たとえば、Red Hat Enterprise Linux for SAP with HA and Update Services 8.6 の場合は、/etc/resolv.conf ファイルを手動で構成するをご覧ください。
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 です。
次のステップ
- Google Cloud VPC ネットワークの詳細については、VPC の概要をご覧ください。
- VPC ネットワークの作成、変更の詳細については、VPC の使用をご覧ください。
- グローバル DNS ではなくゾーン DNS を使用するように、組織とプロジェクトを移行します。