AWS VPN 接続でのパケットロスのトラブルシューティング方法を教えてください。
最終更新日: 2021 年 5 月 19 日
AWS 仮想プライベートネットワーク (AWS VPN) 接続で、一定または断続的なパケットロスと高レイテンシーの問題が発生しています。Amazon Virtual Private Cloud (Amazon VPC) に起因する問題でないことを確認するには、どのようなテストを実行すればよいですか?
簡単な説明
パケットロスの問題は、オンプレミスネットワークと Amazon VPC の間の AWS VPN インターネットトラフィックホップによって異なります。パケットのロスの発生元を特定して確認するのがベストプラクティスです。
解決方法
ソースホストと宛先ホストで、CPUUtilization、NetworkIn/NetworkOut、NetworkPacketsIn/NetworkPacketsOutなどのリソース使用率の問題をチェックして、ネットワークの制限に達していないことを確認します。
MTR を使用して ICMP または TCP パケットロスとレイテンシーを確認する
MTR の出力は絶えず更新されるため、時間の経過に伴うネットワークパフォーマンスを分析できます。このネットワーク診断ツール 1 つに traceroute と ping の機能が一体化されています。
VPC の EC2 インスタンスに MTR ネットワークツールをインストールして、ICMP または TCP パケットロスおよびレイテンシーを確認します。
Amazon Linux:
sudo yum install mtr
Ubuntu の場合:
sudo apt-get install mtr
Windows:
WinMTR をダウンロードしてインストールします。
注: Windows OS の場合、WinMTR は TCP ベースの MTR をサポートしていません。
EC2 インスタンスのプライベートおよびパブリック IP アドレスとオンプレミスホストの間で双方向に以下のテストを実行します。方向が逆になった場合は、TCP/IP ネットワークのノード間のパスは変化することがあります。MTR の結果を双方向で取得するのがベストプラクティスです。
注:
- セキュリティグループと NACL ルールで、ソースインスタンスからの ICMP トラフィックが許可されていることを確認します。
- テストポートが宛先インスタンスで開いていることを確認し、セキュリティグループと NACL ルールで送信元からのトラフィックのプロトコルとポートを許可します。
TCP ベースの結果から、接続においてアプリケーションベースのパケットロスやレイテンシーがあるかどうかを判断します。MTR バージョン 0.85 以降では、TCP オプションがあります。
プライベート IP EC2 インスタンスのオンプレミスホストレポート:
mtr -n -c 200
プライベート IP EC2 インスタンスのオンプレミスホストレポート:
mtr -n -T -c 200 -P 443 -m 60
パブリック IP EC2 インスタンスのオンプレミスホストレポート:
mtr -n -c 200
パブリック IP EC2 インスタンスのオンプレミスホストレポート:
mtr -n -T -c 200 -P 443 -m 60
Traceroute を使用してレイテンシーまたはルーティングの問題を特定
Linux traceroute ユーティリティはクライアントノードから送信先ノードへのパスを識別します。このユーティリティは、各ルーターがリクエストに応答する時間をミリ秒単位で記録します。この traceroute ユーティリティは、各ホップがそれぞれの送信先に到達するまでの所要時間も計算します。
traceroute をインストールするには、以下のコマンドを実行します。
Amazon Linux:
sudo yum install traceroute
Ubuntu の場合:
sudo apt-get install traceroute
EC2 インスタンスのプライベート IP アドレスとオンプレミスホストのテスト:
Amazon Linux:
sudo traceroute
sudo traceroute -T -p 80
Windows:
tracert
tracetcp
注: 引数 -T -p 80 -n によりポート 80 で TCP ベースのトレースを実行します。ポート 80 またはテストを実行するポートが両方向に開いていることを確認してください。
ほとんどのインターネットデバイスでは ICMP ベースのトレースリクエストに設定される優先度が低いため、Linux の traceroute オプションで ICMP の代わりに TCP ベースのトレースを指定することをお勧めします。いくつかのリクエストがタイムアウトしていることがよくあるため、送信先までの経路やルートの最終ホップでのパケットロスを監視します。複数のホップでのパケットロスには、何らかの問題を示している可能性があります。
注: traceroute コマンドは、クライアントからサーバーへ、次にサーバーからクライアントへ双方向に実行するのがベストプラクティスです。
hping3 を使って、エンドツーエンド TCP パケットロスおよびレイテンシーの問題を特定
Hping3 は、TCP 接続のエンドツーエンドのパケットロスおよびレイテンシーを測定するコマンドライン指向の TCP/IP パケットアセンブラおよびアナライザーです。ICMP エコーリクエストに加えて、hping3 は TCP、UDP、および RAW-IP プロトコルをサポートします。Hping3 には、対象のチャネル間でファイルを送信できる traceroute モードも含まれています。Hping3 はホストのスキャン、侵入テストの支援、侵入検知システムのテスト、およびホスト間のファイルの送信を行うことを目的に設計されています。
MTR および traceroute はホップごとのレイテンシーをキャプチャします。しかし、hping3はパケットロスに加え、TCP上のエンドツーエンドの最小/平均/最大レイテンシーの結果を収量します。hping3をインストールするためには、以下のコマンドを実行します。
Amazon Linux:
sudo yum --enablerepo=epel install hping3
Ubuntu の場合:
sudo apt-get 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 または Wireshark を使用したパケットキャプチャのサンプル
問題の再現時に VPC にある EC2 インスタンスとオンプレミスホストの間でパケットキャプチャを同時に実行すると、VPN 接続においてアプリケーションまたはネットワークレイヤーの問題があるかどうかを判断できます。Linux インスタンスに tcpdump をインストールするか、Windows インスタンスに Wireshark をインストールして、パケットキャプチャを実行できます。
Amazon Linux に tcpdump をインストール:
sudo yum install tcpdump
Ubuntu に tcpdump をインストール:
sudo apt-get install tcpdump
Windows OS に Wireshark をインストール:
Wireshark をインストールして、パケットキャプチャを取得します。
明示的な輻輳通知 (ECN)
Windows インスタンスに接続する場合、ECN を有効にすると、パケットロスまたはパフォーマンスの問題が発生する可能性があります。ECN を無効にしてパフォーマンスを向上させます。
次のコマンドを実行して ECN 機能が有効かどうか確認します。
netsh interface tcp show global
ECN 機能が有効になっている場合は、次のコマンドを実行して無効化します:
netsh interface tcp set global ecncapability=disabled