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


15

初期設定

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


1
これは本当に宿題のような匂いがします-これは実稼働環境で直面している実際の問題ですか?
voretaq7

2
本当の問題と迷惑なもの、私は追加するかもしれません。私は...長い時間のために学校から出ています
ライナーロットマン

OK-私が尋ねる理由は、あなたが私のネットワーク教科書の1つのスタイルを思い出させた質問を言い表した方法です:
voretaq7

回答:


10

スイッチは、必要な情報をすでに送信している可能性があります。シスコスイッチの場合、デフォルトでは、接続されているスイッチに関する情報を提供する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を送信する代わりに、通常のICMPを(ARPテーブルにないホストに)試みてARPパケットをキャプチャできます。ARP要求がeth0から送信され、eth1およびeth3で受信した場合、それらは同じVLAN上にあることがわかります。そのための最も簡単なコマンドは次のとおりです。

tcpdump -i eth0 arp

1
実際、このソリューションを使用して、バックグラウンドでスレッドとしてtcpdumpを実行する小さなPythonスクリプトを作成し、arp要求を送信して、どのインターフェイスがどのsrc macからarpパッケージを受信するかを確認します。動作しますが、すべてのタイムアウトで時間がかかります。
ライナーロットマン

私はあなたがpingのタイムアウトについて話していると思いますか?オプションとしてfpingまたはnmapを試して、タイムアウトを1秒未満に減らすことができます。たとえば、「fping -c1 -t200 192.168.0.1」または「nmap -sP --max-retries = 1 --host-timeout = 200ms 192.168.0.1」。
YLearn

3

スイッチがLLDPを使用して通信する場合は、LLDPを実行して、そこで詳細情報を見つけることができます。



1

linkloopツールをダウンロードしてビルドするだけではどうですか?そんなに古くない...

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

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


私はこれをやろうとしましたが、2016年にUbuntu 14で失敗しましたので、YMMV。
ハック見た
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.