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

このページでは、ネットワーク インターフェースが複数ある仮想マシン(VM)インスタンスの設定について説明します。

デフォルトでは、VPC ネットワークのすべてのインスタンスにデフォルトのネットワーク インターフェースが 1 つずつあります。ここで説明する手順を使用して、追加のネットワーク インターフェースを作成します。各インターフェースを異なる VPC ネットワークに接続し、Google Cloud Platform の異なる VPC ネットワークに対してそのインスタンスのアクセス権を付与します。複数のネットワークインターフェースを、同じ VPC ネットワークに接続することはできません。

追加のネットワーク インターフェースが不要な場合は、インスタンスの作成と起動の手順を行ってください。

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

仕様

要件

  • ネットワーク インターフェースを設定できるのはインスタンスの作成時のみです。
  • 1 つのインスタンスの中で設定されている各ネットワーク インターフェースはそれぞれ異なる VPC ネットワークに接続される必要があります。各インターフェースの属するサブネットの IP 範囲は他のインターフェースのサブネットと重なってはいけません。
  • インスタンスを作成する前に、複数のインターフェースの接続先となる追加の VPC ネットワークが存在している必要があります。追加の VPC ネットワークの作成の手順については、VPC の使用を参照してください。
  • ネットワーク インターフェースを削除するには、インスタンスの削除が必要となります。
  • インスタンスごとに少なくとも 1 つのネットワーク インターフェースが必要です。インスタンスあたりのネットワーク インターフェースの最大数は 8 つですが、インスタンスのマシンタイプによって異なります。
    • nic0 は必須で、インスタンスの作成時に設定する必要があります。
    • nic1nic7 は省略可ですが、これらもインスタンスの作成時に設定する必要があります。
    • 詳細については、インターフェースの最大数をご覧ください。
  • インターフェースごとに任意で外部 IP アドレスを設定できます。
  • Google Compute Engine の DHCP サーバーはデフォルトのルート(RFC 3442「クラスレス静的ルート」)をデフォルトの NIC(nic0)にのみ送信します。別の NIC でデフォルトのルートが必要な場合は、インスタンスでデフォルトのルートを設定する必要があります。

制限事項

  • 複数のネットワーク インターフェースが有効になっている VM のネットワーク インターフェースでは、エイリアス IP 範囲はサポートされていません。

  • VM の作成後にネットワーク インターフェースを変更または削除することはできません。

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

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

  • プロジェクト オーナーまたはプロジェクト編集者の役割
  • compute.instanceAdmin.v1 の役割

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

共有 VPC 環境での複数のネットワーク インターフェースを持つインスタンスとインスタンス テンプレートの作成と削除: プロジェクト レベルでオーナー、編集者、または compute.instanceAdmin.v1 の役割を持つユーザーが、複数のインターフェースを持つインスタンスを作成できます。これらのインターフェースのいずれかが共有 VPC ホスト プロジェクトのサブネットに関連付けられる場合、共有 VPC ホスト プロジェクト レベルまたは共有 VPC サブネット レベルでの compute.networkUser の役割も必要です。

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

VPC ネットワークの種類が異なる複数のネットワーク インターフェースの使用

  • レガシー ネットワークでは、複数のネットワーク インターフェースはサポートされていません。
  • 複数のネットワーク インターフェースを設定するときに、各インターフェースを自動モード VPC ネットワークまたはカスタムモード VPC ネットワークに接続します。

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

  • サブネットから割り当てられたプライベートのプライマリ IP アドレスを使用して各ネットワーク インターフェースを設定する必要があります。
    • 1 つのインスタンス内の各インターフェースに割り当てられたプライベートのプライマリ アドレスはそれぞれ、異なるものにする必要があります。
  • 独自のプライベート IP アドレスを使用して各仮想インターフェースを任意で設定できます。このプライベート IP アドレスは、エフェメラルまたは予約済みにすることができます。

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

  • インスタンスごとに使用できる仮想インターフェースの最大数は 8 つです。
  • インスタンスで使用できるインターフェース数は、インスタンスのマシンタイプと vCPU 数によって異なります。

通常、n1-standard-x、n1-highmem-x、n1-highcpu-x、f1-micro、g1-small、カスタム VM には、次のルールが適用されます。

  • VM のネットワーク インターフェース数が 2 つの場合、2vCPU 以上
  • VM の vCPU あたりのネットワーク インターフェース数が 1 つの場合、2vCPU より大きい(VM あたりのネットワーク インターフェースの最大数は 8 つ)

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

インスタンスのタイプ vCPU 数 仮想 NIC の数
n1-standard-x、n1-highmem-x、n1-highcpu-x、n1-highmem-x、n1-highcpu-x "x" の値で指定。 "x" の値あたり 1 つの NIC、NIC の最低数は 2、NIC の最大数は 8
f1-micro 0.2 vCPU 2 つの NIC
g1-small 0.5 vCPU 2 つの NIC
カスタム インスタンス 1~64 の間で vCPU を設定可能 vCPU あたり 1 つの NIC、NIC の最低数は 2、NIC の最大数は 8

複数のネットワーク インターフェースを持つ仮想マシン インスタンスの作成

インターフェースが 1 つのインスタンスの作成方法に変更はありません。インスタンスの作成に関する一般的な手順については、インスタンスの作成と起動をご覧ください。

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

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

最初のインターフェースは、常に nic0 として作成されます。また、これが常にデフォルトのインターフェースになります。このインターフェースは、GCP ネットワーキングの他の側面で重要となります。たとえば、負荷分散でサポートされているのは nic0 のみです。

Console


  1. Google Cloud Platform Console の [インスタンスの作成] ページに移動します。
    [インスタンスの作成] ページに移動
  2. インスタンス名、ゾーン、マシンタイプ、インスタンスのその他の基本的なセクションを入力します。
  3. [管理] タブと [ディスク] タブのフィールドを入力します。
  4. [ネットワーキング] タブの [ネットワーク インターフェースを追加] をクリックします。
  5. ネットワークを選択します。
  6. VPC ネットワークに複数のサブネットがある場合、サブネットを選択します。
  7. カスタム内部 IP アドレスをインターフェースに割り当てるには、[内部 IP] プルダウン メニューで [カスタム] を選択して IP アドレスを入力します。
  8. 外部 IP アドレスが不要であることを示すには、[外部 IP] プルダウン メニューで [なし] を選択します。
  9. 静的外部 IP アドレスを割り当てるには、[外部 IP] プルダウン メニューで [IP アドレスを作成] を選択して [名前] と [説明] を入力し、[予約] をクリックします。
  10. IP 転送を有効にするには、[IP 転送] プルダウン メニューで [オン] を選択します。
  11. さらにネットワーク インターフェースを追加するには、[ネットワーク インターフェースを追加] をクリックして上記のステップ 5~10 を行います。

gcloud

instances create コマンドを使用して、新しいインスタンスでネットワーク インターフェースを作成します。各インターフェースの --network-interface フラグ、その次に ([network | subnet], private-network-ip, address) などの適切なネットワーキング キーを指定します。

このスニペットは、インスタンス作成時に指定できる多くのパラメータの 1 つである --network-interface フラグについて示すことのみを目的としたものです。他のフラグについては、instances create コマンドgcloud リファレンスをご覧ください。

gcloud compute instances create [INSTANCE_NAME] \
    [--network-interface
        [network=[NETWORK_NAME]; default="default" | subnet=[SUBNET]]
        [address=[ADDRESS] | no-address]
        [private-network-ip=[PRIVATE_NETWORK_IP]]
    ...]

3 つのネットワーク インターフェースのあるインスタンスを作成するためのコマンド例:

 gcloud compute instances create vm1 \
    --network-interface '' \
    --network-interface subnet=net1-subnet-a,private-network-ip=10.128.0.2,address=8.8.8.8 \
    --network-interface subnet=net2-subnet-b,private-network-ip=10.129.0.2,no-address

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

  • すべてのデフォルト設定が含まれる nic0。これは、デフォルトの VPC ネットワークに関連付けられ、自動的に割り当てられたプライベート IP アドレスとエフェメラル パブリック IP アドレスがあります。
  • net1-subnet-a に属する nic1。内部 IP アドレスは 10.128.0.2 で、静的外部 IP アドレスは 8.8.8.8 です。
  • net2-subnet-b に属する nic2。内部 IP アドレスは 10.129.0.2 で、パブリック IP アドレスはありません。

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

インスタンス グループの複数のネットワーク インターフェースの設定

マネージド インスタンス グループ内のすべてのインスタンスは、1 つのサブネットに制限されています。非マネージド インスタンス グループ内のすべてのインスタンスが負荷分散に使用された場合、これらのインスタンスは 1 つのサブネットに制限されます。詳細については、VPC ネットワークとサブネット負荷分散のドキュメントをご覧ください。

これらの制限があるため、インターフェースはインスタンスごとに 1 つだけ存在しす。Compute Engine では、インスタンス内の唯一のインターフェースに関連付けられているサブネットに基づいて検証を実行します。

マネージド インスタンス グループまたは非マネージド インスタンス グループ内のインスタンスに複数のインターフェースを設定すると、引き続き Compute Engine でデフォルトの nic0 インターフェースに対してこれらの条件が検証されます。

複数のインターフェースを持つインスタンス テンプレートの作成

インスタンスごとに 1 つのインターフェースを使用するインスタンス テンプレートを作成するプロセスに変更はありません。このプロセスについては、instance-templates create コマンドの gcloud リファレンスで説明しています。

インスタンス テンプレートに複数のネットワーク インターフェースを設定するには、作成するネットワーク インターフェースごとに --network-interface フラグを設定します。


gcloud compute instance-templates create NAME [--description DESCRIPTION] \
    [--network-interface [network NETWORK; default="default" | subnet SUBNET][address ADDRESS| no-address] \
    [--network-interface [network NETWORK; default="default" | subnet SUBNET][address ADDRESS | no-address] \
    .....

各インターフェースにネットワーキング キー network, subnet, address を割り当てます。

たとえば、次のコマンドを実行すると、各インスタンスに 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 us-central1`

インターフェースは次のとおりです。

  • net0-subnet-a に属する nic0。自動的に割り当てられたパブリック IP アドレスがあります。
  • net1-subnet-b に属する nic1。パブリック IP アドレスはありません。
  • net2-subnet-c に属する nic2。パブリック IP アドレスはありません。

フラグと構文の詳細については、instance-templates create コマンドをご覧ください。

ポリシー ルーティングの設定

Google でサポートされているイメージでは、セカンダリ ネットワーク インターフェース(nic0 以外のインターフェース)からサブネットに対してローカルではない IP アドレスに接続する必要がある場合、特定のネットワーク インターフェース宛のパケットがそのインターフェース経由で送出されるようにポリシー ルーティングを設定する必要があります。このような場合は、ポリシー ルーティングを使用して、ネットワーク インターフェースごとに個別のルーティング テーブルを設定する必要があります。

次の手順で、複数のインターフェースを持つ Linux ベースのインスタンスにポリシー ルーティングを設定します。

  1. 次のコマンドを使用して、複数のネットワーク インターフェースが設定されたインスタンスに接続します。

    gcloud compute ssh multinic-vm
    

  2. nic1 に ifconfig を使用してポリシー ルーティングを設定します。以下の例では、Compute Engine で内部 IP アドレス 192.168.0.2 が nic1 に割り当てられ、ゲートウェイが 192.168.0.1 であると想定されます。

    sudo ifconfig eth1 192.168.0.2 netmask 255.255.255.255 broadcast 192.168.0.2 mtu 1430
    sudo echo "1 rt1" >> /etc/iproute2/rt_tables # (sudo su - first if permission denied)
    sudo ip route add 192.168.0.1 src 192.168.0.2 dev eth1
    sudo ip route add default via 192.168.0.1 dev eth1 table rt1
    sudo ip rule add from 192.168.0.2/32 table rt1
    sudo ip rule add to 192.168.0.2/32 table rt1
    

  3. インスタンスにその他のインターフェース(nic2、nic3.... nic7)がある場合は、ステップ 2 でコマンドを繰り返します。

トラブルシューティング

複数のインターフェースのある 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 の範囲が重複しています。各ネットワーク インターフェースは、それぞれ異なる VPC ネットワークに含まれるサブネットに属していなければならず、その IP 範囲は他のインターフェースのサブネットと重ならないものでなければなりません。たとえば、リージョン us-west1 の中にインスタンスを作成する場合、次のコマンドまたは Google Cloud Platform Console を使用して、サブネットの CIDR 範囲を確認できます。

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

  • Multiple network interfaces are not supported on legacy networks.

    このメッセージが表示された場合、レガシー ネットワーク内にインスタンスを作成しようとしています。レガシー ネットワークでは、複数インターフェースのインスタンスはサポートされていません。ネットワークがレガシー ネットワークかどうかは、次のコマンドまたは Google Cloud Platform Console を使用して確認できます。Mode フィールドがネットワークのタイプを表しています。

    gcloud compute networks list
    NAME             MODE    IPV4_RANGE     GATEWAY_IPV4
    default          auto
    legacy-network   legacy  10.240.0.0/16  10.240.0.1
    test-network     custom
    

  • 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 Platform Console にアクセスして該当する VPC ネットワークをクリックするか、次の gcloud コマンドを使用します。

    gcloud compute firewall-rules list --filter='network:[NETWORK_NAME]'
    

  • インターネット アドレスから、またはセカンダリ インターフェースのネットワークの外部から、セカンダリ インターフェースに接続しようとしているかどうかを確認します。インターフェースの内部 IP には、ネットワーク内からのみ接続できます。ネットワーク外からそのインターフェースにアクセスする必要がある場合は、セカンダリ インターフェースに外部 IP アドレスを割り当てます。

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

外部 IP を使用してセカンダリ インターフェースに接続することができません

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

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

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

gcloud compute images create debian-8-jessie-v20170615 --source-disk debian-8-disk --source-disk-zone us-west1-a --guest-os-features MULTI_IP_SUBNET

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

設定に関する問題をデバッグする場合は、VM 上でシリアル コンソールを有効にすることをお勧めします。シリアル コンソールとのやり取りの手順に沿って、対話式デバッグ用にシリアル コンソールを有効にすることができます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント