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 間の Private NAT
必要なもの
- GCP VPC ネットワークに関する知識
- Cloud Router と BGP ルーティングに関する知識
- 2 つの個別の GCP プロジェクト
- この Codelab には 5 つの VPC が必要です。これらの VPC の 1 つを NCC ハブとは別のプロジェクトに配置する必要があります。
- 割り当て: ネットワークを確認し、必要に応じて追加のネットワークをリクエストします。以下のスクリーンショットをご覧ください。
目標
- GCP 環境を設定する
- VPC をスポークとして Network Connectivity Center を構成する
- データパスの検証
- NCC の Serviceability 機能の詳細
- 使用済みのリソースをクリーンアップする
始める前に
Google Cloud コンソールと Cloud Shell
このラボでは、GCP とやり取りするために Google Cloud コンソールと Cloud Shell の両方を使用します。
NCC ハブ プロジェクト Google Cloud コンソール
Cloud コンソールには https://console.cloud.google.com からアクセスできます。
Google Cloud で次の項目を設定すると、Network Connectivity Center を簡単に構成できます。
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
Cloud Shell を起動します。この Codelab では、Cloud Shell での gcloud 構成の実装に役立つ $variables を使用します。
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 ハブを構成します。NCC ハブは、各 VPC スポーク間のルーティング構成を構築するコントロール プレーンとして機能します。
API サービスを有効にする
Network Connectivity 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 ハブに、データ接続を作成するためのコントロール プレーンを定義するルーティング テーブルが導入されました。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 ハブのデフォルトのルーティング テーブルの内容を一覧表示します。注* スポークが使用できるようになるまで、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」を使用して、/25 サブネットのペアをハブ ルーティング テーブルへのインポートから除外します。特定の範囲から /24 サマリー ルートをフィルタする
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 ハブのデフォルトのルーティング テーブルの内容を一覧表示します。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 は両方とも同じ IP サブネット 10.3.3.0/24 でセットアップされています。
エクスポートの除外による重複する 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 ハブのデフォルトのルーティング テーブルの内容を一覧表示し、出力を調べます。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
VPC2 と VPC3 の重複する IP 範囲は除外されます。NCC ハブ ルーティング テーブルは、プライベートで使用されるパブリック IP アドレス(PUPI)を除く、すべての有効な IPv4 有効範囲タイプをサポートします。
5. クロス プロジェクト スポークを備えた NCC
概要
ここまでで、ハブと同じプロジェクトに属する NCC スポークを構成しました。このセクションでは、gcloud コマンドを使用して VPC を NCC ハブ以外の別のプロジェクトの NCC スポークとして構成します。
これにより、独自の VPC を管理しているプロジェクト オーナーは NCC ハブとのネットワーク接続に参加できます。
プロジェクト間: Google Cloud コンソールと Cloud Shell
このラボでは、GCP とやり取りするために Google Cloud コンソールと Cloud Shell の両方を使用します。
クロス プロジェクト スポーク Google Cloud コンソール
Cloud コンソールには https://console.cloud.google.com からアクセスできます。
Google Cloud で次の項目を設定すると、Network Connectivity Center を簡単に構成できます。
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
Cloud Shell を起動します。この Codelab では、Cloud Shell での gcloud 構成の実装に役立つ $variables を使用します。
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 ハブ URI を検索します。次のステップで、プロジェクト間の NCC スポークを構成するために URI パスが必要になります。
gcloud network-connectivity hubs describe ncc-hub
クロス プロジェクト スポーク VPC
VPC が NCC ハブ プロジェクトの一部ではない他のプロジェクトにログインします。Cloud Shell でこのコマンドを使用して、VPC を NCC スポークとして構成します。
- HUB_URI は、別のプロジェクト内のハブの URI にする必要があります。
- VPC_URI は、スポークと同じプロジェクトに存在する必要があります
- VPC ネットワークでは、このクロス プロジェクト内の 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 間で重複するサブネット範囲に対して Private NAT を構成します。VPC 間のプライベート 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 を実行するようにクラウド ルーターを構成します。以下の構成例では、「duplicate-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 範囲のプールと変換される特定のサブネットを作成しました。このステップでは、NAT ルール「1」を作成します。宛先ネットワークが NCC ハブ ルーティング テーブルからパスを取得する場合に、重複するサブネット範囲からのトラフィックに一致するネットワーク パケットを変換します。
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 の執筆時点では、Private NAT は ICMP パケットをサポートしていません。SSH セッションを「pNat-vm-vpc2」に接続し、以下のように 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. データパスの接続を確認する
図を参照して、各仮想マシン間のデータパスを確認します。
SSH で「vm1-vpc1-ncc」に接続し、TCP ダンプを開始して「」からの ICMP パケットをトレースvm2-vpc2-ncc」に変更します。この VM は VPC2 に存在することを思い出してください。
vm1-vpc1-ncc
sudo tcpdump -i any icmp -v -e -n
vm1-vpc2-ncc と ping への SSH セッションを確立します「vm1-vpc1-ncc」の IP アドレス。
vm1-vpc2-ncc
ping 10.1.1.2
vm1-vpc2-ncc と ping への SSH を確立します「vm1-vpc4-ncc」の IP アドレス。
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 間の Private NAT
次のステップ
©Google, LLC,またはその関連会社All rights reserved. Do not distribute.