ポートミラーリングとは?Cisco機器 他3種の設定コマンドを解説

IT技術解説

ネットワークエンジニアは構築時のテスト、障害時のパケットキャプチャを行うためにポートミラーリングを行うことで確認したいパケットを確実にキャプチャすることができます。

今回はポートミラーリングについての解説と、様々なメーカーの機器の設定コマンド方法を紹介します。

コマンドを使用し、ワイヤーシャークでパケットキャプチャを行う方法を、下の記事で解説しているので是非ご確認ください。

ポートミラーリング とは

ポートミラーリングは「モニターポート」、「ミラーポート」ともよばれます。

ネットワークスイッチの対象のポートをミラーする側、される側という設定を行い、 既に使用中のポートを通過する通信パケットを、コピーするような感覚で別のポートからキャプチャすることができます。

ネットワークの通信では、パケットと呼ばれる単位で情報がやり取りされており、そのパケットに宛先、送信先、通信内容のデータが含まれています。 それに応答、破棄という動作をお互いに行うことで通信が行われます。

その内容をパケットキャプチャソフト、専用装置などで確認することで、通信障害、接続の不安定、遅延などといった障害の原因調査の糸口になるため、既にケーブルが接続されているような稼働中の環境で利用する場面が多いです。

ポートミラーリングを使用したパケットキャプチャ例1

ポートミラーリングはスイッチにコマンドを入力し、どのポートをどのポートにミラーリングするか、設定を行います。

ミラーリングの設定は「ミラーする側」「される側」を間違えると通信ができなくなるため、十分な注意が必要です。特に稼働中の危機に設定を行う際は気を付けてください。

また、NECやHPEのQXシリーズなどの一部機器では「リフレクターポート」という機能があり、キャプチャしたパケットを更に別のスイッチに転送するといったことも可能です。

ポートミラーリング(パケットキャプチャ) を行うべきタイミング

ポートミラーリングはネットワーク障害の原因調査に主に行うと前途しましたが、具体的にどのようなタイミングで行うのでしょうか。

設定を行うタイミングというのは、パケットキャプチャを行うタイミングと同じ意味ですが。障害時の原因調査以外にも、活用できるポイントがいくつかあるのでご紹介したいと思います。

正常な通信が行えないとき

ネットワークのトラブルといえばこれが一番多いかと思いますが、通信不可の際の原因は正直いくらでもあり得ます。

機器の設定不備、機器やケーブルの破損、クライアント、サーバ側の問題など挙げれ出すときりがないですが、稼働中のスイッチにミラーリングの設定を入力し、パケットキャプチャを行うという原因調査は、私の感覚的には最終手段と考えています。

稼働中のスイッチにコマンドを入力するという行為と、ポートミラーリングを行うという行為は、間違えた場合のことを考えるとリスクにもなりという点と、時間がかかる作業をとなるためです。

機器の設定もうまくいっているはずで、ハード、ケーブルなど故障もしていないというのが最低条件で、対象の端末のみが通信できない、昨日まで可能だった通信ができない。などの切り分けを行い切った後の調査手段として実施することをお勧めします。

正常な通信が行えない、というトラブルの調査で利用する場合、送信元が送ったパケットに対し、宛先のIPから 返答のパケットが出ているか、破棄やエラーパケットが返されていないかを確認します。

ループしている可能性があるとき

ネットワークでループが発生した場合、キャプチャを行っていると、1秒間に何百パケットもキャプチャされるため「ループが発生している」という判断が可能です。

単純なL2スイッチやHUBを接続して発生するループはブロードキャストのため、ミラーリングポートの設定を行わずともループ範囲内のポートにPCを接続し、キャプチャを行うと確認可能ですが、スイッチの幹線をミラーリングしキャプチャを行うとブロードキャスト以外のパケットもキャプチャ可能です。

ミラーリングポートを使用したパケットキャプチャ例2

サーバに通信している機器を洗い出したいとき

これは私が実際に行った例ですが、サーバの移行、IP変更などを行う移行期間中に、旧サーバを宛先にまだ通信を行っているクライアントを洗い出す際に使用します。

今はまだ使用しているが将来撤去予定の機器のIPを宛先に、パケットを送信しているクライアントやシステムがある場合、送信元を特定するために利用します。

この場合は、コアスイッチなど全ての通信が通過すると考えられるポートをミラーリングします。

サーバが接続しているポートでも要件は達成可能ですが、ブロードキャストなどの通信の場合、コアスイッチ(L3)は破棄するので、同じネットワークセグメントの一番上位のポートでキャプチャを行い、使用していないIPに対し通信を行っていないか調査を行います。

ミラーリングポートを使用したパケットキャプチャ例3

検証時、送受信パケットを確認するとき

これは本番稼働していない機器に対してのキャプチャを行う場合ですが、機器同士が接続しているポートを通過しているパケットを確認したい場合や、構築がうまくいかず通信の内容を確認したい場合に利用します。

例えばALCやファイアウォールルールを設定している機器や、VPNなどのクライアントからは状況が確認できないネットワークを構築する場合は、幹線の送受信パケットを確認すると問題が解決することや、本番稼働時に思わぬトラブルを招くなどの心配をなくすことができます。

番外編 -別のスイッチへパケットを転送したい場合-

ミラーリングポートで対象のポートで発生するパケットを転送する場合、同じスイッチの別ポートに転送することになりますが、NECのQXシリーズでは「リフレクターポート」という設定を行うことで、別のスイッチに転送することが可能です。

https://invisibletechnology.jp/qx-reflector/

こちらもトラブル対応や原因調査などで非常に役立つ技術です。

ミラーリングポートの設定コマンド

メーカーによってミラーリングポートを設定するコマンドは多少異なりますが、ミラーする側、される側を設定するという考え方は同じです。

機種によってはインバウンドのみ、特定のVLAN、パケットのみをミラーリングする、という設定も行えますが今回は全てミラーリングする方法をご紹介します。

Cisco catalyst コマンド

まずは、Ciscoのスイッチ、catalystへの設定コマンドをご紹介します。

下記はコマンドは、1番ポートのパケットを2番ポートへミラーリングする場合の例です。

Switch# conf t
Switch(config)# monitor session 1 source interface gigabitethernet1/0/1
Switch(config)# monitor session 1 destination interface gigabitethernet1/0/2
通過するパケットを確認したいポートを「souce」に設定し、キャプチャ装置となるPCを接続するポートを「destination」と設定します。

ポートチャネル(リンクアグリゲーション)を設定しているポートをミラーリングしたい場合は、コマンドのインターフェイスを指定する箇所で、チャネルグループを指定します。

HPE、NEC(QXシリーズ) スイッチ コマンド

HPE、NECのQXシリーズのスイッチへの設定コマンドをご紹介します。 下記はコマンドも、1番ポートのパケットを2番ポートへミラーリングする場合の例です。

[QX-switch]#mirroring-group 1 local

[QX-switch]#mirroring-group 1 mirroring-port gigabitethernet1/0/2 both
[QX-switch]#interface gigabitethernet1/0/1
[QX-switch-GigabitEthernet1/0/1]mirroring-group 1 monitor-port
HPE、QXの場合はインターフェイスの指定の先に、「ミラーリンググループ」というグループを作成し、そのグループにソース、モニターポートを参加させます。

ソース(ミラー元)のポートを指定する際は「in」「out」「both」を指定可能で、「both」は送受信両方をミラーリングします。

ALAXALA スイッチ コマンド

ALAXALAスイッチへの設定コマンドをご紹介します。

ALAXALAはミラーセッションの作成、ミラー元、ミラー先、ミラー内容を1行で設定します。

こちらもHPE、QXシリーズ同様bothなどのコマンドでミラーする内容の指定が可能です。 複数のポートを指定する場合は[-]でポートの範囲指定を行います。

(config)# monitor session 1 source interface gigabitethernet 0/1 both destination interface gigabitethernet 0/2

FUJITSU SR-Sシリーズ コマンド

FUJITSU SR-Sシリーズスイッチへの設定コマンドをご紹介します。

FUJITSUのネットワーク機器は階層がないので、1行内にポートや内容を記載したコマンド形式です。

ミラーポートは下記のように行います。

# ether 2 type mirror 0 1
# commit