วิธีการระบุ NICs ที่เชื่อมต่อกับสวิตช์เดียวกันจากกล่อง Linux?


15

ตั้งค่าเริ่มต้น

ในฐานะผู้ดูแลระบบ Linux คุณได้ติดตั้งกล่อง Linux ใหม่พร้อม 6 NICs eth0 ถึง eth5 อินเตอร์เฟส eth0 ได้รับการกำหนดค่าอย่างถูกต้องและอินเทอร์เฟซอื่น ๆ ทั้งหมดนั้นทำงานอยู่ แต่ไม่มีที่อยู่ IP พวกเครือข่ายเพิ่งต่อสายเคเบิลสี่เส้นเข้ากับกล่องนี้ สาย LAN สองเส้นใช้สำหรับเชื่อมต่อกล่องกับเครือข่ายการผลิตและใช้สายเคเบิลสองเส้นเพื่อเชื่อมต่อกล่องกับเครือข่ายส่วนตัว คุณรู้เพียงว่า 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
ปัญหาจริงและน่ารำคาญฉันอาจเพิ่ม ฉันออกจากโรงเรียนเป็นเวลานาน ...
Reiner Rottmann

ตกลง - เหตุผลที่ฉันถามคือวิธีที่คุณใช้คำถามทำให้ฉันนึกถึงรูปแบบของหนังสือเครือข่ายของฉัน :-)
voretaq7

คำตอบ:


10

สวิตช์อาจส่งข้อมูลที่คุณต้องการไปแล้ว หากเป็นสวิตช์ของ Cisco โดยค่าเริ่มต้นพวกเขาจะใช้กระบวนการที่เรียกว่า CDP (Cisco Discovery Protocol) ซึ่งจะให้ข้อมูลเกี่ยวกับสวิตช์ที่เชื่อมต่อกับคุณ

คุณสามารถใช้ tcpdump เพื่อดูข้อมูลนี้ด้วยรายการต่อไปนี้ (แทนอินเทอร์เฟซที่เหมาะสม):

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

CDP เวอร์ชันมาตรฐานคือ LLDP (โปรโตคอลชั้นการค้นพบลิงก์) ผู้ขายบางรายจะเปิดใช้งานสิ่งนี้เป็นค่าเริ่มต้นและปิดอื่น ๆ ดังนั้นระยะของคุณจะแตกต่างกันไป มีการใช้งาน LLDP บางอย่างสำหรับ Linux แต่ถ้าคุณต้องการบางอย่างที่คล้ายกับข้างบนคุณสามารถใช้สิ่งนี้ได้ (ตั้งค่า LLDP บนสวิตช์ของ Cisco และทดสอบด้านล่างซึ่งสอดคล้องกับข้างบนมากขึ้น):

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
จริงๆแล้วฉันใช้วิธีนี้และเขียนสคริปต์ไพ ธ อนตัวเล็ก ๆ ที่รัน tcpdumps เป็นเธรดในพื้นหลังจากนั้นฉันก็ส่งคำขอ arp และดูว่าอินเทอร์เฟซใดที่ได้รับแพ็คเกจ arp จาก src mac ใช้งานได้ แต่ต้องใช้เวลาพอสมควร
Reiner Rottmann

ฉันคิดว่าคุณกำลังพูดถึงการหมดเวลาของการ ping หรือไม่? คุณสามารถลอง fping หรือ nmap เป็นตัวเลือกเพื่อลดการหมดเวลาให้เหลือน้อยกว่าหนึ่งวินาที ตัวอย่างเช่น "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


ฉันพยายามทำสิ่งนี้และมันล้มเหลวที่นี่ในปี 2559 บน Ubuntu 14 ดังนั้น YMMV
Hack Saw
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.