AWS Site-to-Site VPN でのデータ転送が遅くなっているので、転送速度を上げたいです。
簡単な説明
Site-to-Site VPN 接続では、次のような一般的なネットワークの問題が原因で転送速度が遅くなります。
- ルーティングのパフォーマンスが低い
- 経路上の最大伝送ユニット (MTU) が低い
- 低帯域幅トンネルを原因とする TCP/UDP スループットの問題
- ゲートウェイデバイスによるデータ転送の制限
- 過飽和状態の VPN トンネル
次の一般的なシステムまたはアプリケーションの問題でも、転送速度が遅くなります。
- アプリケーションエンドポイントのリソースクォータ
- データ転送に単一の TCP ストリームを使用するアプリケーションエンドポイント
解決策
サイト間 VPN の転送速度が遅い場合のトラブルシューティングには、次の操作を行います。
低パフォーマンスのルーティングを確認する
まず、Linux MTR ツールをインストールします。ほとんどの Linux ディストリビューションには MTR がプリインストールされています。お使いのディストリビューションのソフトウェアパッケージマネージャーからツールをダウンロードすることもできます。
-
MTR for Amazon Linux をインストールするには、次のコマンドを実行します。
sudo yum install mtr
-
MTR for Ubuntu をインストールするには、以下のコマンドを実行します。
sudo apt-get install mtr-tiny
次に、オンプレミスのエンドポイントから MTR を使用して次のコマンドを実行します。
mtr -T -nrz example_IP
**注:**example_IP は、AWS トンネルのパブリック IP アドレスに置き換えます。
MTR の出力には、経路上のインターネットサービスプロバイダー (ISP) の AS 番号 (ASN) が含まれます。出力を確認して、トラフィックがカスタマーゲートウェイデバイスから AWS への直接経路に沿って流れていることを確認します。
必要に応じて、MTR の出力を参照し、インターネットでの遅延を特定します。
経路に沿って MTU を確認する
パスで最も低い MTU を特定します。
注: example_IP を宛先の IP アドレスに、1460 をバイト単位の最大セグメントサイズ (MSS) に置き換えます。
「パケットを断片化する必要があるが DF が設定されています」というメッセージが表示された場合は、MSS サイズを 1 小さくしてから、コマンドを再実行します。出力が ping が成功したことを示すまでテストを繰り返します。
TCP/UDP スループットに関する問題のトラブルシューティング
前提条件 iPerf3 ツールをインストールする必要があります。iPerf3 をインストールするには、iPerf のウェブサイトで「iPerf バイナリのダウンロード」を参照してください。
サーバーとクライアントからの UDP 帯域幅機能をテストします。
注: example_IP は、サーバーのプライベート IP アドレスに置き換えます。
VPN に関連付けられた Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで帯域幅クレジットが使用可能かどうかを確認します。帯域幅クレジットが使用できない場合は、より大きなインスタンスサイズを作成してから、もう一度テストします。
サーバーとクライアントからの TCP スループットをテストします。
注: example_IP は、サーバーのプライベート IP アドレスに置き換えます。
インスタンスサイズを増やしたときのソースのメモリバッファと宛先のメモリバッファをテストするには、複数の TCP 受信ウィンドウサイズをテストします。
カスタマーゲートウェイデバイスがデータ転送を許可していることを確認する
カスタマーゲートウェイデバイスでパケットキャプチャ (PCAP) を行います。PCAP がカスタマーゲートウェイデバイスで高い遅延またはパケットドロップを示す場合は、デバイスの構成設定を確認します。この情報を参照し、カスタマーゲートウェイがデータ転送を制限しているかどうかを確認します。問題のトラブルシューティングには、デバイスのベンダーのマニュアルを確認するか、デバイスのベンダーサポートにお問い合わせください。
VPN トンネルが過飽和状態になっていないことを確認する
各 Site-to-Site VPN トンネルの最大帯域幅は 1.25 ギガビット/秒 (Gbps) です。トンネルのスループットがクォータを超えていないことを確認するには、次の手順を実行します。
- Amazon CloudWatch コンソールを開きます。
- [Site-to-Site VPN メトリクス] を選択します。
- TunnelDataIn および TunnelDataOut を選択します。
- [統計] で [合計] を選択し、[期間] で [5 分] を選択します。
- トンネルのスループットを Gbps 単位で計算するには、次の式を使用します。
(((m1+m2)/300)*8)/1,000,000,000
注: この式で、m1 を TunnelDataIn の最大値に、m2 を TunnelDataOut の最大値に置き換えます。
- スループットが 1.2 Gbps を超えているかどうかを確認します。1.2 Gbps を超えるスループットを実現するには、等コストマルチパスルーティング (ECMP) を使用する 2 つのボーダーゲートウェイプロトコル (BGP) トンネルと 1 つの AWS Transit Gateway トランジットゲートウェイを起動します。
アプリケーションエンドポイントがリソースクォータを超えているかどうかを確認する
カスタマーゲートウェイデバイスでは、データが VPN トンネルを通過するときに Wireshark (Windows) または tcdump (Linux) を使用して PCAP を取得します。
重要: データ転送を開始する前に PCAP を起動します。送信元と送信先のエンドホスト、およびオンプレミスのカスタマーゲートウェイの両方で PCAP を同時に使用するのがベストプラクティスです。
PCAP 出力に遅延やパケットの再送信がないかどうかを確認します。エンドホストで予期しない遅延やパケットの再送信が発生した場合は、カスタマーゲートウェイデバイスのベンダーサポートにお問い合わせください。
追加の TCP ストリームのテスト
次の手順を実行します。
- アプリケーションが使用する TCP ストリームの数をテストします。
サーバーから、次のコマンドを実行します。
iperf3 -s
クライアントから、次のコマンドを実行します。
sudo iperf3 -c example_IP -P 10 -t 30
注: example_IP は、サーバーのプライベート IP アドレスに置き換えます。上記のクライアントコマンドでは、10 個の並列 TCP ストリームをテストします。
- 並列 TCP ストリームが増えるとデータ転送が向上するかどうかを確認するために、TCP ストリームを増やしてテストを繰り返します。例:
sudo iperf3 -c example_IP -P 30 -t 30
注: 上記のコマンドでは、30 件の TCP ストリームをテストします。
- テストにストリームを追加するとスループットが向上した場合は、ソフトウェアベンダーのサポートに連絡したうえで、アプリケーションに TCP ストリームを追加してください。
関連情報
Amazon EC2 インスタンスのネットワーク機能強化
AWS VPN に関するよくある質問