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


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

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

仕様

  • IPv4 と IPv6 の両方の構成を持つ VM はデュアルスタックです。デュアルスタック VM 上のインターフェースには、IPv6 アドレスの単一の /96 範囲が割り当てられます。範囲(/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 のドキュメントでインスタンスの作成をご覧ください。

Console

  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: インスタンスをデプロイするゾーン。

API

  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 スタックの種類を変更できます。

Console

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

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

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

gcloud

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

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

以下を置き換えます。

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

API

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: instance.i の名前

リクエスト本文の例:

{
  "stackType": "STACK_TYPE",
}

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

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

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

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

gcloud

gcloud compute instance-templates create コマンドを使用してインスタンス テンプレートを作成します。

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

以下を置き換えます。

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

API

instanceTemplates.insert メソッドPOST リクエストを送信してインスタンス テンプレートを作成します。

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 メソッドをご覧ください。