Начальная настройка
Как администратор Linux вы установили новую версию Linux с 6 сетевыми картами от eth0 до eth5. Интерфейс eth0 настроен правильно, и все остальные интерфейсы в данный момент работают, но без IP-адреса. Сетевые парни просто подключили четыре кабеля к этой коробке. Два кабеля локальной сети используются для подключения блока к производственной сети, а два - для подключения блока к частной сети. Вы только знаете, что eth0 подключен к производственной сети. Но вы не знаете, какой другой сетевой адаптер подключен к тому же коммутатору, поскольку серверы разных поколений и / или сетевые парни используют неправильные сетевые карты для своих подключений.
Задача под рукой
Поскольку эта настройка типична для вашей инфраструктуры, вы хотите автоматизировать настройку связующих интерфейсов. Теперь у вас есть задача определить, какие сетевые адаптеры вообще не подключены, а какие сетевые карты связаны с одним и тем же коммутатором, поэтому они могут быть связаны. У вас есть доступ только к блокам Linux и вы не можете запрашивать переключатели.
идеи
Определить статус ссылки легко:
ethtool $device | grep 'Link detected' | cut -d ':' -f 2
Но как сопоставить устройства, подключенные к одному коммутатору?
В HP-UX есть инструмент для этой цели, который называется linkloop [1]. Официальный инструмент Linux отсутствует (хотя есть старый проект SourceForce).
Возможные решения, которые уже пришли мне в голову:
Слушайте на всех интерфейсах с tcpdump. Составьте и отправьте ICMP (широковещательный) пакет. Интерфейсы, которые видят этот пакет, должны быть подключены к одному и тому же коммутатору. -> нужны предложения простых инструментов, которые могут быть использованы для этого. Я хотел бы использовать простые команды оболочки или Python для сценариев.
Попробуйте поговорить с внешним блоком через некоторый простой протокол (HTTP?) И посмотрите, есть ли ответ. -> Ошибка склонна и зависит от внешнего блока.
У вас есть дальнейшие идеи или предложения, как решить эту задачу?
Заранее спасибо за все комментарии!
Ответы:
Возможно, коммутаторы уже отправляют вам нужную информацию. Если они являются коммутаторами Cisco, по умолчанию они будут использовать процесс, называемый CDP (протокол обнаружения Cisco), который предоставит вам информацию о коммутаторе, к которому он подключен.
Вы можете использовать tcpdump для просмотра этой информации следующим образом (заменив соответствующий интерфейс):
Стандартной версией CDP является LLDP (протокол обнаружения канального уровня). У некоторых поставщиков это будет включено по умолчанию, а у других отключено, поэтому ваш пробег будет отличаться. Существует несколько реализаций LLDP для Linux, но если вы хотите что-то похожее на вышеприведенное, вы можете использовать это (настройте LLDP на коммутаторе Cisco и протестируйте приведенное ниже, что более соответствует приведенному выше):
За исключением этого, я бы сказал, что предоставленная вами модификация варианта 1 может сработать, однако вместо отправки широковещательного ICMP вы можете попробовать обычный ICMP (на хост, не входящий в таблицу ARP) и перехватить пакеты ARP. Если запрос ARP отсылается по eth0, и вы получаете его по eth1 и eth3, то вы знаете, что они находятся в одной VLAN. Простейшая команда для этого выглядит следующим образом:
источник
Если коммутатор свяжется с вами по протоколу LLDP, вы можете запустить LLDP и найти там дополнительную информацию.
источник
Если коммутаторы являются устройствами Cisco, возможно, вы могли бы получить информацию CDP, при условии, что они объявляют / транслируют информацию CDP.
например, инструменты cdp или cdpr
источник
Почему бы просто не скачать и собрать
linkloop
инструмент? Это не так старый ...В противном случае, я бы просто использовал какой-нибудь инструмент, который будет транслироваться через слой 2, и проверим, что вы получаете его через tcpdump.
Отправка широковещательного ICMP-пакета - это просто
ping -b 192.168.1.255
источник