Bagaimana cara mengidentifikasi NIC yang terhubung ke saklar yang sama dari kotak Linux?

15

Pengaturan awal

Sebagai administrator Linux, Anda telah menginstal kotak Linux baru dengan 6 NIC eth0 ke eth5. Antarmuka eth0 dikonfigurasikan dengan benar dan semua antarmuka lainnya saat ini berjalan tetapi tanpa alamat IP. Orang-orang jaringan hanya memasang empat kabel ke kotak ini. Dua kabel LAN digunakan untuk menghubungkan kotak ke jaringan produksi dan dua digunakan untuk menghubungkan kotak ke jaringan pribadi. Anda hanya tahu bahwa eth0 terhubung ke jaring produksi. Tapi Anda tidak tahu NIC lain yang terhubung ke switch yang sama karena ada generasi server yang berbeda dan / atau orang-orang jaringan menggunakan NIC yang salah untuk koneksi mereka.

Tugas di tangan

Karena pengaturan ini tipikal untuk infrastruktur Anda, Anda ingin mengotomatiskan konfigurasi antarmuka ikatan. Sekarang Anda memiliki tugas untuk mendeteksi NIC mana yang tidak terhubung sama sekali dan NIC mana yang terhubung ke sakelar yang sama sehingga mereka dapat terikat. Anda hanya memiliki akses ke kotak Linux dan tidak dapat meminta switch.

Ide ide

Mendeteksi status tautan itu mudah:

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

Tetapi bagaimana cara mencocokkan perangkat yang terhubung ke saklar yang sama?

Di HP-UX ada alat untuk tujuan itu yang disebut linkloop [1]. Alat Linux resmi hilang (ada proyek SourceForce lama, meskipun).

Solusi yang mungkin telah terlintas di pikiran saya adalah:

  1. Dengarkan di semua antarmuka dengan tcpdump. Membuat dan mengirim paket ICMP (broadcast). Antarmuka yang melihat paket itu perlu dihubungkan ke sakelar yang sama. -> butuh saran alat sederhana yang dapat digunakan untuk itu. Saya ingin menggunakan perintah shell biasa atau Python untuk scripting.

  2. Cobalah berbicara dengan kotak eksternal melalui protokol mudah (HTTP?) Dan lihat apakah ada respons. -> Kesalahan cenderung dan tergantung pada kotak eksternal.

Apakah Anda memiliki ide atau saran lebih lanjut bagaimana menyelesaikan tugas ini?

Terima kasih sebelumnya atas semua komentar!

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

Reiner Rottmann
sumber
1
Ini BENAR-BENAR berbau pekerjaan rumah - Apakah ini masalah aktual yang Anda hadapi di lingkungan produksi?
voretaq7
2
Masalah nyata dan yang menjengkelkan, saya dapat menambahkan. Saya keluar dari sekolah untuk waktu yang lama ...
Reiner Rottmann
OK - alasan saya tanyakan adalah cara Anda mengungkapkan pertanyaan mengingatkan saya pada gaya salah satu buku teks jaringan saya :-)
voretaq7

Jawaban:

10

Sakelar mungkin sudah mengirimi Anda informasi yang Anda inginkan. Jika mereka adalah switch Cisco, secara default mereka akan menggunakan proses yang disebut CDP (Cisco Discovery Protocol) yang akan memberi Anda informasi tentang switch di mana ia terhubung.

Anda dapat menggunakan tcpdump untuk melihat informasi ini dengan yang berikut (mengganti antarmuka yang sesuai):

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

Versi standar berbasis CDP adalah LLDP (protokol penemuan lapisan tautan). Beberapa vendor akan mengaktifkan ini secara default dan yang lainnya mati, sehingga jarak tempuh Anda akan bervariasi. Ada beberapa implementasi LLDP untuk Linux, tetapi jika Anda menginginkan sesuatu yang mirip dengan di atas, Anda dapat menggunakan ini (mengatur LLDP pada switch Cisco dan menguji di bawah ini, yang lebih konsisten dengan di atas):

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

Kecuali itu, saya akan mengatakan bahwa modifikasi opsi 1 yang Anda berikan mungkin bekerja, namun, alih-alih mengirimkan ICMP siaran, Anda dapat mencoba ICMP normal (ke host yang tidak ada dalam tabel ARP) dan menangkap paket ARP. Jika permintaan ARP dikirim eth0 dan Anda menerimanya di eth1 dan eth3, maka Anda tahu itu ada di VLAN yang sama. Perintah paling sederhana untuk itu adalah sebagai berikut:

tcpdump -i eth0 arp
YPelajari
sumber
1
Sebenarnya saya pergi dengan solusi ini dan menulis skrip python kecil yang menjalankan tcpdumps sebagai utas di latar belakang dan kemudian saya mengirimkan permintaan arp dan melihat antarmuka mana yang menerima paket arp dari mana src mac. Bekerja tetapi dengan semua timeout dibutuhkan beberapa waktu.
Reiner Rottmann
Saya berasumsi Anda berbicara tentang ping timeout? Anda bisa mencoba fping atau nmap sebagai opsi untuk mengurangi batas waktu menjadi di bawah satu detik. Misalnya, "fping -c1 -t200 192.168.0.1" atau "nmap -sP --max-retries = 1 --host-timeout = 200ms 192.168.0.1".
YPelajari
3

Jika saklar akan berkomunikasi dengan Anda menggunakan LLDP, Anda mungkin dapat menjalankan LLDP dan menemukan informasi lebih lanjut di sana.

mcmeel
sumber
3

Jika switch adalah perangkat cisco Anda mungkin bisa mendapatkan info CDP, asalkan mereka mengumumkan / menyiarkan info cdp

misal alat cdp atau cdpr

mike brentlinger
sumber
1

Mengapa tidak mengunduh dan membuat linkloopalat saja? Tidak setua itu ...

Kalau tidak, saya hanya akan menggunakan beberapa alat yang akan disiarkan di layer 2 dan memverifikasi bahwa Anda menerimanya melalui tcpdump.

Mengirim paket ICMP siaran mudah ping -b 192.168.1.255

pengguna606723
sumber
Saya hanya mencoba melakukan ini, dan gagal di sini pada tahun 2016 di Ubuntu 14, jadi YMMV.
Hack Saw