とりあえずある問題が起こって、特定のIPをもつデバイスが物理的にどこに存在しているのかを確かめる必要があった。事の経緯はこんな感じ。
あるネットワーク内で新しくホストを立てた。ssh接続をしようとすると、なんだかconnection refusedされてしまう。でもpingが通る。色々調べたところ、どうやら同じipを使用する固定ホストが居る事が判明。(bind的には空いていたのだが。。)恐らく誰もその実態を把握しておらず、そのマシンがどこにあるのかすらも分からない。そこで、悪いやつを見つけて対処をしようとなったのが今回の流れ。ちなみに対象ネットワークは、firewall、ゲートウェイスイッチ、その下に10個未満のインテリジェントスイッチがあって、その先が末端orバカハブという感じ。
まぁでもどうやってその場所を見つけようかねってことになって、思いつかれた方法が二つ。
1. L1的な努力で頑張る
上流スイッチから順番にネットワークをL1的に切り分けて行って、疎通しないところに先にそのデバイスがあるはずだ。まぁ要するにpingを飛ばしといて、上流のポートを一つずつ抜いて行って、疎通が切れた先に居るよねという話。まぁ最悪これ。もちろん大事な通信してる時に切れちゃう可能性もあるので、最悪の手段ですが、こうやって見つけられなくはない。
2. スイッチの機能から頑張って追う
僕はインフラ屋さんじゃ無いので、どこまでの情報をインテリジェントスイッチが教えてくれるのか、あまり知らなかったのですが、スイッチだけにどのポートにどのmacアドレスがつながってるかは教えてくれるみたいですね。従って、その端末のmacアドレスさえ分かれば、下流にたどって行く事で先が見えると。
今回はまぁ急ぎじゃなかったので、2でやる方法を調べるかーってことで、みんなで調べながら見事犯人を突き止める事が出来たので、やり方を書いておきます。あ、実際やる方法はめちゃくちゃ簡単ではあります。また、Ciscoスイッチという前提でやってます。
まず、今回使ったのがCiscoのレイヤ2 Traceroute ユーティリティー。これは同じネットワークセグメント内のホスト同士であれば、macアドレスも同時に教えてくれる。コマンドは以下。(ちなみにenable必要)
1 |
traceroute mac ip [source ip address] [destination ip address] |
んで、例えば調べたい対象のipアドレスが555.666.777.888ならば、同じセグメントに属する111.222.333.444のマシンをソースとして、次のように打つ。
1 |
traceroute mac ip [111.222.333.444] [555.666.777.888] |
そうすると、こんな風に返ってくる。
1 2 3 4 5 6 7 8 9 10 |
Translating IP to mac ..... 111.222.333.444 => 0000.ffff.1111 555.666.777.888 => 0000.ffff.2222 Source 0000.ffff.1111 found on switch1 1 switch1 (111.333.555.777) : Gi0/1 => Gi0/2 2 switch2 (222.444.666.888) : Gi0/1 => Gi0/2 . . ..... |
ここで、何と見つけたいホスト555.666.777.888のmacアドレスが00:00:ff:ff:22:22である事がわかった。とりあえずココマデ分かればベンダーコードから、ある程度どんなマシンかが推測できますね。
次。今度はこのmacアドレスをもとにどのスイッチのどのポートにぶら下がっているかを特定して行く。これもインテリジェントスイッチのmacアドレステーブルを見て行けばいいようだ。macアドレステーブルの見方はこう。
1 |
show mac-address-table |
こうすると、こんな結果が返ってきますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 0000.ffff.1111 DYNAMIC Gi0/1 1 0000.ffff.2222 DYNAMIC Gi0/2 1 0000.ffff.3333 DYNAMIC Gi0/3 1 0000.ffff.4444 DYNAMIC Gi0/4 1 1111.eeee.5555 DYNAMIC Gi0/5 1 1111.eeee.6666 DYNAMIC Gi0/6 1 1111.eeee.7777 DYNAMIC Gi0/7 1 1111.eeee.8888 DYNAMIC Gi0/8 |
そうすると、先ほど調べたmacアドレスを見る感じ、どうやらこれはGi0/2の先にありそうだと分かる。そこで、Gi0/2の先にある物を調べる。そして、スイッチだったらまた同じようにmacアドレステーブルを見て、そう出なければそのあたりが犯人という事になりますね。
こんな感じで、特定のipを持つある端末を特定する事が出来ました。
なかなかスイッチの仕組みを知っていても(ipとmacがわかればわかりそうってことを知ってても)インテリジェントスイッチがどこまで情報を提供してくれているのかが分からない状態だったので、暗中模索でしたが、とりあえずインテリジェントスイッチはインテリジェントだったってことで、助かりました。
めでたしめでたし。