web-dev-qa-db-ja.com

Linuxボックスから同じスイッチに接続されているNICを識別する方法

初期設定

Linux管理者として、6つのNIC eth0〜eth5を備えた新しいLinuxボックスをインストールしました。 eth0インターフェースは正しく構成されており、他のすべてのインターフェースは現在稼働していますが、IPアドレスがありません。ネットワーク担当者は、このボックスに4本のケーブルを接続するだけです。ボックスを本番ネットワークに接続するために2本のLANケーブルが使用され、ボックスをプライベートネットワークに接続するために2本のケーブルが使用されます。 eth0が本番ネットに接続されていることを知っているだけです。しかし、他のNICが同じスイッチに接続されているのはわかりません。サーバーの世代が異なるか、ネットワーク担当者が接続に間違ったNICを使用しているためです。

手元のタスク

このセットアップはご使用のインフラストラクチャでは一般的であるため、結合インターフェースの構成を自動化する必要があります。これで、まったく接続されていないNICと、同じスイッチにリンクされているNICを検出して、それらを結合できるようになりました。 Linuxボックスにのみアクセスでき、スイッチを照会できません。

アイデア

リンクステータスの検出は簡単です。

ethtool $device | grep 'Link detected' | cut -d ':' -f 2

しかし、同じスイッチに接続されているデバイスをどのように一致させるのでしょうか。

HP-UXには、linkloop[1]と呼ばれるそのためのツールがあります。公式のLinuxツールがありません(ただし、古いSourceForceプロジェクトがあります)。

すでに私の頭に浮かんだ可能な解決策は次のとおりです。

  1. Tcpdumpを使用してすべてのインターフェースをリッスンします。 ICMP(ブロードキャスト)パケットを作成して送信します。そのパケットを認識するインターフェイスは、同じスイッチに接続する必要があります。 ->そのために使用できる簡単なツールの提案が必要です。単純なシェルコマンドまたはスクリプトにPythonを使用したいと思います。

  2. 簡単なプロトコル(HTTP?)を介して外部ボックスと通信して、応答があるかどうかを確認してください。 ->エラーが発生しやすく、外部ボックスに依存しています。

このタスクを解決するためのアイデアや提案はありますか?

すべてのコメントを事前にありがとう!

[1] http://linux.die.net/man/1/linkloop

15
Reiner Rottmann

スイッチは、必要な情報をすでに送信している場合があります。それらがCiscoスイッチである場合、デフォルトでは、CDP(Cisco Discovery Protocol)と呼ばれるプロセスを使用して、接続されているスイッチに関する情報を提供します。

Tcpdumpを使用してこの情報を表示するには、次のようにします(適切なインターフェースに置き換えます)。

tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000'

CDPの標準ベースのバージョンはLLDP(リンク層検出プロトコル)です。一部のベンダーはこれをデフォルトでオンにし、他のベンダーはオフにするため、マイレージは異なります。 LinuxにはLLDP実装がいくつかありますが、上記と同様のものが必要な場合は、これを使用できます(CiscoスイッチでLLDPをセットアップし、以下でテストしました。これは、上記とより一貫しています)。

tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether proto 0x88cc'

それを除けば、提供するオプション1の変更は機能するかもしれませんが、ブロードキャストICMPを送信する代わりに、(ARPテーブルにないホストに)通常のICMPを試し、ARPパケットをキャプチャできます。 ARP要求がeth0から送信され、それをeth1とeth3で受信した場合、それらは同じVLAN上にあることがわかります。そのための最も簡単なコマンドは次のとおりです。

tcpdump -i eth0 arp
10
YLearn

スイッチがLLDPを使用して通信する場合は、 [〜#〜] lldp [〜#〜] を実行して詳細を確認できる場合があります。

3
mcmeel

スイッチがCiscoデバイスである場合、CDP情報をアナウンスまたはブロードキャストしている場合、CDP情報を取得できる可能性があります。

cdp tools または cdpr

3

なぜlinkloopツールをダウンロードしてビルドしないのですか?そんなに古くない...

それ以外の場合は、レイヤー2でブロードキャストするツールを使用して、tcpdumpで受信することを確認します。

ブロードキャストICMPパケットの送信は簡単ですping -b 192.168.1.255

1
user606723