1. はじめに
概要
このラボでは、Network Connectivity Center(NCC)を使用して、VPC スポークのサポートを通じて VPC 間の大規模な接続を確立する方法について説明します。VPC を VPC スポークとして定義すると、NCC ハブを介して複数の VPC ネットワークに接続できます。VPC スポーク構成の NCC では、一元化された接続管理モデルを使用する代わりに、VPC ピアリングを介してペア単位の VPC 間接続を管理する運用上の複雑さが軽減されます。
Network Connectivity Center(NCC)は、Google Cloud でのネットワーク接続管理のためのハブアンドスポーク コントロール プレーン モデルです。ハブリソースは、スポークを相互接続するための一元化された接続管理モデルを提供します。
作成するアプリの概要
この Codelab では、3 つの異なる VPC にわたるフルメッシュ VPC 接続ファブリックを実装する NCC ハブを使用して、論理的なハブ アンド スポーク トポロジを構築します。
学習内容
- NCC を使用したフルメッシュ VPC 接続
- VPC 間の限定公開 NAT
必要なもの
- GCP VPC ネットワークの知識
- Cloud Router と BGP ルーティングに関する知識
- 2 つの個別の GCP プロジェクト
- この Codelab では 5 つの VPC が必要です。これらの VPC の 1 つは、NCC ハブとは別のプロジェクトに存在する必要があります。
- [割り当て: ネットワーク] を確認し、必要に応じてネットワークを追加リクエストします(下のスクリーンショットをご覧ください)。
目標
- GCP 環境を設定する
- VPC をスポークとして使用して Network Connectivity Center を構成する
- データパスを検証する
- NCC の保守性機能を確認する
- 使用済みリソースをクリーンアップする
始める前に
Google Cloud コンソールと Cloud Shell
このラボでは、GCP を操作するために、Google Cloud コンソールと Cloud Shell の両方を使用します。
NCC Hub プロジェクト Google Cloud コンソール
Cloud コンソールには、https://console.cloud.google.com からアクセスできます。
Google Cloud で次の項目を設定すると、ネットワーク接続センターを簡単に構成できます。
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
Cloud Shell を起動します。この Codelab では、$variables を使用して、Cloud Shell での gcloud 構成の実装を支援します。
gcloud auth list
gcloud config list project
gcloud config set project [HUB-PROJECT-NAME]
projectname=[HUB-PROJECT-NAME]
echo $projectname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
IAM ロール
NCC では、特定の API にアクセスするために IAM ロールが必要です。必要に応じて、NCC IAM ロールを持つユーザーを構成してください。
役割/説明 | 権限 |
networkconnectivity.networkAdmin - ネットワーク管理者がハブとスポークを管理できるようにします。 | networkconnectivity.hubs.networkconnectivity.spokes. |
networkconnectivity.networkSpokeManager - ハブ内のスポークの追加と管理を可能にします。ホスト プロジェクトがハブを所有し、他のプロジェクトの他の管理者がハブへのアタッチメント用のスポークを追加できる共有 VPC で使用します。 | networkconnectivity.spokes.** |
networkconnectivity.networkUsernetworkconnectivity.networkViewer - ネットワーク ユーザーがハブとスポークのさまざまな属性を表示できるようにします。 | networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList |
2. ネットワーク環境を設定する
概要
このセクションでは、VPC ネットワークとファイアウォール ルールを単一のプロジェクトにデプロイします。次の論理図は、この手順で設定するネットワーク環境を示しています。
プロジェクト間のスポークのサポートを示すために、後で別のプロジェクトに VPC とファイアウォール ルールをデプロイします。
VPC とサブネットを作成する
VPC ネットワークには、データパス検証用に GCE VM をインストールするサブネットが含まれています。
gcloud compute networks create vpc1-ncc --subnet-mode custom
gcloud compute networks create vpc2-ncc --subnet-mode custom
gcloud compute networks create vpc3-ncc --subnet-mode custom
gcloud compute networks create vpc4-ncc --subnet-mode custom
gcloud compute networks subnets create vpc1-ncc-subnet1 \
--network vpc1-ncc --range 10.1.1.0/24 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet2 \
--network vpc1-ncc --range 10.1.2.0/25 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet3 \
--network vpc1-ncc --range 10.1.2.128/25 --region us-central1
gcloud compute networks subnets create vpc2-ncc-subnet1 \
--network vpc2-ncc --range 10.2.2.0/24 --region us-central1
VPC でサポートされているサブネット範囲
NCC は、プライベートで使用されるパブリック IP アドレスを除く、有効な IPv4 サブネット範囲をすべてサポートしています。この手順では、ハブ ルート テーブルにインポートする有効な IP 範囲を VPC4 に作成します。
gcloud compute networks subnets create benchmark-testing-rfc2544 \
--network vpc4-ncc --range 198.18.0.0/15 --region us-east1
gcloud compute networks subnets create class-e-rfc5735 \
--network vpc4-ncc --range 240.0.0.0/4 --region us-east1
gcloud compute networks subnets create ietf-protcol-assignment-rfc6890 \
--network vpc4-ncc --range 192.0.0.0/24 --region us-east1
gcloud compute networks subnets create ipv6-4-relay-rfc7526 \
--network vpc4-ncc --range 192.88.99.0/24 --region us-east1
gcloud compute networks subnets create pupi \
--network vpc4-ncc --range 50.50.50.0/24 --region us-east1
gcloud compute networks subnets create test-net-1-rfc5737 \
--network vpc4-ncc --range 192.0.2.0/24 --region us-east1
gcloud compute networks subnets create test-net-2-rfc5737 \
--network vpc4-ncc --range 198.51.100.0/24 --region us-east1
gcloud compute networks subnets create test-net-3-rfc5737 \
--network vpc4-ncc --range 203.0.113.0/24 --region us-east1
重複するサブネット範囲を作成する
NCC は、重複する IP 範囲をハブ ルート テーブルにインポートしません。この制限は後で回避します。現時点では、VPC2 と VPC3 に重複する 2 つの IP 範囲を作成します。
gcloud compute networks subnets create overlapping-vpc2 \
--network vpc3-ncc --range 10.3.3.0/24 --region us-central1
gcloud compute networks subnets create overlapping-vpc3 \
--network vpc2-ncc --range 10.3.3.0/24 --region us-central1
VPC ファイアウォール ルールを構成する
次のトラフィックを許可するように、各 VPC でファイアウォール ルールを構成します。
- SSH
- 内部 IAP
- 10.0.0.0/8 範囲
gcloud compute firewall-rules create ncc1-vpc-internal \
--network vpc1-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc2-vpc-internal \
--network vpc2-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc3-vpc-internal \
--network vpc3-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc4-vpc-internal \
--network vpc4-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc1-vpc-iap \
--network vpc1-ncc \
--allow all \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc2-vpc-iap \
--network vpc2-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc3-vpc-iap \
--network vpc3-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc4-vpc-iap \
--network vpc4-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
各 VPC で GCE VM を構成する
「vm1-vpc1-ncc」にパッケージをインストールするには、一時的にインターネットにアクセスする必要があります。
4 つの仮想マシンを作成し、各 VM を前に作成した VPC のいずれかに割り当てます。
gcloud compute instances create vm1-vpc1-ncc \
--subnet vpc1-ncc-subnet1 \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
apt-get install tcpdump -y
service apache2 restart
echo "
<h3>Web Server: www-vm1</h3>" | tee /var/www/html/index.html'
gcloud compute instances create vm2-vpc2-ncc \
--zone us-central1-a \
--subnet vpc2-ncc-subnet1 \
--no-address
gcloud compute instances create pnat-vm-vpc2 \
--zone us-central1-a \
--subnet overlapping-vpc3 \
--no-address
gcloud compute instances create vm1-vpc4-ncc \
--zone us-east1-b \
--subnet class-e-rfc5735 \
--no-address
3. Network Connectivity Center ハブ
概要
このセクションでは、gcloud コマンドを使用して NCC Hub を構成します。NCC ハブは、各 VPC スポーク間のルーティング構成の構築を担当するコントロール プレーンとして機能します。
API サービスを有効にする
ネットワーク接続 API がまだ有効になっていない場合は、有効にします。
gcloud services enable networkconnectivity.googleapis.com
NCC ハブを作成する
gcloud コマンドを使用して NCC ハブを作成する
gcloud network-connectivity hubs create ncc-hub
出力例
Create request issued for: [ncc-hub]
Waiting for operation [projects/user-3p-dev/locations/global/operations/operation-1668793629598-5edc24b7ee3ce-dd4c765b-5ca79556] to complete...done.
Created hub [ncc-hub]
新しく作成した NCC ハブを記述します。名前と関連付けられたパスをメモします。
gcloud network-connectivity hubs describe ncc-hub
gcloud network-connectivity hubs describe ncc-hub
createTime: '2023-11-02T02:28:34.890423230Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub
routeTables:
- projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uniqueId: de749c4c-0ef8-4888-8622-1ea2d67450f8
updateTime: '2023-11-02T02:28:48.613853463Z'
NCC Hub では、データ接続の作成に使用するコントロール プレーンを定義するルーティング テーブルが導入されました。NCC ハブのルーティング テーブルの名前を確認する
gcloud network-connectivity hubs route-tables list --hub=ncc-hub
NAME: default
HUB: ncc-hub
DESCRIPTION:
NCC デフォルトのルートテーブルの URI を確認します。
gcloud network-connectivity hubs route-tables describe default --hub=ncc-hub
createTime: '2023-02-24T17:32:58.786269098Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uid: eb1fdc35-2209-46f3-a8d6-ad7245bfae0b
updateTime: '2023-02-24T17:33:01.852456186Z'
NCC Hub のデフォルトのルーティング テーブルの内容を一覧表示します。注* スポークが作成されるまで、NCC ハブのルート テーブルは空になります。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
NCC ハブのルート テーブルは空にする必要があります。
4. VPC スポークを使用した NCC
概要
このセクションでは、gcloud コマンドを使用して 3 つの VPC を NCC スポークとして構成します。
VPC を NCC スポークとして構成する
次の VPC を NCC スポークとして次のように構成します。
- VPC4
- VPC1
- VPC2
- VPC3
VPC4 を NCC スポークとして構成し、前に作成した NCC ハブに割り当てます。NCC スポーク API 呼び出しでは、位置情報を指定する必要があります。フラグ「–global」を使用すると、新しい NCC スポークを構成するときに URI パス全体を指定する必要がないため、gcloud 構文が簡素化されます。
gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global
VPC1 を NCC スポークとして構成します。
管理者は、サブネット ルートを VPC スポークから NCC ハブのルートテーブルにエクスポートしないように除外できます。この Codelab のパートでは、サマリー プレフィックスに基づいて除外エクスポート ルールを作成し、VPC1 のサブネットが NCC ハブ ルート テーブルにエクスポートされないようにします。
この gcloud コマンドを使用して、VPC1 に属するすべてのサブネットを一覧表示します。
gcloud config set accessibility/screen_reader false
gcloud compute networks subnets list --network=vpc1-ncc
設定セクションで作成した /25 サブネットのペアを確認します。
NAME REGION NETWORK RANGE STACK_TYPE
vpc1-ncc-subnet1 us-central1 vpc1-ncc 10.1.1.0/24 IPV4_ONLY
vpc1-ncc-subnet2 us-central1 vpc1-ncc 10.1.2.0/25 IPV4_ONLY
vpc1-ncc-subnet3 us-central1 vpc1-ncc 10.1.2.128/25 IPV4_ONLY
VPC1 を NCC スポークとして構成し、「export-exclude-ranges」キーワードを使用して、その特定の範囲から /24 サマリー ルートをフィルタリングし、/25 サブネットのペアをハブ ルーティング テーブルへのインポートから除外します。
gcloud network-connectivity spokes linked-vpc-network create vpc1-spoke1 \
--hub=ncc-hub \
--vpc-network=vpc1-ncc \
--exclude-export-ranges=10.1.2.0/24 \
--global
注* ユーザーは、NCC スポークごとに最大 16 個の固有の IP 範囲をフィルタできます。
NCC Hub のデフォルトのルーティング テーブルの内容を一覧表示します。NCC ハブのルーティング テーブルの /25 サブネットのペアはどうなりますか?
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default --filter="NEXT_HOP:vpc1-ncc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.1.1.0/24 ACTIVE VPC_PRIMARY_SUBNET vpc1-ncc ncc-hub default
VPC2 を NCC スポークとして構成する
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--global
VPC3 を NCC スポークとして構成し、前に作成した NCC ハブに割り当てます。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--global
なぜですか?
ERROR: (gcloud.network-connectivity.spokes.linked-vpc-network.create) Invalid resource state for "https://www.googleapis.com/compute/v1/projects/xxxxxxxx/global/networks/vpc3-ncc": 10.3.3.0/24 (SUBNETWORK) overlaps with 10.3.3.0/24 (SUBNETWORK) from "projects/user-3p-dev/global/networks/vpc2-ncc" (peer)
NCC ハブは、VPC2 と重複する IP 範囲を検出しました。VPC2 と VPC3 はどちらも同じ 10.3.3.0/24 IP サブネットで設定されています。
除外エクスポートを使用して重複する IP 範囲をフィルタする
この Codelab の執筆時点では、エクスポート フィルタの構成を変更するために NCC スポークを削除して再作成する必要があるという既知の問題があります。
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
注: 特定の VPC に関連付けられた VPC スポークを削除した後、同じ VPC を参照する新しいスポークを再作成するには、10 分間のクールダウン期間が経過する必要があります。
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
VPC3 を NCC スポークとして構成し、前に作成した NCC ハブに割り当てます。VPC3 をスポークとして NCC に追加するこの試行は成功するはずです。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
NCC Hub のデフォルト ルーティング テーブルの内容を一覧表示して、出力を確認します。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
VPC2 と VPC3 の重複する IP 範囲は除外されます。NCC Hub ルーティング テーブルは、限定公開で使用されるパブリック IP アドレス(PUPI)を除く、有効な IPv4 有効範囲のタイプをすべてサポートしています。
5. プロジェクト間のスポークを使用した NCC
概要
ここまでは、ハブと同じプロジェクトに属する NCC スポークを構成しました。このセクションでは、gcloud コマンドを使用して、NCC ハブ以外の別のプロジェクトから VPC を NCC スポークとして構成します。
これにより、独自の VPC を管理しているプロジェクト オーナーは、NCC Hub とのネットワーク接続に参加できます。
プロジェクト間: Google Cloud コンソールと Cloud Shell
このラボでは、GCP を操作するために、Google Cloud コンソールと Cloud Shell の両方を使用します。
プロジェクト間のスポークの Google Cloud コンソール
Cloud コンソールには、https://console.cloud.google.com からアクセスできます。
Google Cloud で次の項目を設定すると、ネットワーク接続センターを簡単に構成できます。
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
Cloud Shell を起動します。この Codelab では、$variables を使用して、Cloud Shell での gcloud 構成の実装を支援します。
gcloud auth list
gcloud config list project
gcloud config set project [YOUR-CROSSPROJECT-NAME]
xprojname=[YOUR-CROSSPROJECT-NAME]
echo $xprojname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
IAM ロール
NCC では、特定の API にアクセスするために IAM ロールが必要です。必要に応じて、NCC IAM ロールを持つユーザーを構成してください。
少なくとも、クロス プロジェクト スポーク管理者には IAM ロール「networkconnectivity.networkSpokeManager」を付与する必要があります。」
次の表に、NCC ハブとスポークの管理に必要な IAM ロールを示します。
役割/説明 | 権限 |
networkconnectivity.networkAdmin - ネットワーク管理者がハブとスポークを管理できるようにします。 | networkconnectivity.hubs.networkconnectivity.spokes. |
networkconnectivity.networkSpokeManager - ハブ内のスポークの追加と管理を可能にします。ホスト プロジェクトがハブを所有し、他のプロジェクトの他の管理者がハブへのアタッチメント用のスポークを追加できる共有 VPC で使用します。 | networkconnectivity.spokes.** |
networkconnectivity.networkUsernetworkconnectivity.networkViewer - ネットワーク ユーザーがハブとスポークのさまざまな属性を表示できるようにします。 | networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList |
クロス プロジェクトに VPC とサブネットを作成する
VPC ネットワークには、データパス検証用に GCE VM をインストールするサブネットが含まれています。
gcloud compute networks create xproject-vpc \
--subnet-mode custom
gcloud compute networks subnets create xprj-net-1 \
--network xproject-vpc \
--range 10.100.1.0/24 \
--region us-central1
NCC ハブ プロジェクトの URI
この gcloud コマンドを使用して、NCC Hub URI を確認します。次のステップでクロス プロジェクト NCC スポークを構成する際に、この URI パスが必要になります。
gcloud network-connectivity hubs describe ncc-hub
プロジェクト間のスポーク VPC
VPC が NCC ハブ プロジェクトに含まれていない他のプロジェクトにログインします。Cloud Shell で、次のコマンドを使用して VPC を NCC スポークとして構成します。
- HUB_URI は、別のプロジェクトのハブの URI にする必要があります。
- VPC_URI は、スポークと同じプロジェクトに存在する必要があります。
- VPC-network は、このクロス プロジェクト内の VPC が別のプロジェクトの NCC ハブに参加することを指定します。
gcloud network-connectivity spokes linked-vpc-network create xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--vpc-network=xproject-vpc
.
Create request issued for: [xproj-spoke]
Waiting for operation [projects/xproject/locations/global/operations/operation-1689790411247-600dafd351158-2b862329-19b747f1] to complete...done.
Created spoke [xproj-spoke].
createTime: '2023-07-19T18:13:31.388500663Z'
hub: projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub
linkedVpcNetwork:
uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/xproject-vpc
name: projects/xproject/locations/global/spokes/xproj-spoke
reasons:
- code: PENDING_REVIEW
message: Spoke is Pending Review
spokeType: VPC_NETWORK
state: INACTIVE
uniqueId: 46b4d091-89e2-4760-a15d-c244dcb7ad69
updateTime: '2023-07-19T18:13:38.652800902Z'
プロジェクト間の NCC スポークの状態はどうなっていますか?理由
6. プロジェクト間のスポークの拒否または承認
概要
NCC ハブ管理者は、ハブに参加するプロジェクト間のスポークを明示的に承認する必要があります。これにより、プロジェクト オーナーが不正な NCC スポークを NCC グローバル ルーティング テーブルに接続できなくなります。スポークを承認または拒否した後、上記のコマンドを実行すると、スポークを拒否または承認する操作を何度でも行えます。
Cloud Shell にログインして、NCC ハブが配置されているプロジェクトに戻ります。
確認するプロジェクト間のスポークを特定する
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="reason:PENDING_REVIEW"
スポークを承認する
gcloud network-connectivity spokes accept xproj-spoke --global
省略可: スポークの拒否
gcloud network-connectivity spokes reject xproj-spoke \
--global \
--details="some reason to reject"
ハブでアクティブなスポークを一覧表示する
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="state:ACTIVE"
NAME PROJECT LOCATION TYPE STATE STATE REASON
Xproj-spoke xproj global VPC_NETWORK ACTIVE
vpc4-spoke4 user-3p-dev global VPC_NETWORK ACTIVE
vpc1-spoke1 user-3p-dev global VPC_NETWORK ACTIVE
vpc2-spoke2 user-3p-dev global VPC_NETWORK ACTIVE
vpc3-spoke3 user-3p-dev global VPC_NETWORK ACTIVE
ハブのサブネット ルートを一覧表示する
出力から、クロス VPC スポークのサブネット ルートを確認できますか?
gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:xprj-vpc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.100.0.0/16 ACTIVE VPC_PRIMARY_SUBNET xprj-vpc ncc-hub default
7. VPC 間の Private NAT
概要
このセクションでは、2 つの VPC 間で重複するサブネット範囲にプライベート NAT を構成します。VPC 間の Private NAT には NCC が必要です。
前のセクションでは、VPC2 と VPC3 が重複するサブネット範囲「10.3.3.0/24」で構成されています。両方の VPC は NCC スポークとして構成され、重複するサブネットが NCC ハブ ルート テーブルに挿入されないようにします。つまり、そのサブネットに存在するホストに到達するレイヤ 3 データパスはありません。
NCC ハブ プロジェクトで次のコマンドを使用して、重複するサブネット範囲を確認します。
gcloud compute networks subnets list --network vpc2-ncc
gcloud compute networks subnets list --network vpc3-ncc
vpc2-ncc で、重複する IP 範囲を含むサブネット名は何ですか。
*サブネット名をメモして保存します。この範囲にソース NAT を構成します。
Private NAT を構成する
VPC2 の重複するサブネットからの送信元 NAT トラフィックにルーティング可能なサブネット範囲を専用にします。「–purpose=PRIVATE_NAT」フラグを使用して、重複しないサブネット範囲を構成します。
gcloud compute networks subnets create ncc2-spoke-nat \
--network=vpc2-ncc \
--region=us-central1 \
--range=10.10.10.0/29 \
--purpose=PRIVATE_NAT
プライベート NAT を実行する専用のクラウド ルーターを作成する
gcloud compute routers create private-nat-cr \
--network vpc2-ncc \
--region us-central1
vpc2-ncc から 10.3.3.0/24 の重複範囲をソース NAT するように Cloud Router を構成します。次の構成例では、「overlapping-vpc3」は重複するサブネットの名前です。「ALL」キーワードは、サブネット内のすべての IP 範囲が送信元 NAT されることを指定します。
gcloud compute routers nats create ncc2-nat \
--router=private-nat-cr \
--type=PRIVATE \
--nat-custom-subnet-ip-ranges=overlapping-vpc3:ALL \
--router-region=us-central1
前述の手順では、NAT IP 範囲のプールと、変換される特定のサブネットを作成しました。この手順では、宛先ネットワークが NCC ハブ ルーティング テーブルからパスを取得する場合に、重複するサブネット範囲からのトラフィックに一致するネットワーク パケットを変換する NAT ルール「1」を作成します。
gcloud compute routers nats rules create 1 \
--router=private-nat-cr \
--region=us-central1 \
--match='nexthop.hub == "//networkconnectivity.googleapis.com/projects/$projectname/locations/global/hubs/ncc-hub"' \
--source-nat-active-ranges=ncc2-spoke-nat \
--nat=ncc2-nat
Private NAT を確認する
gcloud compute routers nats describe ncc2-nat --router=private-nat-cr
出力例
enableDynamicPortAllocation: true
enableEndpointIndependentMapping: false
endpointTypes:
- ENDPOINT_TYPE_VM
name: ncc2-nat
rules:
- action:
sourceNatActiveRanges:
- https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/ncc2-spoke-nat
match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/yueri-3p-dev/locations/global/hubs/ncc-hub"
ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/overlapping-vpc3
sourceIpRangesToNat:
- ALL_IP_RANGES
type: PRIVATE
必要に応じて、
- ウェブ コンソールに切り替える
- [ネットワーク サービス] > [Cloud NAT] > [ncc2-nat] に移動します。
動的ポート割り当てがデフォルトで有効になっていることを確認します。
次に、VPC2 用に構成されたプライベート NAT パスを使用するデータパスを確認します。
vm1-vpc1-ncc への SSH セッションを開き、次の tcpdump コマンドを使用して、NAT プール範囲 10.10.10.0/29 からのパケットをキャプチャします。
vm1-vpc1-ncc
sudo tcpdump -i any net 10.10.10.0/29 -n
この Codelab の執筆時点では、プライベート NAT は ICMP パケットをサポートしていません。「pNat-vm-vpc2」に SSH セッションを開始し、curl コマンドを使用して、ポート TCP 80 で「vm1-vpc1-ncc」に接続します。
pnat-vm-vpc2
curl 10.1.1.2 -v
vm1-vpc1-ncc で tcpdump の出力を調べます。vm1-vpc1-ncc のウェブサーバーと TCP セッションを開始した送信元 IP アドレスは何ですか。
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
19:05:27.504761 ens4 In IP 10.10.10.2.1024 > 10.1.1.2:80: Flags [S], seq 2386228656, win 65320, options [mss 1420,sackOK,TS val 3955849029 ecr 0,nop,wscale 7], length 0
19:05:27.504805 ens4 Out IP 10.1.1.2:80 > 10.10.10.2.1024: Flags [S.], seq 48316785, ack 2386228657, win 64768, options [mss 1420,sackOK,TS val 1815983704 ecr 3955849029,nop,wscale 7], length 0
<output snipped>
8. データパスの接続を確認する
図を参照して、各仮想マシン間のデータパスを確認します。
「vm1-vpc1-ncc」に SSH 接続し、TCP ダンプを開始して 「vm2-vpc2-ncc」からの ICMP パケットをトレースします。この VM は VPC2 にあります。
vm1-vpc1-ncc
sudo tcpdump -i any icmp -v -e -n
「vm1-vpc2-ncc」への SSH セッションを確立し、「vm1-vpc1-ncc」の IP アドレスを「ping」します。
vm1-vpc2-ncc
ping 10.1.1.2
「vm1-vpc2-ncc」に SSH 接続し、「vm1-vpc4-ncc」の IP アドレスを「ping」します。
vm1-vpc2-ncc
ping 240.0.0.2
9. クリーンアップ
Cloud Shell にログインし、ハブサイトとブランチサイトのネットワークで VM インスタンスを削除する
限定公開 VPC NAT 構成を削除する
gcloud compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet
gcloud compute routers nats delete ncc2-nat \
--router=private-nat-cr \
--router-region=us-central1 \
--quiet
gcloud compute routers delete private-nat-cr \
--region=us-central1 \
--quiet
NCC スポークを削除する
gcloud network-connectivity spokes delete vpc1-spoke1 --global --quiet
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
gcloud network-connectivity spokes delete vpc3-spoke3 --global --quiet
gcloud network-connectivity spokes delete vpc4-spoke4 --global --quiet
プロジェクト間のスポークを拒否する
NCC ハブからプロジェクト間の VPC スポークを拒否します。
gcloud network-connectivity spokes reject projects/$xprojname/locations/global/spokes/xproj-spoke \--details="cleanup" \
--global
NCC ハブを削除する
gcloud network-connectivity hubs delete ncc-hub --quiet
ファイアウォール ルールを削除する
gcloud compute firewall-rules delete ncc1-vpc-internal --quiet
gcloud compute firewall-rules delete ncc2-vpc-internal --quiet
gcloud compute firewall-rules delete ncc3-vpc-internal --quiet
gcloud compute firewall-rules delete ncc4-vpc-internal --quiet
gcloud compute firewall-rules delete ncc1-vpc-iap --quiet
gcloud compute firewall-rules delete ncc2-vpc-iap --quiet
gcloud compute firewall-rules delete ncc3-vpc-iap --quiet
gcloud compute firewall-rules delete ncc4-vpc-iap --quiet
GCE インスタンスを削除する
gcloud compute instances delete vm1-vpc1-ncc --zone=us-central1-a --quiet
gcloud compute instances delete vm2-vpc2-ncc --zone=us-central1-a --quiet
gcloud compute instances delete pnat-vm-vpc2 --zone=us-central1-a --quiet
gcloud compute instances delete vm1-vpc4-ncc --zone=us-east1-b --quiet
VPC サブネットを削除する
gcloud compute networks subnets delete ncc2-spoke-nat --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet2 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet3 --region us-central1 --quiet
gcloud compute networks subnets delete vpc2-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc2 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc3 --region us-central1 --quiet
gcloud compute networks subnets delete benchmark-testing-rfc2544 --region us-east1 --quiet
gcloud compute networks subnets delete class-e-rfc5735 --region us-east1 --quiet
gcloud compute networks subnets delete ietf-protcol-assignment-rfc6890 --region us-east1 --quiet
gcloud compute networks subnets delete ipv6-4-relay-rfc7526 --region us-east1 --quiet
gcloud compute networks subnets delete pupi --region us-east1 --quiet
gcloud compute networks subnets delete test-net-1-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-2-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-3-rfc5737 --region us-east1 --quiet
VPC を削除する
gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc
--quiet
10. 完了
Network Connectivity Center ラボが完了しました。
学習した内容
- NCC ハブを備えたフルメッシュ VPC ピアリング ネットワークを構成する
- NCC スポーク除外フィルタ
- プロジェクト間のスポーク サポート
- VPC 間の限定公開 NAT
次のステップ
©Google, LLC or its affiliates. All rights reserved. Do not distribute.