このチュートリアルでは、複数のネットワーク インターフェースを持ち、各インターフェースが異なる Virtual Private Cloud(VPC)ネットワークに接続されている仮想マシン(VM)インスタンスを作成する方法について説明します。さらに、このチュートリアルでは、nic1
インターフェースに ping を実行できるように、Linux VM でルーティングを構成する方法の例を示します。
複数のネットワーク インターフェース コントローラを持つ VM は、マルチ NIC VM と呼ばれます。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
構成の例
次の図は、このチュートリアルで作成する VPC ネットワーク、サブネット、VM と、リソース名とサブネット IP アドレス範囲に使用できる値の例を示しています。
2 つの VPC ネットワークを作成する
マルチ NIC VM を作成するには、接続先の VPC ネットワークがすでに存在している必要があります。2 つの VPC ネットワークを作成します。このチュートリアルでは、各 VPC ネットワークに 2 つのサブネットがあります。
構成例に示す構成を作成するには、次の値を使用してネットワークとサブネットを作成します。
- 次の対象を含む
network-1
というネットワーク。- プライマリ IPv4 アドレス範囲が
10.10.1.0/24
であるsubnet-1
というサブネット。 - プライマリ IPv4 アドレス範囲が
10.10.3.0/24
であるsubnet-3
というサブネット。
- プライマリ IPv4 アドレス範囲が
次の対象を含む
network-2
というネットワーク。- プライマリ IPv4 アドレス範囲が
10.10.2.0/24
であるsubnet-2
というサブネット。 - プライマリ IPv4 アドレス範囲が
10.10.4.0/24
であるsubnet-4
というサブネット。
- プライマリ IPv4 アドレス範囲が
コンソール
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] フィールドに、VPC ネットワークの名前を入力します。
[サブネット作成モード] で [カスタム] を選択します。
[新しいサブネット] セクションで、次の情報を指定します。
- サブネットの名前を入力します。
- リージョンを選択します。作成する両方の VPC ネットワークで、少なくともサブネットの一つに同じリージョンを使用するようにしてください。次のセクションでマルチ NIC VM を作成する場合は、この同じリージョンを使用します。サンプル構成では、すべてのサブネットに同じリージョンを使用しています。
IP アドレス範囲を入力します。これはサブネットのプライマリ IPv4 範囲です。
RFC 1918 アドレス以外の範囲を選択した場合は、その範囲が既存の構成と競合していないことを確認します。詳細については、IPv4 サブネットの範囲をご覧ください。
[完了] をクリックします。
[サブネットを追加] をクリックして、2 つ目のサブネットを作成します。この 2 つ目のサブネットは、VM インスタンスのネットワーク インターフェースのプライマリ サブネット範囲の外部から
ping
をテストするために使用します。[ファイアウォール ルール] セクションで、allow-custom ルールを選択し、[編集] をクリックします。テスト VM から
multi-nic-vm
への接続をテストできるように、ルールを次のように構成します。- [IPv4 範囲] で、サブネットの IPv4 アドレス範囲のチェックボックスをオンのままにします。
- [その他の IPv4 範囲] に「
35.235.240.0/20
」と入力して、SSH を使用してテスト VM に接続できるようにします。この範囲を追加すると、Identity-Aware Proxy(IAP)TCP 転送を使用した SSH 接続が可能になります。詳細については、VM への上り(内向き)SSH 接続を許可するをご覧ください。 - [プロトコルとポート] で [指定したプロトコルとポート] を選択します。
- [TCP] を選択して「
22, 3389
」と入力し、RDP と SSH を許可します。 - [その他] を選択し、「
icmp
」と入力して ICMP を許可します。
- [TCP] を選択して「
[作成] をクリックします。
前述の手順を繰り返し、2 つ目の VPC ネットワークを作成します。サブネットの IP アドレス範囲が、最初のネットワークのサブネット(構成例で使用されている IP アドレス範囲など)と重複していないことを確認します。
gcloud
networks create
コマンドを使用して VPC ネットワークを作成します。gcloud compute networks create NETWORK --subnet-mode=custom
次のように置き換えます。
NETWORK
: VPC ネットワークの名前。
networks subnets create
コマンドを使用して、VPC ネットワークのサブネットを作成します。gcloud compute networks subnets create NAME \ --network=NETWORK \ --range=RANGE \ --region=REGION
次のように置き換えます。
NAME
: サブネットの名前。NETWORK
: VPC ネットワークの名前。RANGE
: IP アドレス範囲。これはサブネットのプライマリ IPv4 範囲です。RFC 1918 アドレス以外の範囲を入力した場合は、該当する範囲が既存の構成と競合していないことを確認します。詳細については、IPv4 サブネットの範囲をご覧ください。
REGION
: リージョン。作成する両方の VPC ネットワークで、少なくともサブネットの一つに同じリージョンを使用するようにしてください。次のセクションでマルチ NIC VM を作成する場合は、この同じリージョンを使用します。サンプル構成では、すべてのサブネットに同じリージョンを使用しています。
前述の手順を繰り返して、別のサブネットを作成します。この 2 つ目のサブネットは、VM インスタンスのネットワーク インターフェースのプライマリ サブネット範囲の外部から
ping
をテストするために使用します。SSH、RDP、ICMP を許可するファイアウォール ルールを作成します。
gcloud compute firewall-rules create allow-ssh-rdp-icmp \ --network NETWORK \ --action=ALLOW \ --direction=INGRESS \ --rules=tcp:22,tcp:3389,icmp \ --source-ranges=SOURCE_RANGE
次のように置き換えます。
NETWORK
: 作成するネットワークに対応する値を入力します。- 最初のネットワークに「
network-1
」と入力します。 - 2 つ目のネットワークでこのセクションの手順を繰り返す場合は、「
network-2
」と入力します。
- 最初のネットワークに「
SOURCE_RANGE
: 作成するネットワークに対応する値を入力します。- 最初のネットワークに「
10.10.3.0/24, 35.235.240.0/20
」と入力します。10.10.3.0/24
を配置することで、test-vm-1
からmulti-nic-vm
のnic0
インターフェースへの接続をテストできます。35.235.240.0/20
を配置すると、Identity-Aware Proxy(IAP)TCP 転送を使用した SSH 接続が許可されます。詳細については、VM への上り(内向き)SSH 接続を許可するをご覧ください。 - 2 つ目のネットワークでこのセクションの手順を繰り返す場合は、「
10.10.4.0/24, 35.235.240.0/20
」と入力します。10.10.4.0/24
を配置することで、test-vm-2
からmulti-nic-vm
のnic0
インターフェースへの接続をテストできます。35.235.240.0/20
を配置すると、Identity-Aware Proxy(IAP)TCP 転送を使用した SSH 接続が許可されます。詳細については、VM への上り(内向き)SSH 接続を許可するをご覧ください。
- 最初のネットワークに「
前述の手順を繰り返し、2 つ目の VPC ネットワークを作成します。サブネットの IP アドレス範囲が、最初のネットワークのサブネット(構成例で使用されている IP アドレス範囲など)と重複していないことを確認します。
マルチ NIC VM を作成する
前のセクションで作成した VPC ネットワークごとに 1 つのインターフェースを持つ VM インスタンスを作成します。
マルチ NIC VM を作成するには:
コンソール
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
[名前] フィールドに、インスタンスの名前を入力します。 これは、サンプル構成の
multi-nic-vm
に対応します。[リージョン] フィールドで、各 VPC ネットワークに 1 つのサブネットを作成したリージョンと同じリージョンを選択します。VM インスタンスは、インターフェースが接続するサブネットと同じリージョンに存在する必要があります。サンプル構成では、すべてのサブネットに同じリージョンを使用しています。
[ゾーン] フィールドでゾーンを選択します。
[詳細オプション] セクションで、[ネットワーキング] を開いて次の操作を行います。
- [ネットワーク インターフェース] セクションを確認します。Google Cloud では、最初のネットワーク インターフェースにネットワークとサブネットワークが自動的に入力されます。これは、サンプル構成の
network-1
とsubnet-1
に対応します。 - [プライマリ内部 IPv4 アドレス] で次のいずれかを選択します。
- エフェメラル: 新しいエフェメラル IPv4 アドレスを割り振ります。
- リストから予約された静的内部 IPv4 アドレス。
- 静的内部 IPv4 アドレスを予約: 新しい静的内部 IPv4 アドレスを予約して割り振ります。サンプル構成を使用している場合は、
10.10.1.3
を予約します。
[外部 IPv4 アドレス] で、
None
を 1 つ選択します。別のインターフェースを追加するには、[ネットワーク インターフェースを追加] をクリックします。
[ネットワーク] と [サブネットワーク] で、作成した 2 番目のネットワークとサブネットワークを選択します。これは、サンプル構成の
network-2
とsubnet-2
に対応します。[IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
[プライマリ内部 IPv4 アドレス] で次のいずれかを選択します。
- エフェメラル: 新しいエフェメラル IPv4 アドレスを割り振ります。
- リストから予約された静的内部 IPv4 アドレス。
- 静的内部 IPv4 アドレスを予約: 新しい静的内部 IPv4 アドレスを予約して割り振ります。サンプル構成を使用している場合は、
10.10.2.3
を予約します。
[外部 IPv4 アドレス] で、
None
を 1 つ選択します。ネットワーク インターフェースの追加を終了するには、[完了] をクリックします。
- [ネットワーク インターフェース] セクションを確認します。Google Cloud では、最初のネットワーク インターフェースにネットワークとサブネットワークが自動的に入力されます。これは、サンプル構成の
[作成] をクリックします。
gcloud
新しいインスタンスにネットワーク インターフェースを作成するには、instances create
コマンドを使用します。
インターフェースごとに --network-interface
フラグ、その次に network
、subnet
、private-network-ip
などの適切なネットワーキング キーを指定します。外部 IP アドレスについては、次のコマンドで no-address
を指定します。
gcloud compute instances create INSTANCE_NAME \ --zone ZONE \ --network-interface \ network=NIC0_NETWORK,subnet=NIC0_SUBNET,private-network-ip=NIC0_INTERNAL_IPV4_ADDRESS,no-address \ --network-interface \ network=NIC1_NETWORK,subnet=NIC1_SUBNET,private-network-ip=NIC1_INTERNAL_IPV4_ADDRESS,no-address
次のように置き換えます。
2 つのテスト VM を作成する
2 つの VM インスタンスを追加で作成します。
- 作成したマルチ NIC VM の
nic0
インターフェースと同じネットワークで、異なるサブネットに 1 つ。これは、サンプル構成のsubnet-3
のtest-vm-1
に対応します。 - 作成したマルチ NIC VM の
nic1
インターフェースと同じネットワークで、異なるサブネットに 1 つ。これは、サンプル構成のsubnet-4
のtest-vm-2
に対応します。
これらの VM インスタンスは、複数のネットワーク インターフェースを持つ VM インスタンスのプライマリ サブネット範囲外の、サブネットから ping
をテストするために使用します。
VM インスタンスを作成するには:
コンソール
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
[名前] フィールドに、インスタンスの名前を入力します。
[リージョン] フィールドで、最初の VPC ネットワークに追加のサブネットを配置したリージョンを選択します。
[ゾーン] フィールドでゾーンを選択します。
[詳細オプション] セクションで、[ネットワーキング] を開いて次の操作を行います。
- [ネットワーク インターフェース] セクションを確認します。サブネットが、マルチ NIC VM の
nic0
インターフェースで使用されているサブネットと異なることを確認します。
- [ネットワーク インターフェース] セクションを確認します。サブネットが、マルチ NIC VM の
[作成] をクリックします。
前述の手順を繰り返し、2 つ目の VPC ネットワークと、マルチ NIC VM の
nic1
インターフェースのサブネットとは異なるサブネットにインスタンスを作成します。
gcloud
instances create
コマンドを実行して、インターフェースごとに--network-interface
フラグを指定し、さらにnetwork
、subnet
、private-network-ip
、address
などの適切なネットワーキング キーを指定します。gcloud compute instances create INSTANCE_NAME \ --zone ZONE \ --network-interface \ network=NIC0_NETWORK,subnet=NIC0_SUBNET, private-network-ip=NIC0_INTERNAL_IPV4_ADDRESS
次のように置き換えます。
INSTANCE_NAME
: 作成する VM インスタンスの名前。ZONE
: インスタンスが作成されるゾーン。最初の VPC ネットワークに追加のサブネット(マルチ NIC VM で使用されていないサブネット)を配置したリージョンを入力します。NIC0_NETWORK
: インターフェースが接続するネットワーク。NIC0_SUBNET
: インターフェースが接続するサブネット。NIC0_INTERNAL_IPV4_ADDRESS
: ターゲット サブネット内のインターフェースに必要な内部 IPv4 アドレス。割り振り済みの有効なアドレスのみを使用する場合は省略します。
前のステップを繰り返し、2 番目の VPC ネットワークと、マルチ NIC VM の
nic1
インターフェースのサブネットとは異なるサブネットにインスタンスを作成します。
マルチ NIC VM への接続をテストする
このセクションの手順に沿って、作成した追加の VM インスタンスから、複数のネットワーク インターフェースを持つ VM インスタンスの各インターフェースへの ping
をテストします。
次の表に、このチュートリアルの現時点で、サンプル構成の IP アドレス値を使用して ping を正常に実行できるシナリオを示します。
送信者 | 送信先 | ping successful |
---|---|---|
同じネットワーク内の異なるサブネットにある VM(test-vm-1 )を multi-nic-vm の nic0 インターフェースとして使用します。 |
multi-nic-vm の nic0 インターフェースの内部 IP アドレス(10.10.1.3 ) |
|
同じネットワーク(ただし、multi-nic-vm の nic1 インターフェースとはサブネットが異なる)にある VM(test-vm-2 ) |
multi-nic-vm の nic1 インターフェースの内部 IP アドレス(10.10.2.3 ) |
マルチ NIC VM の IP アドレスを取得する
必要に応じて、マルチ NIC VM のインターフェース IP アドレスを取得して、次のセクションでそれらのアドレスに ping できるようにします。
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
VM インスタンスのリストで、作成したマルチ NIC VM を見つけ、次の手順で ping できるようにこれらの値を記録します。
nic0
インターフェースとnic1
インターフェースの内部 IP アドレス
gcloud
-
gcloud compute instances list
マルチ NIC VM を見つけて、出力から次の情報を記録します。
INTERNAL_IP
: 最初のアドレスと 2 番目のアドレスは、nic0
とnic1
のネットワーク インターフェースに対応します。
VM の nic0
インターフェースに ping を実行する
VM インスタンスのリストで、マルチ NIC VM の
nic0
インターフェースと同じネットワーク内の異なるサブネットに作成した VM を見つけます。- インスタンスの行で、[SSH] をクリックします。
次のコマンドを実行して、マルチ NIC VM の
nic0
インターフェースの内部 IP アドレスに ping を実行します。ping INTERNAL_IP_NIC0
INTERNAL_IP_NIC0
は、先ほど記録した対応するアドレスに置き換えます。サンプル構成を使用している場合は、「10.10.1.3
」と入力します。ping が成功したことに着目してください。
exit
を実行して、ターミナル ウィンドウを閉じます。
VM の nic1
インターフェースに ping を実行する
VM インスタンスのリストで、マルチ NIC VM の
nic1
インターフェースと同じネットワーク内の異なるサブネットに作成したインスタンスを見つけます。- インスタンスの行で、[SSH] をクリックします。
次のコマンドを実行して、マルチ NIC VM の 2 番目のインターフェースの内部 IP アドレスに ping を実行します。
ping INTERNAL_IP_NIC1
INTERNAL_IP_NIC1
は、先ほど記録した対応するアドレスに置き換えます。サンプル構成を使用している場合は、「10.10.2.3
」と入力します。ping が失敗することに着目してください。
exit
を実行して、ターミナル ウィンドウを閉じます。
ポリシー ルーティングを構成する
前のセクションの ping テストは、非対称ルーティングが原因で失敗しました。トラフィックは multi-nic-vm
の nic1
インターフェースに送信されますが、VM のデフォルト ルートが原因で、nic0
から応答が送信されています。詳細については、複数のネットワーク インターフェースがある場合の DHCP の動作をご覧ください。
このセクションの手順に沿って、下り(外向き)パケットが正しいインターフェースを経由するようにポリシー ルーティングを構成します。
このチュートリアルでは Linux VM を使用します。ソースベースのポリシー ルーティングは、Windows オペレーティング システムではサポートされていません。
VM の nic1
インターフェースのデフォルト ゲートウェイを見つける
VM インスタンスのインターフェースのデフォルト ゲートウェイは、メタデータ サーバーにクエリを送信することによって確認できます。サンプル構成を使用している場合、値は 10.10.2.1
です。
nic1
インターフェースの IPv4 アドレスのデフォルト ゲートウェイを見つけるには、マルチ NIC VM から次のリクエストを行います。
curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google"
別のネットワーク インターフェースのデフォルト ゲートウェイを確認するには、適切なインターフェース番号を指定します。Google Cloud がインターフェースに割り当てた名前を確認するには、マルチ NIC VM の IP アドレスを取得するをご覧ください。これは、オペレーティング システムが割り当てるインターフェース名とは異なります。インターフェースの形式は nicNUMBER
です。メタデータ サーバーに送信するリクエストには、番号のみを入力します。たとえば、nic2
の場合は 2
を指定します。
マルチ NIC VM に新しいルーティング テーブルを構成する
このセクションでは、マルチ NIC VM に新しいルーティング テーブルを構成する方法について説明します。
VM インスタンスのアクセスを有効にするの手順に沿って、シリアル コンソールを有効にします。
デフォルト ルートを変更する際に VM への接続が失われないようにするには、シリアル コンソールに接続します。
ip link list
を実行して VM のネットワーク インターフェースを一覧表示し、nic1
インターフェースの名前(ens5
など)を記録します。次のコマンドを実行して、
nic1
インターフェースが IP アドレスで構成されていることを確認します。ip addr show NIC
NIC
は、前のステップで取得したnic1
インターフェースの名前に置き換えます。nic1
インターフェースに IP アドレスが自動的に割り振られていない場合は、次のコマンドを実行して IP アドレスを手動で割り振ることができます。sudo ip addr add IP_ADDRESS dev NIC
次のように置き換えます。
IP_ADDRESS
: インターフェースで構成する内部 IP アドレス。これは、サンプル構成の10.10.2.3
に対応します。NIC
: 前のステップのnic1
インターフェースの名前。
nic1
ネットワーク インターフェースのカスタム ルートテーブルを作成します。echo "1 ROUTE_TABLE_NAME" | sudo tee -a /etc/iproute2/rt_tables
ROUTE_TABLE_NAME
は、ルートテーブルの名前(route-nic1
など)に置き換えます。nic1
ネットワーク インターフェース用のカスタム ルートテーブルにデフォルト ルートを作成し、ゲートウェイに送信されるパケットの送信元ヒントを含むルートを作成します。sudo ip route add default via GATEWAY dev NIC table ROUTE_TABLE_NAME sudo ip route add GATEWAY src IP_ADDRESS dev NIC table ROUTE_TABLE_NAME
次のように置き換えます。
nic1
インターフェースに割り振られたプライマリ内部 IPv4 アドレスと一致する送信元または宛先のパケットにカスタム ルートテーブルを使用するように VM に指示するルーティング ルールを作成します。sudo ip rule add from IP_ADDRESS/PREFIX_LENGTH table ROUTE_TABLE_NAME sudo ip rule add to IP_ADDRESS/PREFIX_LENGTH table ROUTE_TABLE_NAME
次のように置き換えます。
IP_ADDRESS
: インターフェースに構成された内部 IP アドレス。これは、サンプル構成の10.10.2.3
に対応します。PREFIX_LENGTH
: 構成された IP アドレスの接頭辞の長さ。ROUTE_TABLE_NAME
: ルートテーブルの名前。
次のコマンドを実行して、キャッシュ ルートテーブルからすべてのエントリを削除します。先ほど構成したルーティング テーブルで既存の VM を使用している場合は、これが必要になる場合があります。
sudo ip route flush cache
マルチ NIC VM への接続を再テストする
次の表に、ポリシー ルーティングを構成した後に ping を正常に実行できるシナリオを示します。VM の nic1 インターフェースに ping を実行する手順を繰り返して、両方の IP アドレスに ping を正常に実行できるようになったことを確認します。
送信者 | 送信先 | ping successful |
---|---|---|
同じネットワーク(ただし、multi-nic-vm の nic0 インターフェースとはサブネットが異なる)にある VM(test-vm-1 ) |
multi-nic-vm の nic0 インターフェースの内部 IP アドレス(10.10.1.3 ) |
|
同じネットワーク(ただし、multi-nic-vm の nic1 インターフェースとはサブネットが異なる)にある VM(test-vm-2 ) |
multi-nic-vm の nic1 インターフェースの内部 IP アドレス(10.10.2.3 ) |
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
リソースを個別に削除する
プロジェクト全体を削除しない場合は、チュートリアル用に作成した VPC ネットワークと VM インスタンスを削除します。
ネットワークを削除するにはまず、すべてのサブネット内のすべてのリソースと、ネットワークを参照しているすべてのリソースを削除する必要があります。
インスタンスを削除する
インスタンスを削除するには:
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
削除するインスタンスにチェックマークを付けます。
[削除] ボタンをクリックします。
gcloud
gcloud compute instances delete
コマンドを使用します。この方法でインスタンスを削除すると、インスタンスがシャットダウンしてインスタンスのリストから削除されます。また、永続ディスクや静的 IP アドレスなどインスタンスに接続されたすべてのリソースが解除されます。
インスタンスを削除するには、次のコマンドを使用します。
gcloud compute instances delete example-instance [example-instance-2 example-instance-3..]
VPC ネットワークの削除
VPC ネットワークを削除するには:
コンソール
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
VPC ネットワークの名前をクリックして、[VPC ネットワークの詳細] ページを表示します。
[VPC ネットワークを削除] をクリックします。
表示されたメッセージで、[削除] をクリックして確定します。
gcloud
networks delete
コマンドを使用します。
gcloud compute networks delete NETWORK
NETWORK
は、削除するネットワークの名前に置き換えます。
次のステップ
- 複数のネットワーク インターフェースの概要を確認する。
- 複数のネットワーク インターフェースを持つ VM を作成するを確認する。