インスタンスとインスタンス テンプレートでの IPv6 の構成


仮想マシン(VM)が接続されているサブネットに IPv6 範囲が構成されている場合は、VM インスタンス IPv6 アドレスを構成できます。

IPv6 の詳細については、IPv6 サブネットの範囲をご覧ください。

仕様

  • IPv4 と IPv6 の両方の構成を持つ VM はデュアルスタックとなります。デュアルスタック VM 上のインターフェースには、IPv6 アドレスの /96 範囲が 1 つ割り振られます。範囲(/128)内の最初の IPv6 アドレスはインターフェース上で構成されます。IPv6 アドレスは、IPv4 アドレスが構成されているインターフェースに追加で構成されるものです。IPv6 アドレスのみを持つように VM を構成することはできません。

  • VM 上の任意のインターフェースに IPv6 アドレスを構成できます。複数のネットワーク インターフェースの構成の詳細については、複数のネットワーク インターフェースの概要をご覧ください。

  • VM インターフェースに IPv6 アドレスを構成するには、インターフェースをデュアルスタック サブネットに接続する必要があります。

  • サブネットの IPv6 アクセスタイプの構成により、サブネットに内部 IPv6 範囲と外部 IPv6 範囲のどちらが存在するかが決まります。接続された VM は、サブネットから IPv6 アクセスタイプを継承します。

IPv6 アドレスを使用して VM にアクセスする

暗黙の IPv6 拒否上り(内向き)ファイアウォール ルールは、IPv6 アドレスへの受信接続をブロックすることでインスタンスを保護します。IPv6 アドレスを使用して VM にアクセスするには、受信アクセスを許可する優先度の高いルールが必要です。

ファイアウォール ルールの詳細については、VPC ファイアウォールの概要階層型ファイアウォール ポリシーの概要をご覧ください。

VPC ファイアウォール ルールの例については、一般的なユースケースのファイアウォール ルールを構成するをご覧ください。

IPv6 アドレスを割り当てる

  • VM には、DHCPv6 を使用して IPv6 アドレスが割り当てられます。メタデータ サーバーは、VM の DHCPv6 リクエストに応答します。応答では、割り振られた /96 範囲から最初の IPv6 アドレス(/128)が送信されます。

  • メタデータ サーバーは、ルート アドバタイズを使用してデフォルト ルートを VM に公開します。これにより、VM はすべての IPv6 トラフィックにこのデフォルト ルートを使用できます。

    VM のインターフェースのデフォルト ルートは、メタデータ サーバーに gateway-ipv6 エントリのクエリを送信することによって確認できます。

    curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/gateway-ipv6 -H "Metadata-Flavor: Google"
    

    メタデータ サーバーの詳細については、VM メタデータのクエリをご覧ください。

  • VM には fe80::/10 範囲から割り当てられたリンクローカル IP アドレスが構成されますが、近隣探索にのみ使用されます。

  • VM のネットワーク インターフェースの MTU 構成は、IPv4 と IPv6 の両方のパケットに適用されますが、すべての状況ですべての MTU 値がサポートされるわけではありません。詳細については、最大伝送単位の概要をご覧ください。

デュアルスタック VM を作成する

デュアルスタック VM を作成するには、VM をデュアルスタック サブネットに接続します。

共有 VPC を使用していて、共有サブネットに接続するデュアルスタック VM を作成する場合は、共有 VPC のドキュメントでインスタンスの作成をご覧ください。

コンソール

  1. [インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. インスタンスの名前を入力します。

  3. IPv6 範囲が構成されたサブネットを含むリージョンを選択します。

  4. ゾーンを選択します。

  5. [詳細オプション] セクションを開きます。

  6. [ネットワーキング] を開いて、次の操作を行います。

    1. [ネットワーク インターフェース] セクションで、ネットワーク インターフェースを開いて編集します。

    2. [ネットワーク] と [サブネットワーク] で、使用するネットワークとサブネットワークを選択します。

      IPv6 範囲が構成されているサブネットを選択します。サブネットの IPv6 アクセスタイプによって、VM が内部 IPv6 アドレスを受け取るのか、外部 IPv6 アドレスを受け取るのかが決まります。

    3. [IP スタックタイプ] には、[IPv4 と IPv6(デュアルスタック)] を選択します。

    4. [プライマリ内部 IP] で、次のいずれかを選択します。

      • エフェメラル: 新しいエフェメラル IPv4 アドレスを割り当てます。
      • リストから予約された IPv4 アドレス。
      • 静的: 新しい静的 IPv4 アドレスを割り当てます。
    5. [外部 IPv4 アドレス] で、次のいずれかを選択します。

      • エフェメラル: 新しいエフェメラル IPv4 アドレスを割り当てます。
      • なし: 外部 IPv4 アドレスを割り当てません。
      • リストから予約された IPv4 アドレス。
      • 新しい IP アドレスを作成: 新しい静的 IPv4 アドレスを割り当てます。
    6. ネットワーク インターフェースの変更を終了するには、[完了] をクリックします。

  7. VM 作成プロセスを続行します。

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

gcloud

gcloud compute instances create コマンドを使用してインスタンスを作成します。

gcloud compute instances create INSTANCE_NAME \
  --subnet=SUBNET_NAME \
  --zone=ZONE \
  --stack-type=IPV4_IPV6

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

  • INSTANCE_NAME: インスタンスの名前。
  • SUBNET_NAME: インスタンスの接続先のサブネット。サブネットには IPv6 サブネット範囲が必要です。
  • ZONE: インスタンスをデプロイするゾーン。

REST

  1. イメージを選択します。イメージまたはイメージ ファミリーの名前と、イメージを含むプロジェクトの名前をメモしておきます。
  2. instances.insert メソッドを使用して、イメージ ファミリーまたは特定のバージョンの OS イメージから VM を作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    

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

    • PROJECT_ID: VM を作成するプロジェクトの ID。
    • ZONE: VM を作成するゾーン。

    リクエスト本文の例:

    {
     "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
     "name": "INSTANCE_NAME",
     "networkInterfaces": [
       {
         "subnetwork": "regions/REGION/subnetworks/SUBNET",
         "stackType": "IPV4_IPV6"
       }
     ],
     "disks": [
       {
         "initializeParams": {
           "sourceImage": "IMAGE_URI"
         },
         "boot": true
       }
     ],
    }
    

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

    • MACHINE_TYPE_ZONE: 新しい VM に使用するマシンタイプを含むゾーン。
    • MACHINE_TYPE: 新しい VM のマシンタイプ(事前定義またはカスタム)。例: n1-standard-1
    • INSTANCE_NAME: 新しい VM の名前。
    • SUBNET: IPv6 が構成されたサブネット。
    • REGION: サブネットのリージョン。
    • IMAGE_URI: 使用するイメージの URI。

      たとえば、"sourceImage": "projects/debian-cloud/global/images/family/debian-10" を指定すると、Compute Engine は Debian 10 イメージ ファミリーの OS イメージの最新バージョンから VM を作成します。

VM のスタックタイプを変更する

既存の VM のスタックタイプを変更できます。スタックタイプは次のいずれかに設定できます。

  • IPv4 のみ(シングル スタック)
  • IPv4 と IPv6(デュアル スタック)

スタックタイプをデュアルスタックに変更する場合、VM がデュアルスタックのサブネットに接続されている必要があります。VM が接続されているサブネットを変更する必要がある場合は、VM を停止してサブネットを変更します。サブネットが更新されたら、VM の IP スタックタイプを変更できます。

コンソール

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. IPv6 アドレスを割り当てるインスタンスの名前をクリックします。
  3. インスタンスの詳細ページで、次の操作を行います。
    1. [編集] をクリックします。
    2. [ネットワーク インターフェース] で、編集するインターフェースを開きます。
    3. [IP スタックタイプ] で [IPv4 (シングルスタック)] または [IPv4 と IPv6(デュアルスタック)] を選択します。
    4. [完了] をクリックします。
  4. [保存] をクリックします。

gcloud

gcloud compute instances network-interfaces update コマンドを使用して VM のスタックタイプを更新します。

gcloud compute instances network-interfaces update INSTANCE_NAME \
  --stack-type=STACK_TYPE \
  --zone=ZONE

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

  • INSTANCE_NAME: インスタンスの名前。
  • ZONE: インスタンスがデプロイされるゾーン。
  • STACK_TYPE: VM のスタックタイプ(IPV4_ONLY または IPV4_IPV6)。

REST

instances.updateNetworkInterface メソッドPATCH リクエストを送信して、VM のスタックタイプを更新します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONEinstances/INSTANCE_NAME/updateNetworkInterface

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

  • PROJECT_ID: インスタンスが含まれているプロジェクトの ID。
  • ZONE: インスタンスがデプロイされるゾーン。
  • INSTANCE_NAME: インスタンスの名前。

リクエスト本文の例:

{
  "stackType": "STACK_TYPE",
}

STACK_TYPE は、VM のスタックタイプ(IPV4_ONLY または IPV4_IPV6)に置き換えます。

IPv6 アドレスを持つインスタンス テンプレートを作成する

デュアルスタック VM の作成に使用できるリージョンまたはグローバルのインスタンス テンプレートを作成できます。詳細については、インスタンス テンプレートを作成するをご覧ください。

デュアルスタック VM を作成するインスタンス テンプレートを作成するには、Google Cloud CLI または REST を使用する必要があります。

gcloud

リージョンまたはグローバルのインスタンス テンプレートを作成するには、gcloud compute instance-templates create コマンドを使用します。リージョン インスタンス テンプレートを作成する場合は、--instance-template-region フラグを使用してインスタンス テンプレートのリージョンを指定する必要があります。

次の例では、グローバル インスタンス テンプレートを作成します。

gcloud compute instance-templates create TEMPLATE_NAME \
    --subnet=SUBNET \
    --stack-type=IPV4_IPV6

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

  • TEMPLATE_NAME: テンプレートの名前。
  • SUBNET: IPv6 サブネット範囲を持つサブネット。

REST

リージョン インスタンス テンプレートを作成するには、regionInstanceTemplates.insert メソッドを使用します。グローバル インスタンス テンプレートを作成するには、instanceTemplates.insert メソッドを使用します。

次の例では、グローバル インスタンス テンプレートを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

PROJECT_ID をプロジェクト ID で置き換えます。

リクエスト本文の例:

{
  "name": "INSTANCE_TEMPLATE_NAME"
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET",
        "stackType": "IPV4_IPV6",
      },
    ],
    "disks":
    [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "IMAGE_URI"
        }
      }
    ]
  }
}

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

  • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。
  • MACHINE_TYPE: VM のマシンタイプ。例: n1-standard-1
  • SUBNET: IPv6 サブネット範囲を持つサブネット。
  • REGION: サブネットのリージョン。
  • IMAGE_URI: 使用するイメージの URI。

    たとえば、"sourceImage": "projects/debian-cloud/global/images/family/debian-10" を指定すると、Compute Engine は Debian 10 イメージ ファミリーの OS イメージの最新バージョンから VM を作成します。

リクエスト パラメータの詳細については、instanceTemplates.insert メソッドをご覧ください。