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

最終更新日: 2018 年 7 月 27 日

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 でのパケット損失とレイテンシーを確認する

2 つのインスタンスに mtr ネットワークツールをインストールして、ICMP または TCP におけるパケット損失とレイテンシーを確認します。mtr は、ネットワークパフォーマンスに関する出力を継続的に更新するので、時間の経過に伴った分析が行えます。mtr によれば、traceroute と ping の機能を、単一のネットワーク診断ツール内で使用できます。

Amazon Linux に mtr をインストールするには、次を実行します。

sudo yum install mtr

Ubuntu に mtr をインストールするには、次を実行します。

sudo apt-get install mtr

EC2 インスタンスとオンプレミスホストの間にあるプライベート IP アドレスおよびパブリック IP アドレスを通じ、次のテストを双方向で実行します。通信方向が逆転すると、TCP/IP ネットワーク上のノード間のパスも変化します。また、2 つの方向ともに、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 アドレスおよびパブリック IP アドレスを通じ、次のテストを双方向で実行します。通信方向が逆転すると、TCP/IP ネットワーク上のノード間のパスも変化します。また、2 つの方向ともに、traceroute からの結果を取得することが必要です。

プライベート 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 ではなく TCP ベースのトレースを指定する Linux の traceroute オプションが有用です。リクエストに対し、よく発生するタイムアウトがいくつかあるため、送信先またはルートの最後のホップでのパケット損失を監視します。複数のホップが累積したパケット損失も、問題を示している可能性があります。

注: traceroute を使用したネットワーク接続のトラブルシューティングを行う場合、クライアントからサーバーと、サーバーからクライアントへ戻る 2 つの方向で、コマンドを実行すると便利です。

hping3 を使用して、レイテンシーまたは TCP パケット損失の問題を特定する

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

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 が TCP ヘッダーを送信する際は、デフォルトでターゲットホストのポートを 0、winsize を 64 に指定します。tcp フラグはオンになりません。

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

複数のアベイラビリティーゾーンにある EC2 インスタンスやオンプレミスホストにおいて、問題の複製時のパケットキャプチャを実行することは、VPN 接続において、アプリケーションまたはネットワークレイヤーの問題が発生しているかどうかを判断するのに役立ちます。パケットキャプチャを実行するために、インスタンスに tcpdump をインストールします。

Amazon Linux に tcpdump をインストールするには、次を実行します。

sudo yum install tcpdump

Ubuntu に tcpdump をインストールするには、次を実行します。

sudo apt-get install tcpdump

注 : 分析およびトラブルシューティングのための、ネットワークデバイスの確認方法については、対応するベンダーからのドキュメントをご参照ください。