BIG-IPでtcpdumpを使用する際のTips

# はじめに
BIG-IPでは、パケットキャプチャにtcpdumpが使用できます。このtcpdumpの使い方は一般的な（Linuxサーバなどで動作する）tcpdumpとほぼ同じですが、一部BIG-IP固有の機能があります。

どれもAskF5に記載されていることなので、詳細は末尾の「参考URL」のリンク先を参照してください。

# tcpdumpのオプション
## -i interface名
例：tcpdump -i 1.1
「**-i**」は、キャプチャ対象インタフェースを指定します。tcpdumpとしてはとても一般的な使い方ですが、BIG-IPではあまり使用されないと思います。

## -i vlan名
例：tcpdump -i internal
BIG-IPでは、-i の引数としてVLANを指定することができます。インタフェース名よりもこの使い方の方がBIG-IPでは一般的かと思います。

## -i 0.0
例：tcpdump -i 0.0
**0.0**というインタフェースを指定すると、TMM上の全インタフェース（全VLAN)をキャプチャします。便利ですがキャプチャデータが非常に大きくなるので、フィルタなどで対象を絞ることが推奨されます。

## -i eth0
例：tcpdump -i eth0
Management Portをキャプチャします。

## -i interface名|vlan名:nnn
例：tcpdump -i internal:nnn
-iで指定するインタフェース名に「**:n**」をつけると、パケットデータ内にBIG-IP固有の情報、例えば、そのパケットを処理したTMMの番号や、Virtual Serverの名前などが追加されます。nの数が増えるに従って、さらに様々な内部情報が付加されます。nの数は最大３つまでです。

# その他
## -s 0
一般的なtcpdumpにもありますが、**-s**は、取得する１パケットあたりのサイズを指定するオプションで、デフォルトでは先頭96byteしか保存されません。
**-s 0**と、0を指定することで、サイズが無制限になり、パケットの全データが保存されます。これがないと必要な情報が取れなかったりします。

## パケットキャプチャデータの先頭に含まれてる情報
BIG-IPで取得したパケットキャプチャの先頭１パケット目には、機器の型番やホスト名、バージョン、tcpdumpを実行した際の引数などが保存されています。キャプチャデータをWiresharkに読み込ませると確認できます。

# WiresharkでF5 Wireshark Pluginを有効にする

BIG-IPのtcpdumpで"-i"オプションに":nnn"を付与した場合、BIG-IP固有の拡張情報が含まれるのは上記に書いた通りです。

それらの情報をWiresharkで表示できると、BIG-IPのトラブルシュートの際にとても役に立ちます。

このためには、Wiresharkにこのデータを解析するためのPluginを追加する必要があります。

以前は、DevCentralからPluginをダウンロードし、WiresharkのPluginsディレクトリに保存するなどの手間が必要でしたが、**Wireshark 2.6からは、標準でF5 Wireshark Pluginが含まれるようになりました**。（素晴らしい！）

詳細は以下の、DevCentralのページを参照してください。

[DevCentral:F5 Wireshark Plugin](https://devcentral.f5.com/wiki/AdvDesignConfig.F5WiresharkPlugin.ashx)

このPluginは、標準状態では無効になっているので、設定を変更して有効にする必要があります。

## F5 Wireshark Pluginを有効にする

1. Wiresharkのメニューより"Analyze - Enabled Protocols"を選択
2. "F5 Ethernet Trailer" に含まれている "f5ethertrailer"にチェックを入れ、OKを押す。

<img width="1099" alt="wiresshark_01.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/157891/797decda-7ee5-fc8e-6a6f-8eecdee65c1d.jpeg">

これでPluginを有効にできます。

## F5 Wireshark Pluginの有無でどう変わるか

以下は、BIG-IPで取得したあるパケットキャプチャファイルを、Plugin有効/無効、それぞれのパターンのWiresharkで開いた時の画面例です。

- Plugin無効

<img width="1304" alt="wiresshark_02.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/157891/5be7f88c-424f-8184-6743-36cd0ebf73d4.jpeg">

一般的なWiresharkの情報が表示されています。BIG-IPのtcpdumpでは、先頭にtcpdump実行時の引数が載ります。

- Plugin有効

<img width="1304" alt="wiresshark_03.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/157891/10910101-1dc9-ef52-4fe0-90dea451b50a.jpeg">

元々の情報に加えて、上部のパケットリストのウインドウに、各パケットについて、通信の方向（IN/OUT）、それに、どのtmmで処理したのか、といった情報が載ってることがわかります。

また、真ん中のウィンドウには、**F5 Ether Trailer Protol**という情報が追加表示されています。ここは"Low Details", "Medium Details", "High Details"とさらにドリルダウンが可能になっています。

ドリルダウンするとそこには様々な情報が含まれています。例えば、Medium Detailsに含まれる、Flow IDやPeer IDは、BIG-IPがフルプロキシ（クライアントサイドとサーバサイドで、異なるTCPセッション）で動作している際に、通信を追いかける上でとても有用です。

# 参考URL
 - [AskF5: K411: Overview of packet tracing with the tcpdump utility](https://support.f5.com/csp/article/K411)
 - [AskF5: K6546: Recommended methods and limitations for running tcpdump on a BIG-IP system](https://support.f5.com/csp/article/K6546)
 - [AskF5: K13637: Capturing internal TMM information with tcpdump](https://support.f5.com/csp/article/K13637)
 - [DevCentral:F5 Wireshark Plugin](https://devcentral.f5.com/wiki/AdvDesignConfig.F5WiresharkPlugin.ashx)