Network Load Balancer での TCP 接続に関する問題をトラブルシューティングする方法を教えてください。
Network Load Balancer での TCP 接続に関する問題を解決したいです。
解決策
パケットを追跡してドロップされた場所を特定するには、Amazon Virtual Private Cloud (Amazon VPC) のフローログまたはパケットキャプチャを使用します。
以下は、オンプレミスサーバーからインターネットに接続されている Network Load Balancer へのシンプルなトラフィックフローの例です。
クライアント (オンプレミス)---->ファイアウォール (オンプレミス)---インターネット経由--->NLB--->ターゲット
エラーが発生した場合は、クライアントとターゲットの間のネットワークパスおよび、中間デバイスを確認します。
クライアント接続のトラブルシューティング
エラーが DNS 解決の失敗、接続の拒否、接続のタイムアウトのいずれであるかを特定します。
クライアントが Network Load Balancer の正しい IP アドレスに DNS 解決できることを確認します。Linux の場合は dig (dig www.example.com)、Microsoft Windows の場合は nslookup (nslookup.www.example.com) などのツールを使用してください。
**dig ** または ** nslookup ** を使用して、AWS マネジメントコンソールで利用可能な Network Load Balancer の完全修飾ドメイン名 (FQDN) を解決します。Network Load Balancer の FQDN の構文は次のとおりです。
name-id.elb.region.amazonaws.com. For example: dig my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com
カスタムドメイン DNS の dig または nslookup による出力の IP アドレスと、ロードバランサーの FQDN が同じであることを確認します。
クライアントパケットが Network Load Balancer に送信されるかどうかを確認します。tcpdump、wireshark などのパケットキャプチャツール、またはクライアントの VPC フローログを使用して、クライアントのネットワークインターフェイスに出入りするパケットを確認します。SYN パケットが Network Load Balancer に送信されない場合は、クライアントアプリケーションを調べて、トラフィックをブロックしている原因を確認します。クライアントのオペレーティングシステム (OS) とファイアウォールが Network Load Balancer の送受信トラフィックを許可していることを確認します。
Network Load Balancer の IP アドレスに向かうトラフィックの VPC フローログに REJECT が表示される場合があります。ロードバランサーのセキュリティグループとネットワークアクセスコントロールリスト (ネットワークACL) のアウトバウンドルールをチェックして、トラフィックを許可しているかどうかを判断します。Network Load Balancer の IP アドレスからのトラフィックの VPC フローログに REJECT が表示される場合もあります。クライアントのセキュリティグループとネットワーク ACL のインバウンドルールをチェックして、トラフィックを許可しているかどうかを判断します。
ロードバランサーからクライアントに送信されるレスポンストラフィック (SYN_ACK) があっても、クライアントからロードバランサーに ACK が返されない場合があります。クライアントのファイアウォールがロードバランサーからのトラフィックをブロックしていないか確認します。
Network Load Balancer への接続に失敗した場合のトラブルシューティング
Network Load Balancer の VPC フローログを確認して、クライアントのトラフィックがロードバランサーに到達しているかどうかを判断します。 VPC フローログで、ロードバランサーがクライアントからのトラフィックを拒否したことが示されている場合、ロードバランサーのセキュリティグループとサブネットのネットワーク ACL のインバウンドルールを確認します。ルールが、ロードバランサーのリスナーポートにおいて、クライアント IP アドレスからのインバウンドトラフィックを許可していることを確認します。
Network Load Balancer がクライアントからのトラフィックを受け入れていた場合は、ロードバランサーがターゲット IP アドレスにトラフィックを転送しているかどうかを確認します。Network Load Balancer のターゲットに送信されるパケットには、ソース IP アドレスとしてロードバランサーのプライベート IP アドレスが必要です。また、ターゲットの IP アドレスとして、宛先の IP アドレスが必要です。
**REJECT ** エラーを解決するには、セキュリティグループとサブネットのネットワーク ACL のアウトバウンドルールを確認します。ルールがターゲットポートにおいて、ターゲットIPアドレスへのアウトバウンドトラフィックを許可していることを確認します。
Network Load Balancer の VPC フローログをチェックして、ロードバランサーがターゲットの IP アドレスから応答トラフィックを受信しているかどうかを確認します。トラフィックがない場合は、ターゲットの VPC フローログまたはパケットキャプチャをチェックして、ターゲットがロードバランサーのトラフィックを受信して応答したかどうかを判断します。
ロードバランサーがターゲットのレスポンストラフィックを受信していても、クライアントに送信されるパケットが拒否される場合は、ネットワーク ACL のアウトバウンドルールを確認します。ルールがエフェメラルポート (1024-65535) からクライアント IP アドレスへのトラフィックを許可していることを確認します。
Network Load Balancer が応答トラフィックをクライアントに転送していても、クライアントが受信していない場合は、ファイアウォールなどの中間デバイスを確認します。TCP ベースのトレースルートを使用して、ネットワークパス内のネットワークデバイスを検索します。クライアントデバイスから以下のサンプルコマンドを実行します。
mtr -P -T -r traceroute -T -p
ターゲット関連エラーのトラブルシューティング
Network Load Balancer の VPC フローログを確認して、ロードバランサーのトラフィックを受信しているターゲットを特定し、トラフィックがターゲットに到達したことを確認します。ターゲットグループがクライアントの IP アドレス保存を有効にしている場合、クライアントの IP アドレスが [ソース IP] フィールドに表示されます。クライアント IP アドレスの保存が無効になっている場合は、ロードバランサーのプライベート IP アドレスが表示されます。
ターゲットの VPC フローログで、ターゲットがロードバランサーからの受信トラフィックを拒否したことが示されている場合、ターゲットのセキュリティグループとネットワーク ACL を確認します。ターゲットグループ内のターゲットのポートが、ロードバランサーのプライベート IP アドレスまたはクライアント IP アドレスに対して開かれていることを確認します。ログにおいて、ターゲットが送信トラフィックを拒否したことが示されている場合、ターゲットのセキュリティグループとネットワーク ACL のアウトバウンドルールを確認します。エフェメラルポート (1024-65535) がロードバランサーのプライベート IP アドレスまたはクライアント IP アドレスに開かれていることを確認します。
SYN パケットを受信していても、対応する SYN_ACK が送信されない場合は、OS レベルのファイアウォールまたは iptables などのプロキシがトラフィックをブロックしていないかを確認します。
ターゲットに、Network Load Balance のターゲットグループに登録されているポート上で実行されるアプリケーションがあることを確認します。telnet、CURL、netcat などのコマンドを実行します。たとえば、ターゲットがポート 80 に登録されている場合は、ターゲットのターミナルにログインして次のコマンドを実行します。
telnet localhost 80 curl -v http://localhost:80 nc -vz localhost 80
注: Microsoft Windows の場合は、ターゲットでブラウザを開いて http://localhost:80 と入力します。
関連情報
セキュリティグループを使用して AWS リソースへのトラフィックを制御する
- 言語
- 日本語

関連するコンテンツ
質問済み 2年前
質問済み 2年前
質問済み 2年前
質問済み 4ヶ月前