トラフィックミラーリングデータが Amazon Virtual Private Cloud (Amazon VPC) の送信先インスタンスに確実に到達するようにしたいと考えています。
解決策
重要: 次の解決策を完了するには、以下の前提条件が揃っていることを確認してください。
- 送信元インスタンス
- ユーザーデータグラムプロトコル (UDP) リスナーがいる送信先インスタンスと UDP リスナーがいない送信先インスタンス
- トラフィックミラーリング用のインターネット制御メッセージプロトコル (ICMP) パケット
VPC のネットワークインターフェイスとの間で送受信されるトラフィックミラーリングデータを監視する
重要: Amazon VPC は、発信元となる送信先でトラフィックミラーリングデータをキャプチャしません。Amazon VPC は、送信先のネットワークインターフェイスまたは Network Load Balancer の VPC フローログにトラフィックミラーリングデータをキャプチャします。
フローログには次の制限があります。
- フローログはデータをサンプリングしますが、完全なパケットキャプチャは実行しません。
- フローログはパケットの内容をキャプチャせず、メタデータのみをキャプチャします。
- Amazon VPC はフローログを Amazon CloudWatch Logs または Amazon Simple Storage Service (Amazon S3) に送信しますが、そこでログを追加処理する必要があります。
VPC フローログからトラフィックミラーリングデータに関する情報を取得するには、次の手順を実行します。
-
次の create-flow-logs コマンドを実行して、VPC フローログを有効にします。
aws ec2 create-flow-logs \
--resource-type VPC \
--resource-id vpc-######## \
--traffic-type ALL \
--log-destination-type cloud-watch-logs \
--log-group-name /aws/vpc/flowlogs \
--deliver-logs-permission-arn arn:aws:iam::your-account-id:role/flowlogsRole
注: vpc-######## を実際の VPC ID に、your-account-id を AWS アカウント ID に置き換えてください。送信元インスタンスの VPC フローログはトラフィックミラーリングデータをキャプチャしません。
-
次の CloudWatch Logs クエリを使用して、トラフィックミラーリングデータのログを確認します。
fields @timestamp, srcAddr, dstAddr, srcPort, dstPort, protocol
| filter protocol in [6, 17] # 6 for TCP, 17 for UDP
| filter srcAddr like '10.0.' # Filter for internal source IPs
| stats count(*) as requestCount by srcAddr, dstAddr, dstPort
| sort requestCount desc
| limit 20
出力例:
2 612352815429 eni-093c2d08210e0b192 10.170.31.43 10.170.31.12 0 0 1 10 1620 1748380388 1748380445 ACCEPT OK
2 612352815429 eni-093c2d08210e0b192 10.170.31.12 10.170.31.43 65430 4789 17 10 1340 1748380388 1748380445 ACCEPT OK
注: この出力には、送信先ポート 4789 の UDP パケット (プロトコル 17) を含むトラフィックミラーリングセッションエントリが表示されます。パケットは、ミラーソース 10.170.31.12 から送信先の Elastic Network Interface 10.170.31.43 に到着します。UDP ポート 4789 でリッスンしているアプリケーションはありません。トラフィックミラーリングデータの受信パケットごとに、ICMP "Destination unreachable" というエラーメッセージが送信元に返されます。
パケットキャプチャを使用して、トラフィックミラーリングが送信先インスタンスで機能することを確認する
送信先インスタンスで tcpdump ユーティリティを使用して、パケットをキャプチャしてトラフィックミラーリングデータを検査します。
特定のホストがパケットの送信元であるネットワークトラフィックをキャプチャするには、次の tcpdump コマンドを実行します。
sudo tcpdump -i any host 10.170.31.12 and 10.170.31.43 and port 4789 -nn
出力例:
15:22:31.123456 IP 10.170.31.12.52146 > 10.170.31.43.4789: VXLAN, flags [I] (0x08), vni 5277
IP 10.170.31.12.54637 > 8.8.8.8.443 TCP [P.], seq 1:100, ack 1, win 45, length 99
15:22:31.123789 IP 10.170.31.12.52146 > 10.170.31.43.4789: VXLAN, flags [I] (0x08), vni 5277
IP 8.8.8.8.80 > 10.170.31.12.5463: TCP [.], ack 100, win 64240, length 0
注: この出力例では、送信先ネットワークインターフェイスが、発信元となる送信元からトラフィックミラーリングデータを受信したことを確認できます。
アプリケーションのトラフィックミラーリングデータを処理する
トラフィックミラーリングデータを処理するには、アプリケーションが Virtual Extensible LAN (VXLAN) パケットのカプセル化を解除し、元のパケットデータを抽出できる必要があります。アプリケーションが元のパケットを処理する場合、アプリケーションがトラフィックミラーリングデータを受信するようにリスニングポートを 4789 に変更できます。
注: アプリケーションの要件によっては、カプセル化されたトラフィックミラーリングデータに対してより高度なパケット処理を実行する必要がある場合があります。詳細については、「Work with open-source tools for Traffic Mirroring」(トラフィックミラーリング用のオープンソースツールを使用する) を参照してください。
関連情報
How do I troubleshoot Amazon VPC Traffic Mirroring issues? (Amazon VPC トラフィックミラーリングの問題をトラブルシューティングする方法を教えてください)