複数のネットワーク インターフェースを持つ VM のトラブルシューティング

このページでは、複数のネットワーク インターフェースを持つ VM の作成と使用時に発生する可能性のある一般的な問題のトラブルシューティング手順について説明します。

複数のインターフェースがある 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 Console を使用すると、サブネット プライマリ 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 でシリアル コンソールを有効にして、構成関連の問題をデバッグすることをおすすめします。シリアル コンソールを使用してインタラクティブ デバッグを行うには、シリアル コンソールを使用したトラブルシューティングの操作を行います。