Początkowe ustawienia
Jako administrator Linuksa zainstalowałeś nową skrzynkę Linux z 6 kartami sieciowymi eth0 do eth5. Interfejs eth0 jest poprawnie skonfigurowany, a wszystkie inne interfejsy są obecnie uruchomione, ale bez adresu IP. Faceci z sieci po prostu podłączyli cztery kable do tego urządzenia. Dwa kable LAN są używane do podłączenia urządzenia do sieci produkcyjnej, a dwa są używane do podłączenia urządzenia do sieci prywatnej. Wiesz tylko, że eth0 jest podłączony do sieci produkcyjnej. Ale nie wiesz, która inna karta sieciowa jest podłączona do tego samego przełącznika, ponieważ istnieją różne generacje serwerów i / lub faceci sieci używają niewłaściwych kart sieciowych do swoich połączeń.
Zadanie pod ręką
Ponieważ ta konfiguracja jest typowa dla Twojej infrastruktury, chcesz zautomatyzować konfigurację interfejsów łączenia. Teraz masz zadanie wykryć, które karty sieciowe w ogóle nie są podłączone, a które karty sieciowe są połączone z tym samym przełącznikiem, aby mogły zostać połączone. Masz dostęp tylko do Linux-a i nie możesz przeszukiwać przełączników.
Pomysły
Wykrywanie statusu łącza jest łatwe:
ethtool $device | grep 'Link detected' | cut -d ':' -f 2
Ale jak dopasować urządzenia podłączone do tego samego przełącznika?
W HP-UX jest do tego celu narzędzie o nazwie linkloop [1]. Brakuje oficjalnego narzędzia Linux (istnieje jednak stary projekt SourceForce).
Możliwe rozwiązania, które już przyszły mi do głowy:
Słuchaj na wszystkich interfejsach za pomocą tcpdump. Utwórz i wyślij pakiet ICMP (rozgłoszeniowy). Interfejsy, które widzą ten pakiet, muszą być podłączone do tego samego przełącznika. -> potrzebujesz sugestii prostych narzędzi, które mogą być do tego użyte. Chciałbym używać skryptów jako poleceń powłoki lub Pythona.
Spróbuj porozmawiać z zewnętrznym urządzeniem za pomocą prostego protokołu (HTTP?) I sprawdź, czy jest odpowiedź. -> Podatne na błędy i zależne od zewnętrznego urządzenia.
Czy masz dalsze pomysły lub sugestie, jak rozwiązać to zadanie?
Z góry dziękuję za wszystkie komentarze!
Odpowiedzi:
Przełączniki mogą już wysyłać Ci potrzebne informacje. Jeśli są to przełączniki Cisco, domyślnie będą korzystać z procesu o nazwie CDP (Cisco Discovery Protocol), który dostarczy informacji o przełączniku, do którego jest podłączony.
Możesz użyć tcpdump, aby wyświetlić te informacje w następujący sposób (zastępując odpowiedni interfejs):
Standardowa wersja CDP to LLDP (protokół wykrywania warstwy łącza). Niektórzy dostawcy mają to domyślnie włączone, a inni wyłączone, więc przebieg może się różnić. Istnieją pewne implementacje LLDP dla Linuksa, ale jeśli chcesz czegoś podobnego do powyższego, możesz tego użyć (skonfiguruj LLDP na przełączniku Cisco i przetestuj poniższe, co jest bardziej spójne z powyższym):
Pomijając to, powiedziałbym, że modyfikacja podanej przez ciebie opcji 1 może działać, jednak zamiast wysyłać rozgłaszany ICMP, możesz wypróbować normalny ICMP (do hosta spoza tabeli ARP) i przechwytywać pakiety ARP. Jeśli żądanie ARP zostanie wysłane eth0, a otrzymasz je na eth1 i eth3, to wiesz, że są one w tej samej sieci VLAN. Najprostsze do tego polecenie jest następujące:
źródło
Jeśli przełącznik będzie komunikował się z Tobą za pomocą LLDP, być może będziesz mógł uruchomić LLDP i znaleźć tam więcej informacji.
źródło
Jeśli przełączniki są urządzeniami Cisco, możesz uzyskać informacje CDP, pod warunkiem, że ogłaszają / transmitują informacje CDP
np. narzędzia cdp lub cdpr
źródło
Dlaczego nie pobrać i zbudować
linkloop
narzędzia? To nie jest tak stare ...W przeciwnym razie użyłbym tylko narzędzia, które będzie nadawać na warstwie 2 i sprawdził, czy otrzymujesz je za pomocą tcpdump.
Wysłanie pakietu emisji ICMP jest łatwe
ping -b 192.168.1.255
źródło