このチュートリアルでは、安全で高スループットの VPN を作成し、その速度をテストする方法を示します。
Google Cloud と他のクラウド / オンプレミス システムとの間の安全な通信の確保は、基本的で重要な要素です。幸い Google Cloud では、この目標を達成する安全なインターネット プロトコル セキュリティ(IPsec)方式のバーチャル プライベート ネットワーク(VPN)を簡単に作成できます。必要なスループットが 1 つのトンネルで得られない場合、Google Cloud は、トラフィックを複数のトンネルにスムーズに分散して帯域幅を追加します。
目標
VPN を作成する
- VPN に適した Google Cloud プロジェクトを作成して構成します。
- Google Cloud ネットワークをシミュレートする
cloud
という名前の Virtual Private Cloud(VPC)と、外部ネットワークをシミュレートするon-prem
という名前の VPC(オンプレミス)を作成します。 cloud
VPC の VPN ゲートウェイ、転送ルール、アドレスを作成します。- 新しい VPN 用のトンネルを形成し、それを通過するようにトラフィックをルーティングします。
on-prem
VPC 用に VPN 作成プロセスを繰り返し、2 つ目の VPN を作成します。
VPN をテストする
- Compute Engine を使用して、スループット負荷テスト用の仮想マシン(VM)を作成します。
iperf
を使用して単一の VPN のスループット速度をテストします。- 同時に両方の VPN を通るようにトラフィックをルーティングし、
iperf
を使用して増加させたスループット速度をテストします。
費用
このチュートリアルでは、Google Cloud Platform の課金対象となる以下のコンポーネントを使用します。
- Compute Engine
- VPN ゲートウェイ
- 外部 IP アドレス
料金計算ツールでこのチュートリアルで発生する費用を計算すると、すべてのリソースを 1 日中使用した場合の費用はおおよそ $10.01 になります。
始める前に
-
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 Google Compute Engine API.
- Google Cloud を使用して VPN を作成する方法を確認して習得します。また、VPC ネットワークの概要も確認します。
cloud
VPC を作成する
このセクションでは、次の作業を行います。
- クラウド本番環境ネットワークをシミュレートする VPC を作成します。
- 一般的なタイプのトラフィックが VPC を通過できるようにします。
- ホストをデプロイするためのサブネットを作成します。
Cloud Shell に移動します。
Cloud Shell で、Google Cloud プロジェクトに関連付けた
cloud
という名前のカスタム VPC を作成します。この VPC では、デフォルト以外の IP アドレス指定を使用できますが、デフォルトのファイアウォール ルールは含まれていません。gcloud compute networks create cloud --subnet-mode custom
SSH
とicmp
を有効にします。これは、負荷テストの際に VM と通信するにはセキュアシェルが必要になるためです。gcloud compute firewall-rules create cloud-fw --network cloud --allow tcp:22,icmp
この VPC 内にサブネットを作成し、リージョンと IP 範囲を指定します。このソリューションでは、
10.0.1.0/24
とus-east1
リージョンを使用します。gcloud compute networks subnets create cloud-east --network cloud \ --range 10.0.1.0/24 --region us-east1
on-prem
VPC を作成する
このセクションでは、作成した on-prem
VPC のシミュレーションまたは cloud
に接続させる任意のネットワークのシミュレーションを作成します。実際には、すでにリソースは存在しますが、トンネルを作成して構成を検証する目的で、次の手順を実行します。
Google Cloud CLI を使用して、プロジェクトに関連付ける新しいカスタム サブネット VPC を作成します。新しい VPC には
on-prem
という名前を付けます。gcloud compute networks create on-prem --subnet-mode custom
on-prem
VPC 内のホストに対してSSH
とicmp
を有効にします。これは、負荷テストの際に VM と通信するにはセキュアシェルが必要になるためです。gcloud compute firewall-rules create on-prem-fw --network on-prem --allow tcp:22,icmp
リージョンのサブネット接頭辞を指定します。この例では、
192.168.1.0/24
をus-central1
リージョンに割り当てます。gcloud compute networks subnets create on-prem-central \ --network on-prem --range 192.168.1.0/24 --region us-central1
VPN ゲートウェイの作成
環境ごとに、安全な外部通信のための VPN ゲートウェイが必要です。cloud
VPC と on-prem
VPC の初期ゲートウェイを作成するには、以下の手順に従います。
on-prem
VPC とus-central1
リージョンでon-prem-gw1
という名前の VPN ゲートウェイを作成します。gcloud compute target-vpn-gateways create on-prem-gw1 --network on-prem --region us-central1
cloud
VPC とus-east1
リージョンでcloud-gw1
という名前の VPN ゲートウェイを作成します。gcloud compute target-vpn-gateways create cloud-gw1 --network cloud --region us-east1
ローカル ネットワークと Google Cloud ネットワーク間のルートベースの VPN トンネルを作成する
これで VPN ゲートウェイが作成されました。VPC 外部のシステムと通信できるように各 VPN ゲートウェイに静的外部 IP アドレスが必要になります。次の手順では、cloud
VPC と on-prem
VPC に IP アドレスとルートを作成する方法を説明します。
cloud-gw1
VPN ゲートウェイに IP を割り当てます。gcloud compute addresses create cloud-gw1 --region us-east1
on-prem-gw1
VPN ゲートウェイに IP を割り当てます。gcloud compute addresses create on-prem-gw1 --region us-central1
後のコマンドで使用する際に検索しなくてもよいように、前の手順で作成したアドレスを保存しておきます。
まず、
cloud-gw1
ゲートウェイについて次のコマンドを実行します。cloud_gw1_ip=$(gcloud compute addresses describe cloud-gw1 \ --region us-east1 --format='value(address)')
次に、
on-prem-gw1
ゲートウェイについて次のコマンドを実行します。on_prem_gw_ip=$(gcloud compute addresses describe on-prem-gw1 \ --region us-central1 --format='value(address)')
cloud
VPC で IPsec の転送ルールを作成します。両方向で転送ルールを作成する必要があります。cloud-gw1
からカプセル化セキュリティ ペイロード(ESP)プロトコルを転送します。gcloud compute forwarding-rules create cloud-1-fr-esp --ip-protocol ESP \ --address $cloud_gw1_ip --target-vpn-gateway cloud-gw1 --region us-east1
cloud-gw1
からのUDP:500
トラフィックを転送します。gcloud compute forwarding-rules create cloud-1-fr-udp500 --ip-protocol UDP \ --ports 500 --address $cloud_gw1_ip --target-vpn-gateway cloud-gw1 --region us-east1
cloud-gw1
からのUDP:4500
トラフィックを転送します。gcloud compute forwarding-rules create cloud-fr-1-udp4500 --ip-protocol UDP \ --ports 4500 --address $cloud_gw1_ip --target-vpn-gateway cloud-gw1 --region us-east1
同じようにして、
on-prem
VPC で IPsec トンネルの転送ルールを作成します。このステップにより、IPsec トンネルがファイアウォールを出られるようになります。これまでと同様に、次のプロトコルに対して実行する必要があります。on-prem-gw1
からの ESP プロトコルを転送します。gcloud compute forwarding-rules create on-prem-fr-esp --ip-protocol ESP \ --address $on_prem_gw_ip --target-vpn-gateway on-prem-gw1 --region us-central1
on-prem-gw1
から IPsec トンネルの確立に使用されるUDP:500
トラフィックを転送します。gcloud compute forwarding-rules create on-prem-fr-udp500 --ip-protocol UDP --ports 500 \ --address $on_prem_gw_ip --target-vpn-gateway on-prem-gw1 --region us-central1
on-prem-gw1
から暗号化されたトラフィックを伝送するUDP:4500
トラフィックを転送します。gcloud compute forwarding-rules create on-prem-fr-udp4500 --ip-protocol UDP --ports 4500 \ --address $on_prem_gw_ip --target-vpn-gateway on-prem-gw1 --region us-central1
シークレットを生成します。次のステップで
on-prem-tunnel1
トンネルとcloud-tunnel1
トンネルを作成して検証する際に、このシークレットを使用します。シークレットを作成して安全に保管する方法の詳細については、シークレット管理をご覧ください。生成したシークレットを使用して、ローカル ネットワーク用のトンネル
on-prem-tunnel1
と、クラウドベースのネットワーク用のトンネルcloud-tunnel1
を作成します。それぞれのネットワークに VPN ゲートウェイが必要であり、シークレットが一致する必要があります。次の 2 つのコマンドで、[MY_SECRET]
を、生成したシークレットに置き換えます。on-prem
からcloud
への VPN トンネルを作成します。gcloud compute vpn-tunnels create on-prem-tunnel1 --peer-address $cloud_gw1_ip \ --target-vpn-gateway on-prem-gw1 --ike-version 2 --local-traffic-selector 0.0.0.0/0 \ --remote-traffic-selector 0.0.0.0/0 --shared-secret=[MY_SECRET] --region us-central1
cloud
からon-prem
への VPN トンネルを作成します。gcloud compute vpn-tunnels create cloud-tunnel1 --peer-address $on_prem_gw_ip \ --target-vpn-gateway cloud-gw1 --ike-version 2 --local-traffic-selector 0.0.0.0/0 \ --remote-traffic-selector 0.0.0.0/0 --shared-secret=[MY_SECRET] --region us-east1
これで、ゲートウェイが作成されトンネルが構築されたため、2 つのトンネルを通過する、以前作成したサブネットからルートを追加する必要があります。
on-prem
VPC からcloud
10.0.1.0/24
範囲へのトラフィックをトンネルにルーティングします。gcloud compute routes create on-prem-route1 --destination-range 10.0.1.0/24 \ --network on-prem --next-hop-vpn-tunnel on-prem-tunnel1 \ --next-hop-vpn-tunnel-region us-central1
cloud
VPC からon-prem
192.168.1.0/24
範囲へのトラフィックをトンネルにルーティングします。gcloud compute routes create cloud-route1 --destination-range 192.168.1.0/24 \ --network cloud --next-hop-vpn-tunnel cloud-tunnel1 --next-hop-vpn-tunnel-region us-east1
VPN 上のスループットのテスト
この時点で、on-prem
VPC と cloud
VPC の間に安全なパスが確立されています。スループットをテストするには、iperf
を使用します。これは、ネットワーク負荷テスト用のオープンソース ツールです。それぞれの環境に VM が必要です。1 つはトラフィックの送信用で、もう 1 つはトラフィックの受信用です。
単一の VPN の負荷テスト
cloud
VPC 用の仮想マシンを作成します。名前はcloud-loadtest
とします。この例では、OS として Debian Linux イメージを使用します。既存のプロジェクトがある場合は、このステップを省略して既存のリソースを使用できます。VM の帯域幅は 2 Gbps x vCPU のため、最低 4 つの vCPU が必要になるのでご注意ください。gcloud compute instances create "cloud-loadtest" --zone "us-east1-b" \ --machine-type "n1-standard-4" --subnet "cloud-east" \ --image-family "debian-9" --image-project "debian-cloud" --boot-disk-size "10" \ --boot-disk-type "pd-standard" --boot-disk-device-name "cloud-loadtest"
on-prem
VPC 用の仮想マシンを作成します。この例ではcloud
VPC と同じ Debian イメージを使用しています。既存のリソースがある場合はこのステップを省略します。この例では、名前をon-prem-loadtest
とします。gcloud compute instances create "on-prem-loadtest" --zone "us-central1-a" \ --machine-type "n1-standard-4" --subnet "on-prem-central" \ --image-family "debian-9" --image-project "debian-cloud" --boot-disk-size "10" \ --boot-disk-type "pd-standard" --boot-disk-device-name "on-prem-loadtest"
on-prem
ネットワークのファイアウォールで TCP ポート5001
を開き、iperf
リクエストを受け入れます。gcloud compute firewall-rules create on-prem-iperf-fw --network on-prem --allow tcp:5001
SSH
を使用して、それぞれの VM に接続し、iperf
のコピーをインストールします。Debian にiperf
をインストールするには、次のコマンドラインを使用します。sudo apt-get install iperf
on-prem-loadtest
VM で、次のコマンドを実行します。iperf -s -i 5 -p 5001
5 秒ごとにステータスを報告する
iperf
サーバーが VM 上に作成されます。cloud-loadtest
VM で、次のコマンドを実行します。iperf -c 192.168.1.2 -P 20 -x C -p 5001
20 のストリームがある iperf
クライアントが 1 つ作成されます。テストの 10 秒後に値が報告されます。
[SUM]
スループット値に注目してください。トラフィックにとって十分な結果が得られた場合は、ここで終わることができます。ただし、追加のスループットが必要な場合は、追加のトンネルを作成して使用する必要があります。
複数の VPN の負荷テスト
ルートが一致する場合は、Google Cloud VPN ゲートウェイがフロー単位の等価コスト マルチパス ルーティング(ECMP)を実行して複数のトンネル全体でロードバランスし、より高い集約スループットを実現します。負荷分散がフロー単位で行われるため、単一のフローではメリットがありませんが、複数のフローではメリットがあります。
cloud-gw1
と同じリージョンに、cloud-gw2
という名前のcloud
VPN ゲートウェイを追加で作成します。gcloud compute target-vpn-gateways create cloud-gw2 --network cloud --region us-east1
cloud-gw2
のアドレスを作成します。gcloud compute addresses create cloud-gw2 --region us-east1
cloud-gw2
のアドレスを保存します。cloud_gw2_ip=$(gcloud compute addresses describe cloud-gw2 \ --region us-east1 --format='value(address)')
cloud-gw2
で転送ルールを作成します。gcloud compute forwarding-rules create cloud-2-fr-esp --ip-protocol ESP \ --address $cloud_gw2_ip --target-vpn-gateway cloud-gw2 --region us-east1
gcloud compute forwarding-rules create cloud-2-fr-udp500 --ip-protocol UDP --ports 500 \ --address $cloud_gw2_ip --target-vpn-gateway cloud-gw2 --region us-east1
gcloud compute forwarding-rules create cloud-fr-2-udp4500 --ip-protocol UDP --ports 4500 \ --address $cloud_gw2_ip --target-vpn-gateway cloud-gw2 --region us-east1
on-prem
からcloud-gw2
へのトンネルを作成します。[MY_SECRET]
は、生成したシークレットで置き換えます。gcloud compute vpn-tunnels create on-prem-tunnel2 --peer-address $cloud_gw2_ip \ --target-vpn-gateway on-prem-gw1 --ike-version 2 --local-traffic-selector 0.0.0.0/0 \ --remote-traffic-selector 0.0.0.0/0 --shared-secret=[MY_SECRET] --region us-central1
cloud-gw2
からon-prem
へのトンネルを作成します。[MY_SECRET]
は、生成したシークレットで置き換えます。gcloud compute vpn-tunnels create cloud-tunnel2 --peer-address $on_prem_gw_ip \ --target-vpn-gateway cloud-gw2 --ike-version 2 --local-traffic-selector 0.0.0.0/0 \ --remote-traffic-selector 0.0.0.0/0 --shared-secret=[MY_SECRET] --region us-east1
on-prem
からcloud-gw2
にルーティングします。gcloud compute routes create on-prem-route2 --destination-range 10.0.1.0/24 --network on-prem \ --next-hop-vpn-tunnel on-prem-tunnel2 --next-hop-vpn-tunnel-region us-central1
cloud-gw2
からon-prem
にルーティングします。gcloud compute routes create cloud-route2 --destination-range 192.168.1.0/24 \ --network cloud --next-hop-vpn-tunnel cloud-tunnel2 --next-hop-vpn-tunnel-region us-east1
同じルートを持つ 2 つのトンネル(cloud-tunnel1
と cloud-tunnel2
)が作成されました。トラフィックは自動的にそれらのトンネル間で負荷分散されます。
VPN 上のスループットの再テスト
iperf
を使用してネットワークの速度を再テストします。iperf -c 192.168.1.2 -P 20 -x C
スループット値がシングルトンネル テストの場合よりもどれだけ大きいか注目してください。
また、等価コスト マルチパス ルーティング VPN トンネルの制限が 2 ではなく、同じリージョン内でトンネルを終端する必要がないことにも注意してください。
規模を大きくする場合は、このプロセスを無期限に繰り返すことができます。また、信頼性を向上させるために、これらのトンネルを別のリージョン サブネットで開始または終端することができます。
クリーンアップ
このチュートリアルで使用したリソースについて、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.
次のステップ
- Cloud Router を確認して、Border Gateway Protocol(BGP)を有効にし、フォールト トレラントを強化する。
- Cloud Interconnect で他の相互接続オプションを確認する。
- Cloud Monitoring を使用して VPN ゲートウェイをモニタリングする。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center をご覧ください。