高スループット VPN の構築

このチュートリアルでは、安全で高スループットの 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 の課金対象となる以下のコンポーネントを使用します。

料金計算ツールでこのチュートリアルで発生する費用を計算すると、すべてのリソースを 1 日中使用した場合の費用はおおよそ $10.01 になります。

始める前に

  1. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  3. Google Compute Engine API を有効にします。

    API を有効にする

  4. Google Cloud を使用して VPN を作成する方法を確認して習得します。また、VPC ネットワークの概要も確認します。

cloud VPC を作成する

このセクションでは、次の作業を行います。

  • クラウド本番環境ネットワークをシミュレートする VPC を作成します。
  • 一般的なタイプのトラフィックが VPC を通過できるようにします。
  • ホストをデプロイするためのサブネットを作成します。

  1. Cloud Shell に移動します。

    Cloud Shell を開く

  2. Cloud Shell で、Google Cloud プロジェクトに関連付けた cloud という名前のカスタム VPC を作成します。この VPC では、デフォルト以外の IP アドレス指定を使用できますが、デフォルトのファイアウォール ルールは含まれていません。

    gcloud compute networks create cloud --subnet-mode custom
    
  3. SSHicmp を有効にします。これは、負荷テストの際に VM と通信するにはセキュアシェルが必要になるためです。

    gcloud compute firewall-rules create cloud-fw --network cloud --allow tcp:22,icmp
    
  4. この VPC 内にサブネットを作成し、リージョンと IP 範囲を指定します。このソリューションでは、10.0.1.0/24us-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 に接続させる任意のネットワークのシミュレーションを作成します。実際には、すでにリソースは存在しますが、トンネルを作成して構成を検証する目的で、次の手順を実行します。

  1. gcloud コマンドライン ツールを使用して、プロジェクトに関連付けた新しいカスタム VPC を作成します。新しい VPC には on-prem という名前を付けます。

    gcloud compute networks create on-prem --subnet-mode custom
    
  2. on-prem VPC 内のホストに対して SSHicmp を有効にします。これは、負荷テストの際に VM と通信するにはセキュアシェルが必要になるためです。

    gcloud compute firewall-rules create on-prem-fw --network on-prem --allow tcp:22,icmp
    
  3. リージョンのサブネット接頭辞を指定します。この例では、192.168.1.0/24us-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 の初期ゲートウェイを作成するには、以下の手順に従います。

  1. on-prem VPC と us-central1 リージョンで on-prem-gw1 という名前の VPN ゲートウェイを作成します。

    gcloud compute target-vpn-gateways create on-prem-gw1 --network on-prem --region us-central1
    
  2. 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 アドレスとルートを作成する方法を説明します。

  1. cloud-gw1 VPN ゲートウェイに IP を割り当てます。

    gcloud compute addresses create cloud-gw1 --region us-east1
    
  2. on-prem-gw1 VPN ゲートウェイに IP を割り当てます。

    gcloud compute addresses create on-prem-gw1 --region us-central1
    
  3. 後のコマンドで使用する際に検索しなくてもよいように、前の手順で作成したアドレスを保存しておきます。

    1. まず、cloud-gw1 ゲートウェイについて次のコマンドを実行します。

      cloud_gw1_ip=$(gcloud compute addresses describe cloud-gw1 \
          --region us-east1 --format='value(address)')
      
    2. 次に、on-prem-gw1 ゲートウェイについて次のコマンドを実行します。

      on_prem_gw_ip=$(gcloud compute addresses describe on-prem-gw1 \
          --region us-central1 --format='value(address)')
      
  4. cloud VPC で IPsec の転送ルールを作成します。両方向で転送ルールを作成する必要があります。

    1. 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
      
    2. 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
      
    3. 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
      
  5. 同じようにして、on-prem VPC で IPsec トンネルの転送ルールを作成します。このステップにより、IPsec トンネルがファイアウォールを出られるようになります。これまでと同様に、次のプロトコルに対して実行する必要があります。

    1. 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
      
    2. 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
      
    3. 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
      
  6. シークレットを生成します。次のステップで on-prem-tunnel1 トンネルと cloud-tunnel1 トンネルを作成して検証する際に、このシークレットを使用します。シークレットを作成して安全に保管する方法の詳細については、シークレット管理をご覧ください。

  7. 生成したシークレットを使用して、ローカル ネットワーク用のトンネル on-prem-tunnel1 と、クラウドベースのネットワーク用のトンネル cloud-tunnel1 を作成します。それぞれのネットワークに VPN ゲートウェイが必要であり、シークレットが一致する必要があります。次の 2 つのコマンドで、[MY_SECRET] を、生成したシークレットに置き換えます。

    1. 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
      
    2. 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
      
  8. これで、ゲートウェイが作成されトンネルが構築されたため、2 つのトンネルを通過する、以前作成したサブネットからルートを追加する必要があります。

    1. 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
      
    2. 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 の負荷テスト

  1. 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"
    
  2. 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"
    
  3. on-prem ネットワークのファイアウォールで TCP ポート 5001 を開き、iperf リクエストを受け入れます。

    gcloud compute firewall-rules create on-prem-iperf-fw --network on-prem --allow tcp:5001
    
  4. SSH を使用して、それぞれの VM に接続し、iperf のコピーをインストールします。Debian に iperf をインストールするには、次のコマンドラインを使用します。

    sudo apt-get install iperf
    
  5. on-prem-loadtest VM で、次のコマンドを実行します。

    iperf -s -i 5 -p 5001
    

    5 秒ごとにステータスを報告する iperf サーバーが VM 上に作成されます。

  6. cloud-loadtest VM で、次のコマンドを実行します。

    iperf -c 192.168.1.2 -P 20 -x C -p 5001
    

20 のストリームがある iperf クライアントが 1 つ作成されます。テストの 10 秒後に値が報告されます。

iperf テスト

[SUM] スループット値に注目してください。トラフィックにとって十分な結果が得られた場合は、ここで終わることができます。ただし、追加のスループットが必要な場合は、追加のトンネルを作成して使用する必要があります。

複数の VPN の負荷テスト

ルートが一致する場合は、Google Cloud の VPN ゲートウェイがフロー単位の等価コスト マルチパス ルーティング(ECMP)を実行して複数のトンネル全体で負荷を分散し、より高い集約スループットを実現します。負荷分散がフロー単位で行われるため、単一のフローではメリットがありませんが、複数のフローではメリットがあります。

  1. cloud-gw1 と同じリージョンに、cloud-gw2 という名前の cloud VPN ゲートウェイを追加で作成します。

    gcloud compute target-vpn-gateways create cloud-gw2 --network cloud --region us-east1
    
  2. cloud-gw2 のアドレスを作成します。

    gcloud compute addresses create cloud-gw2 --region us-east1
    
  3. cloud-gw2 のアドレスを保存します。

    cloud_gw2_ip=$(gcloud compute addresses describe cloud-gw2 \
        --region us-east1 --format='value(address)')
    
  4. 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
  5. 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
    
  6. 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
    
  7. 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
    
  8. 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-tunnel1cloud-tunnel2)が作成されました。トラフィックは自動的にそれらのトンネル間で負荷分散されます。

VPN 上のスループットの再テスト

  • iperf を使用してネットワークの速度を再テストします。

    iperf -c 192.168.1.2 -P 20 -x C
    

スループット値がシングルトンネル テストの場合よりもどれだけ大きいか注目してください。

iperf 再テスト

また、等価コスト マルチパス ルーティング VPN トンネルの制限が 2 ではなく、同じリージョン内でトンネルを終端する必要がないことにも注意してください。

規模を大きくする場合は、このプロセスを無期限に繰り返すことができます。また、信頼性を向上させるために、これらのトンネルを別のリージョン サブネットで開始または終端することができます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

  • Cloud Router を確認して、Border Gateway Protocol(BGP)を有効にし、フォールト トレラントを強化する。
  • Cloud Interconnect で他の相互接続オプションを確認する。
  • Cloud Monitoring を使用して VPN ゲートウェイをモニタリングする。
  • Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認する。Cloud Architecture Center を確認します。