VPN 接続でのパケット損失をトラブルシューティングする方法を教えてください。

最終更新日: 2022 年 7 月 18 日

VPN 接続でパケット損失と高レイテンシーの問題が継続的または断続的に発生します。Amazon Virtual Private Cloud (Amazon VPC) に起因する問題でないことを確認するには、どのようなテストを実行すればよいですか?

解決方法

パフォーマンステストを開始する前に、Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスを起動して設定します:

  1. インスタンスを起動する」のステップに従って、同じ VPC 内の少なくとも 2 つの異なるアベイラビリティーゾーンで Linux インスタンスを起動します。インスタンスからネットワークパフォーマンステストを実行できます。
  2. 最適なネットワークパフォーマンスを得るには、Linux の拡張ネットワーキングをサポートしているインスタンスを確実に選択し、同じ VPC 内で起動します。
  3. 同じプレイスメントグループに所属しない、またはジャンボフレームをサポートしていないインスタンス間でネットワークテストを実行する場合には、「Linux インスタンスの MTU の確認および設定」の手順に従います。
  4. Linux インスタンスへの接続」の手順を実行して、インスタンスにアクセスできることを確認します。

mtr を使用して ICMP または TCP パケット損失とレイテンシーを確認します。

両方のインスタンスに mtr ネットワークツールをインストールして、ICMP または TCP パケット損失とレイテンシーを確認します。mtr は、継続的に更新される出力により、時間の経過に伴うネットワークパフォーマンスの分析を可能にします。 このネットワーク診断ツール 1 つに tracerouteping の機能が一体化されています。

Amazon Linux に mtr をインストールします:

sudo yum install mtr

Ubuntu に mtr をインストールします:

sudo apt-get install mtr

EC2 インスタンスのプライベートおよびパブリック IP アドレスとオンプレミスホストの間で双方向に以下のテストを実行します。方向が逆になった場合は、TCP/IP ネットワークのノード間のパスは変化します。注意: 両方向の mtr 結果を取得することが重要です。

最初の mtr テストは ICMP ベースですが、2 番目のテストの -T オプションでは TCP ベースの結果が返されます。TCP ベースの結果から、接続においてアプリケーションベースのパケット損失やレイテンシーがあるかどうかを判断できます。TCP オプションは、MTR バージョン 0.85 以上で使用できます。

プライベート IP テスト:

mtr -n -c 200 <Private IP EC2 instance/on-premises host> --report
mtr -n -T -c 200 <Private IP EC2 instance/on-premises host> --report

パブリック IP テスト:

mtr -n -c 200 <Public IP EC2 instance/on-premises host> --report
mtr -n -T -c 200 <Public IP EC2 instance/on-premises host> --report

Linux の traceroute ユーティリティを使用してレイテンシーまたはルーティングの問題を特定する。

Linux traceroute ユーティリティはクライアントノードから送信先ノードへのパスを識別します。パスで特定された各ルーターが要求に応答するまでの時間もミリ秒単位で表示します。さらにこのユーティリティは、各ホップが送信先に到達するまでの所要時間も計算して表示します。traceroute がインストールされていない場合は、インスタンスに必ずインストールしてください。

Amazon Linux に traceroute をインストールします:

sudo yum install traceroute

Ubuntu に traceroute をインストールします:

sudo apt-get install traceroute
EC2 インスタンスのプライベートおよびパブリック IP アドレスとオンプレミスホストの間で双方向に以下のテストを実行します。方向が逆になった場合は、TCP/IP ネットワークのノード間のパスは変化します。両方向のトレースルート結果を取得することが重要です。

プライベート IP テスト:

sudo traceroute <private IP of EC2 instance/on-premises host>
sudo traceroute -T -p 80 <private IP of EC2 instance/on-premises host>

パブリック IP テスト:

sudo traceroute <public IP of EC2 instance/on-premises host>
sudo traceroute -T -p 80 <public IP of EC2 instance/on-premises host>

注意: 引数 -T -p 80 -n は ポート 80 で TCP ベースのトレースを実行します。ポート 80 またはテストを実行するポートが両方向に開いていることを確認してください。

ほとんどのインターネットデバイスでは ICMP ベースのトレースリクエストに設定される優先度が低いため、ICMP の代わりに Linux の traceroute オプションで TCP ベースのトレースを指定することをお勧めします。いくつかのリクエストがタイムアウトしていることがよくあるため、送信先までの経路やルートの最終ホップでのパケット損失を監視します。複数のホップにわたって蓄積されたパケット損失も問題として示されることがあります。

注意: traceroute を使用してネットワーク接続のトラブルシューティングを行う場合は、コマンドを両方向で実行するのが有効です。

hping3 を使用してレイテンシーまたは TCP パケット損失の問題を確認します。

hping は、コマンドライン指向の TCP/IP パケットアセンブラー/アナライザーです。ICMP エコーリクエストに加えて、TCP、UDP、および RAW-IP プロトコルをサポートします。また、traceroute モード、対象チャンネル間でのファイル送信、その他多くの機能があります。

hping3 がインストールされていない場合は、Amazon Linux で次のコマンドを実行します:

sudo yum --enablerepo=epel install hping3

次に、以下のコマンドを実行します:

hping3 -S -c 50 -V <Public IP of EC2 instance or on-premises host>
hping3 -S -c 50 -V <Private IP of EC2 instance or on-premises host>

注意: デフォルトでは、hping3 からターゲットホストのポート 0 に TCP ヘッダーが 64 の winsize および tcp フラグなしで送信されます。

tcpdump を使用したパケットキャプチャのサンプル

問題を複製する場合は、EC2 インスタンス (複数のアベイラビリティーゾーンに存在) とオンプレミスホストの両方でパケットキャプチャを実行できます。これらのパケットキャプチャサンプルは、VPN 接続にネットワーク層の問題があるかどうかを判断するのに有効です。パケットキャプチャを実行するには、インスタンスに tcpdump をインストールします。

Amazon Linux に tcpdump をインストールします:

sudo yum install tcpdump

Ubuntu に tcpdump をインストールします:

sudo apt-get install tcpdump

注意: 分析とトラブルシューティングのためにネットワークデバイスをチェックする手順については、該当するベンダーのドキュメントを参照してください。