複数のネットワーク インターフェースを持つ VM を作成する

デフォルトでは、Virtual Private Cloud(VPC)ネットワーク内の各仮想マシン(VM)インスタンスには 1 つのネットワーク インターフェースがあります。ただし、複数のネットワーク インターフェースを持つインスタンスを構成することもできます。1 つのインスタンスで複数のネットワーク インターフェースを使用する場合、各インターフェースは異なる VPC ネットワークのサブネットに接続する必要があります。複数のネットワーク インターフェースを同じサブネットや同じ VPC ネットワーク内のサブネットに接続することはできません。

複数のネットワーク インターフェースが不要な場合は、インスタンスの作成と起動の手順に沿って、デフォルトのネットワーク構成でインスタンスを作成してください。

複数のネットワーク インターフェースとそれらの仕組みの詳細については、複数のネットワーク インターフェースをご覧ください。

仕様

  • ネットワーク インターフェースを構成できるのはインスタンスの作成時のみです。
  • Compute Engine ベアメタル インスタンスに複数のネットワーク インターフェースを構成することはできません。
  • 複数のネットワーク インターフェースを持つインスタンスを作成する場合は、各インターフェースを異なる VPC ネットワークに接続する必要があります。ネットワークは、スタンドアロンの VPC ネットワークまたは共有 VPC ネットワークになります。

    ただし、RDMA ネットワーク プロファイルで作成された VPC ネットワークでは、RDMA NIC を同じネットワークに接続できます。各 NIC は異なるサブネットに接続されます。

  • ネットワーク インターフェースは、同じインスタンスの別のインターフェースの IP アドレス範囲と重複しない IP アドレス範囲のサブネットに接続する必要があります。

  • 複数の VPC ネットワーク内のサブネットに接続する VM を作成する場合は、インスタンスを作成する前に、すべてのネットワークとサブネットが存在している必要があります。ネットワークとサブネットの作成の詳細については、VPC ネットワークの作成と管理をご覧ください。

  • ネットワーク インターフェースを削除するには、その接続先のインスタンスを削除します。

  • 各インスタンスには、インスタンスのマシンタイプに応じて、少なくとも 1 つのネットワーク インターフェースと、最大 10 つのネットワーク インターフェースが必要です。

    • nic0 は必須で、インスタンスの作成時に構成する必要があります。
    • nic1nic9 は省略可ですが、これらもインスタンスの作成時に構成する必要があります。

    詳細については、インターフェースの最大数をご覧ください。

  • VM インターフェースは、IPv4 アドレスのみ、IPv4 アドレスと IPv6 アドレスの両方(デュアルスタック)、または IPv6 アドレスのみ(プレビュー版)で構成できます。インターフェースのスタックタイプによって、インターフェースに割り当てることができる IP アドレスと、インターフェースが接続できるサブネットのタイプが決まります。詳細については、スタックタイプをご覧ください。

  • Google Cloudの DHCP サーバーは、デフォルトのルート(RFC 3442「クラスレス静的ルート」)をデフォルトのネットワーク インターフェース(nic0)にのみ送信します。別のネットワーク インターフェースでデフォルト ルートが必要な場合は、インスタンスにポリシー ルーティングを構成する必要があります。これを行う方法の例については、追加のインターフェースのルーティングを構成するチュートリアルをご覧ください。

  • すべての VM ネットワーク インターフェースは、VM と同じプロジェクトのネットワークのサブネットに接続するか、プロジェクトで共有されている共有 VPC ネットワークに接続する必要があります。

スタックタイプ

ネットワーク インターフェースを作成するときに、スタックタイプを指定します。インターフェースのスタックタイプによって、インターフェースに割り当てることができる IP アドレスと、インターフェースが接続できるサブネットのタイプが決まります。詳細については、次の表をご覧ください。

インターフェース スタックタイプ IP アドレス 対応するサブネット タイプ
IPv4 のみ(シングル スタック)
  • 内部 IPv4 アドレス(必須)
  • 外部 IPv4 アドレス(省略可)
IPv4 のみのサブネットとデュアルスタック サブネット
IPv4 と IPv6(デュアル スタック)
  • 内部 IPv4 アドレス(必須)
  • 外部 IPv4 アドレス(省略可)
  • /96 IPv6 アドレス範囲(内部または外部のどちらか一方)(必須)
デュアルスタック サブネット
IPv6 のみ(シングルスタック)(プレビュー
  • /96 IPv6 アドレス範囲(内部または外部のどちらか一方)(必須)
IPv6 専用(プレビュー)とデュアルスタック サブネット

ネットワーク インターフェースの IP アドレスの割り当て

IPv4 アドレスのインターフェースの場合:

  • 各ネットワーク インターフェースには、サブネットのプライマリ IPv4 アドレス範囲から割り当てられたプライマリ内部 IPv4 アドレスを構成する必要があります。単一のインスタンス内の各インターフェースに割り当てられるプライマリ内部アドレスとは異なる必要があります。
  • 省略可: 各ネットワーク インターフェースに一意の外部 IPv4 アドレスを構成できます。外部アドレスはエフェメラルまたは予約済みです。

IPv6 アドレスのインターフェースの場合:

  • サブネットの IPv6 アドレス範囲から /96 IPv6 アドレス範囲を割り当てる必要があります。範囲内の最初の IPv6 アドレス(/128)はインターフェースで構成されます。詳細については、IPv6 アドレスの割り当てをご覧ください。
  • /96 IPv6 アドレス範囲は、サブネットの IPv6 アクセスタイプに応じて内部または外部にできます。

ネットワーク インターフェースの最大数

仮想ネットワーク インターフェースの数は vCPU の数に比例し、最小 2 個、最大 10 個です。

次の表を使用して、インスタンスに接続できるネットワーク インターフェース数を判断します。

vCPU 数 vNIC の数
2 以下 2
4 最大 4
6 最大 6
8 最大 8
10 以上 最大 10 ユーザー
Compute Engine ベアメタル インスタンス 1

制限事項

  • 既存の VM からネットワーク インターフェースを追加または削除することはできません。

  • VM のインターフェースのスタックタイプを変更できるかどうかを確認するには、以下をご覧ください。

    • 既存のインターフェースのスタックタイプを変更して、IPv4 のみからデュアルスタックに変更したり、デュアルスタックから IPv4 のみに変更したりできます。

    • IPv6 のみのインターフェース(プレビュー)は、新しい VM の作成時にのみサポートされます。既存の IPv4 専用またはデュアルスタック インターフェースのスタックタイプを IPv6 専用に変更することはできません。

    • また、IPv6 専用インターフェースのスタックタイプをデュアルスタックまたは IPv4 専用に変更することはできません。

  • IPv6 のみのインターフェース(プレビュー版)には、接続されたサブネットのアクセスタイプに基づいて、内部または外部の単一のアドレス範囲のみを設定できます。内部 IP アドレスと外部 IP アドレスの両方を持つ IPv6 専用インスタンスを作成するには、2 つのインターフェースで構成する必要があります。

  • IP 転送は VM レベルで有効になっており、個々のインターフェースには適用できません。

始める前に

複数のネットワーク インターフェースを持つ権限、IAM、インスタンス

複数のネットワーク インターフェースを持つインスタンスを作成するには、次のいずれかのロールが必要です。

共有 VPC 環境を使用しないプロジェクトでの複数のインターフェースを持つインスタンスおよびインスタンス テンプレートの作成と削除: プロジェクト レベルでオーナー、編集者、または Compute インスタンス管理者(v1)のロールを持つユーザーは、その同じプロジェクトの一部である VPC ネットワークとサブネットに関連付けられている複数のインターフェースを持つインスタンスを作成できます。

共有 VPC 環境での複数のネットワーク インターフェースを持つインスタンスおよびインスタンス テンプレートの作成と削除: プロジェクト レベルでオーナー、編集者、または Compute インスタンス管理者(v1)のロールを持つユーザーは、複数のインターフェースを持つインスタンスを作成できます。いずれかのインターフェースが共有 VPC ホスト プロジェクトのサブネットに接続されている場合は、共有 VPC ホスト プロジェクト レベルまたは共有 VPC サブネット レベルで Compute ネットワーク ユーザーのロールroles/compute.networkUser)も必要になります。

権限の詳細については、Compute Engine IAM ドキュメントをご覧ください。

複数のネットワーク インターフェースを持つ VM インスタンスを作成する

インスタンスの作成に関する一般的な手順については、VM インスタンスを作成して起動するをご覧ください。

インスタンスを作成するときに、複数のネットワーク インターフェースを追加できます。

  • Google Cloud コンソールの [インスタンスの作成] ページの [ネットワーキング > ネットワーク インターフェース] セクションでネットワーク インターフェースを追加します。
  • gcloud CLI で instances create コマンドを使用します。インターフェースごとに --network-interface フラグ、その次に ([network | subnet], private-network-ip, address, external-ipv6-address) などの適切なネットワーキング キーを指定します。

最初のインターフェースは、常に nic0 として作成されます。また、これが常にデフォルトのインターフェースになります。これは、 Google Cloudネットワーキングの他の側面で重要となります。たとえば、 Google Cloud ロードバランサ(パススルー ネットワーク ロードバランサを除く)は、nic0 にのみトラフィックを分散します。

コンソール

  1. Google Cloud コンソールで、[インスタンスを作成] ページに移動します。

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

  2. [名前] フィールドにインスタンスの名前を入力します。

  3. [リージョン] フィールドでリージョンを選択します。

  4. [ゾーン] フィールドでゾーンを選択します。

  5. [詳細オプション] セクションで、[ネットワーキング] を開いて次の操作を行います。

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

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

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

    3. インターフェースの IP スタックタイプに次のいずれかのオプションを選択します。

      • IPv4(シングルスタック)
      • IPv4 と IPv6(デュアルスタック)
      • IPv6(シングルスタック)プレビュー
    4. IPv4 アドレスのインターフェースの場合は、次の操作を行います。

      1. [プライマリ内部 IPv4 アドレス] で次のいずれかを選択します。

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

        • エフェメラル: 新しいエフェメラル IPv4 アドレスを割り当てます。
        • なし: 外部 IPv4 アドレスを割り振りません。
        • リストから予約された静的 IPv4 アドレス。
        • 静的外部 IP アドレスを予約: 新しい静的外部 IPv4 アドレスを予約して割り当てます。
    5. IPv6 アドレスのインターフェースの場合は、接続されたサブネットのアクセスタイプに応じて、次の操作を行います。

      1. [プライマリ内部 IPv6 アドレス] で次のいずれかを選択します。
        • 自動割り当て: 新しいエフェメラル内部 IPv6 アドレスを自動的に割り当てます。
        • リストから予約された静的内部 IPv6 アドレス。
        • 静的内部 IPv6 アドレスを予約: 新しい静的内部 IPv6 アドレスを予約して割り当てます。
      2. [外部 IPv6 アドレス] で、次のいずれかを選択します。
        • 自動割り当て: 新しいエフェメラル外部 IPv6 アドレスを自動的に割り当てます。
        • リストから予約された静的外部 IPv6 アドレス。
        • 静的外部 IPv6 アドレスを予約: 新しい静的外部 IPv6 アドレスを予約して割り当てます。
    6. ネットワーク インターフェースの変更を終了するには、[完了] をクリックします。

  6. 別のインターフェースを追加するには、[ネットワーク インターフェースを追加] をクリックします。

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

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

gcloud

新しいインスタンスにネットワーク インターフェースを作成するには、instances create コマンドを使用します。

インターフェースごとに --network-interface フラグを指定し、さらに networksubnetprivate-network-ipaddressexternal-ipv6-address などの適切なネットワーキング キーを指定します。複数のインターフェースを持つ VM の作成方法の例については、構成例をご覧ください。

このスニペットは、インスタンス作成時に指定できる多くのパラメータの 1 つである --network-interface フラグについて示すことのみを目的としたものです。

必要なネットワーク インターフェースの数をサポートしているマシンタイプを確認するには、ネットワーク インターフェースの最大数の表をご覧ください。

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        private-network-ip=INTERNAL_IPV4_ADDRESS \
        address=EXTERNAL_IPV4_ADDRESS | no-address, \
        internal-ipv6-address=INTERNAL_IPV6_ADDRESS \
    ...
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
        external-ipv6-prefix-length=96 \
        ipv6-network-tier=PREMIUM \
    ...

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

  • INSTANCE_NAME: 作成する VM インスタンスの名前。
  • ZONE: インスタンスが作成されるゾーン。
  • NETWORK: インターフェースが接続するネットワーク。
  • SUBNET: インターフェースが接続するサブネット。
  • STACK_TYPE: インターフェースのスタックタイプ。

    デフォルト値は IPV4_ONLY です。デュアルスタック インターフェースを構成するには IPV4_IPV6 を指定します。IPv6 専用インターフェースを構成するには IPV6_ONLY を指定します(プレビュー版)。

  • IPv4 アドレスを持つインターフェースの値:

    • INTERNAL_IPV4_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv4 アドレス。割り当て済みの有効なアドレスのみを使用する場合は、省略します。
    • EXTERNAL_IPV4_ADDRESS: インターフェースの外部 IPv4 アドレス。

      外部 IPv4 アドレスは予約済みである必要があります。インターフェースに外部 IP アドレスを使用しない場合は、address=EXTERNAL_IPV4_ADDRESS の代わりに「no-address」を指定します。インターフェースでエフェメラル外部 IP アドレスを受信する場合は、address='' を指定します。

  • IPv6 アドレスのインターフェースの値:

    • INTERNAL_IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。内部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。
    • EXTERNAL_IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な外部 IPv6 アドレス。外部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから外部 IPv6 アドレスを自動的に割り当てます。

API

instances.insert メソッドを使用して、複数のネットワーク インターフェースを持つ VM インスタンスを作成します。

  • 内部 IPv4 アドレスのみを持つ VM インスタンスを作成するには、次の操作を行います。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "networkIP": "IPV4_ADDRESS",
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

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

    • PROJECT_ID: インスタンスが含まれているプロジェクトの ID。
    • ZONE: インスタンスが含まれているゾーン。
    • IPV4_ADDRESS: ネットワーク インターフェースに割り当てる内部 IPv4 アドレス。
    • REGION: インスタンスが含まれるリージョン。
    • SUBNET: ネットワーク インターフェースが配置されているサブネット。
  • 内部 IPv4 アドレスと内部 IPv6 アドレスの両方を持つ VM インスタンスを作成するには、次の操作を行います。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV4_IPV6,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

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

    • PROJECT_ID: インスタンスが含まれているプロジェクトの ID。
    • ZONE: インスタンスが含まれているゾーン。
    • REGION: インスタンスが含まれるリージョン。
    • SUBNET: ネットワーク インターフェースが配置されているサブネット。
    • IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。内部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。
  • 内部 IPv6 アドレスのみを持つ VM インスタンス(プレビュー)を作成するには、次の操作を行います。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV6_ONLY,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

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

    • PROJECT_ID: インスタンスが含まれているプロジェクトの ID。
    • ZONE: インスタンスが含まれているゾーン。
    • REGION: インスタンスが含まれるリージョン。
    • SUBNET: ネットワーク インターフェースが配置されているサブネット。
    • IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。内部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。

Terraform

Terraform リソースを使用すると、複数のネットワーク インターフェースを持つ VM インスタンスを作成できます。

Terraform 引数の例の値は変更できます。

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace with your project ID in quotes
  zone         = "us-central1-b"
  name         = "backend-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = var.subnet_1 # Replace with self link to a subnetwork in quotes
    network_ip = "10.0.0.14"
  }
  network_interface {
    subnetwork = var.subnet_2 # Replace with self link to a subnetwork in quotes
    network_ip = "10.10.20.14"
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

構成例

以降のセクションでは、複数のインターフェースを持つ VM を作成する方法について説明します。

IPv4 アドレスのみを持つ複数のネットワーク インターフェースを構成する

次のサンプル コマンドは、3 つのネットワーク インターフェースを持つインスタンスを作成します。

 gcloud compute instances create vm1 --machine-type=n1-standard-4 \
    --network-interface '' \
    --network-interface network=net1,subnet=subnet-a,private-network-ip=10.10.10.2,address=EXTERNAL_IPV4_ADDRESS \
    --network-interface network=net2,subnet=subnet-b,private-network-ip=10.10.20.2,no-address

インターフェースは次のように作成されます。

  • nic0 はデフォルト設定で作成されます。インターフェースは、デフォルトの VPC ネットワークのサブネットに接続し、内部 IP アドレスとエフェメラル外部 IP アドレスが自動的に割り振られます。

  • nic1 は、ネットワーク net1 のサブネット subnet-a に接続されます。内部 IPv4 アドレスは 10.10.10.2 であり、静的外部 IPv4 アドレスは EXTERNAL_IPV4_ADDRESS です。

  • nic2 は、ネットワーク net2 のサブネット subnet-b に接続されます。内部 IPv4 アドレスは 10.10.20.2 であり、外部 IP アドレスはありません。

gcloud compute instances create コマンドと --network-interface フラグの詳細については、コマンドのドキュメントをご覧ください。

追加したネットワーク インターフェースの IP アドレスを使用して、DNS 転送を設定できます。Cloud DNS 転送ゾーンの構成の詳細については、転送ゾーンをご覧ください。

IPv4 アドレスと IPv6 アドレスの両方を持つ複数のネットワーク インターフェースを構成する

次のサンプル コマンドは、2 つのネットワーク インターフェースを持つデュアル スタック インスタンスを作成します。

gcloud compute instances create vm1 \
    --network-interface network=dual-int,subnet=int-subnet,stack-type=IPV4_IPV6 \
    --network-interface network=dual-ext,subnet=ext-subnet,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=ZONE_A

インターフェースは次のように作成されます。

  • nic0 は、ネットワーク dual-int のサブネット int-subnet に接続され、エフェメラル内部 IPv4 アドレスとエフェメラル内部 IPv6 アドレスが割り振られます。

  • nic1 は、ネットワーク dual-ext のサブネット ext-subnet に接続され、エフェメラル内部 IPv4 アドレスとエフェメラル外部 IPv6 アドレスが割り振られます。

IPv6 アドレスのみを持つ複数のネットワーク インターフェースを構成する

次のサンプル コマンドは、2 つのネットワーク インターフェースを持つ IPv6 専用インスタンス(プレビュー)を作成します。

gcloud compute instances create vm1 \
    --network-interface network=ipv6-only-int,subnet=int-subnet,stack-type=IPV6_ONLY \
    --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=us-west2-a

インターフェースは次のように作成されます。

  • nic0 は、ネットワーク ipv6-only-int のサブネット int-subnet に接続され、エフェメラル内部 IPv6 アドレスが割り振られます。

  • nic1 は、ネットワーク ipv6-only-ext のサブネット ext-subnet に接続され、エフェメラル外部 IPv6 アドレスが割り振られます。

インスタンス グループの複数のネットワーク インターフェースを構成する

非マネージド インスタンス グループとマネージド インスタンス グループでは、複数のネットワーク インターフェースを持つインスタンスを使用できます。

非マネージド インスタンス グループの場合は、各インスタンスを個別に作成します。各 VM の nic0 ネットワーク インターフェースが同じサブネットに接続するようにします。次に、非マネージド インスタンス グループに VM インスタンスを追加します。

マネージド インスタンス グループに複数のネットワーク インターフェースを構成するには、各インターフェースに --network-interface フラグを 1 回設定して、インスタンス テンプレートでインターフェースごとにネットワーク構成を指定する必要があります。次の例では、3 つのネットワーク インターフェースを持つインスタンス テンプレートを作成します。

gcloud compute instance-templates create template-1 \
    --network-interface subnet=net0-subnet-a \
    --network-interface subnet=net1-subnet-b,no-address \
    --network-interface subnet=net2-subnet-c,no-address \
    --region REGION_A

プロジェクトの各リージョンのサブネット名は一意である必要があるため、名前でサブネットを指定すると、各インターフェースが暗黙的に VPC ネットワークに関連付けられます。各インターフェースでは、一意の VPC ネットワーク内のサブネットを使用する必要があります。

  • nic0net0-subnet-a サブネットを使用します。
  • nic1net1-subnet-b サブネットを使用します。
  • nic2net2-subnet-c サブネットを使用します。

--network-interface フラグの no-address オプションは、外部 IPv4 アドレスなしでインターフェースが構成されていることを示します。内部 IP アドレスは、インターフェースで使用されるサブネットから取得されます。フラグと構文の詳細については、instance-templates create コマンドの --network-interface フラグをご覧ください。

トラブルシューティング

複数のインターフェースがある VM を作成できない

以下のエラー メッセージのいずれかが表示される場合があります。

  • Invalid value for field 'resource': ''. Too many network interfaces. The maximum number of network interfaces allowed for this machine type is.

    このエラー メッセージが表示された場合、インスタンス マシンタイプでサポートされている最大インターフェース数より多くのインターフェースを作成しようとしています。インターフェースの最大数の表を参照してください。

  • Networks must be distinct for NICs attached to a VM.

    このメッセージが表示された場合、同じネットワーク内に複数のインターフェースを作成しようとしています。各ネットワーク インターフェースは、それぞれ異なる VPC ネットワークに接続する必要があります。

  • Subnetwork CIDR ranges must be non-overlapping for NICs attached to a VM.

    このメッセージが表示された場合、VM のインターフェースに関連付けられた CIDR の範囲が重複しています。これらの CIDR 範囲には、VM インターフェースに関連付けられたサブネットのすべてのプライマリ範囲だけでなく、エイリアス IP 範囲により使用されるセカンダリ範囲も含まれます。各インターフェースはサブネットに接続されており、それぞれが別の VPC ネットワーク内に存在し、他のインターフェースのサブネットと重複しないようにする必要があります。たとえば、インスタンスをリージョン REGION_A で作成しようとしている場合、次のコマンドか Google Cloud コンソールを使用すると、サブネット プライマリ CIDR 範囲を確認できます。

    gcloud compute networks subnets list --regions REGION_A
    NAME                REGION    NETWORK          RANGE
    default             REGION_A  default          10.138.0.0/20
    overlapping-subnet  REGION_A  test-network     10.138.8.0/24
    

    セカンダリ サブネットの CIDR 範囲を確認するには、次のコマンドまたは Google Cloud コンソールを使用します。

    gcloud compute networks subnets describe overlapping-subnet --region REGION_A
    
    ...
    ipCidrRange: 10.128.8.0/24
    ...
    secondaryIpRanges:
    - ipCidrRange: 10.138.8.0/24
      rangeName: conflicting-range
    
  • Multiple network interfaces are not supported on legacy networks.

    このメッセージが表示された場合、レガシー ネットワーク内にインスタンスを作成しようとしています。レガシー ネットワークでは、複数インターフェースのインスタンスはサポートされていません。ネットワークが以前のネットワークかどうかは、次のいずれかの方法で確認できます。

    • Google Cloud コンソールで、[VPC ネットワーク] ページに移動し、[モード] 列を確認します。
    • gcloud compute networks list コマンドを実行して、SUBNET_MODE フィールドを確認します。
  • Required 'compute.instances.create' permission for 'projects/PROJECT_ID/zones/ZONE/instances/test-inst'

    このメッセージが表示された場合、ログインしているアカウントに、インスタンスの作成に必要な IAM 権限がありません。インスタンスの作成に必要なロールの詳細については、複数のネットワーク インターフェースを持つ権限、IAM、インスタンスをご覧ください。OWNEREDITORcompute.instanceAdmin.v1 のいずれかのロールが、プロジェクトに関連付けられている IAM ポリシーによって付与されているかどうかを確認できます。共有 VPC でインスタンスを作成するには、さらに compute.networkUser のロールが必要です。以下の例では、インスタンスを作成するために必要な IAM 権限がアカウント email2@gmail.com に付与されていません。手順については、IAM ガイドのリソースへのアクセス権の付与、変更、取り消しをご覧ください。

    gcloud projects get-iam-policy PROJECT_ID
    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

    OWNEREDITORcompute.instanceAdmin.v1 のいずれかのロールを付与するよう、プロジェクトのオーナーまたは編集者に依頼できます。インターフェースを共有 VPC に属するサブネットに関連付ける場合は、compute.networkUser のロールも必要です。

    gcloud projects set-iam_policy --member user:email2@gmail.com --role roles/editor
    

セカンダリ インターフェースの内部 IP アドレスに接続できない

  • ファイアウォール ルールをチェックして、VM セカンダリ インターフェースへの接続が許可されていることを確認します。セカンダリ インターフェースに接続されているネットワークのファイアウォール ルールを確認するには、Google Cloud コンソールにアクセスして該当する VPC ネットワークをクリックするか、次の gcloud コマンドを使用します。

    gcloud compute firewall-rules list --filter='network:NETWORK_NAME'
    
  • インターネット アドレスから、またはセカンダリ インターフェースのネットワークの外部から、セカンダリ インターフェースに接続しようとしていないか確認します。インターフェースの内部 IP に接続できるのは、ネットワーク内からに限られます。ネットワーク外からセカンダリ インターフェースにアクセスする必要がある場合は、セカンダリ インターフェースに外部 IP アドレスを割り当てます。

  • セカンダリ インターフェースの内部 IP に、セカンダリ インターフェースの接続先サブネットの外部から接続しようとしているのか、それとも同じネットワークの別のサブネットから、またはピアリングされたネットワークから接続しようとしているのかを確認します。VPC ピアリングと複数のインターフェースがある VM インスタンスとの間の相互作用については、1 つのインスタンスに複数のネットワーク インターフェースを設定するで説明しています。インターフェースのサブネットの外部からセカンダリ インターフェースに到達するには、VM にルートを構成する必要があります。VM 内のデフォルト ルートが DHCP でどのようにプログラムされるかについては、複数のネットワーク インターフェースがある場合の DHCP の動作をご覧ください。

  • IPv6 アドレスにアクセスしようとしている場合は、セカンダリ インターフェースの IPv6 アドレスに接続できないもご覧ください。

外部 IP アドレスを使用してセカンダリ インターフェースに接続できない

DHCP サーバーは、VM のプライマリ ネットワーク インターフェース上でのみ、既定のルートをプログラムします。外部 IP を使用してセカンダリ インターフェースに接続する場合は、2 つのオプションがあります。ネットワーク外への接続がセカンダリ ネットワーク インターフェースでのみ必要な場合は、そのネットワーク インターフェース上に既定のルートを設定できます。それ以外の場合は、追加のインターフェースのルーティングを構成するチュートリアルで説明されている方法を使用して、VM でソースベースのポリシー ルーティングを使用して個別のルーティング テーブルを構成します。

IPv6 アドレスにアクセスする場合は、セカンダリ インターフェースの IPv6 アドレスに接続できないもご覧ください。

セカンダリ インターフェースの IPv6 アドレスに接続できない

IPv6 アドレスにアクセスする場合は、VM に google-guest-agent バージョン 20220603.00 以降がインストールされていることを確認します。google-guest-agent バージョンの管理の詳細については、ゲスト環境をご覧ください。

以前のバージョンの google-guest-agent を使用している場合、セカンダリ インターフェースは IPv6 サブネット ルートを受信しません。ルートが正しく構成されるように、ゲスト エージェントを更新することをおすすめします。

ただし、回避策として、代わりに起動スクリプトを作成して、セカンダリ インターフェースごとに次の構成変更を行うこともできます。

sudo sysctl -w net.ipv6.conf.INTERFACE_NAME.accept_ra_rt_info_max_plen=128

INTERFACE_NAME は、インターフェースの名前に置き換えます(eth1ens5 など)。

/32 ではないネットマスクを使用する場合に接続の問題が発生します

デフォルトでは、インスタンスのメタデータ サーバーはデフォルト ゲートウェイの ARP リクエストにのみ応答します。

/32 以外のネットマスクを使用してインターフェースを構成するには、フラグ --guest-os-features MULTI_IP_SUBNET を使用してイメージを作成し、それを使用してインスタンスを作成する必要があります。たとえば、debian-9 ベースのイメージを使用している場合、次のコマンドを使用してイメージを作成できます。

gcloud compute images create debian-9-multi-ip-subnet \
     --source-disk debian-9-disk \
     --source-disk-zone ZONE_A \
     --guest-os-features MULTI_IP_SUBNET

イメージに構成されているゲスト機能を表示するには、ゲストイメージで gcloud compute images describe コマンドを実行します。

gcloud compute images describe debian-9-multi-ip-subnet

カスタム イメージの作成の詳細については、カスタム イメージの作成、削除、サポート終了をご覧ください。

複数のネットワーク インターフェースを持つ VM の内部ホスト名を解決できない

DNS クエリを内部ホスト名で実行すると、インスタンスのプライマリ ネットワーク インターフェース(nic0)に解決されます。

nic0 が、DNS クエリを発行するインスタンスの VPC ネットワークとは異なる VPC ネットワークに接続されている場合、DNS クエリは失敗します。内部 DNS は、特定の VPC ネットワーク内でのみ解決されます。詳細については、複数のネットワーク インターフェースを使用した DNS の解決をご覧ください。

シリアル コンソールを使用したトラブルシューティング

VM でシリアル コンソールを有効にして、構成関連の問題をデバッグすることをおすすめします。シリアル コンソールを使用してインタラクティブ デバッグを行うには、シリアル コンソールを使用したトラブルシューティングの操作を行います。