Проверка коммутации на Astra Linux с использованием LLDP
Как вы все прекрасно знаете, во всём виноваты сетевики. Они и курс доллара задрали, они и инфляцией управляют. Да что там говорить, они и в лифте нассали!
Ну вот и у нас не исключение. Если где-то что-то не работает, то конечно же виновата сеть. Поэтому, у любого уважающего себя инженера, уже давно выработался механизм борьбы и защиты себя любимого. Ладно, это была присказка, вот вам сама сказка.
Делаем значит мы фабрику, а в ней внезапно в качестве поставки, ещё идёт примерно 150 серверов. И каждый имеет минимум по 2 карточки, с 2 интерфейсами на каждой. Получается 2х2х150 = 600 линков. Плюс некоторые через патч-панель, то есть уже побольше… И коммутировать их конечно же будет человек с закрытыми глазами, на скейте и надувая шар.
Т.к. мы уже не первый раз занимаемся подобным, то конечно же у нас есть скрипты для проверки коммутации, которые учитывают разных сетевых вендоров и всякие нюансы. По сути ничего сложного. Берём LLDP данные с коробки и пошли сравнивать с той таблицей, которую нам собрали проектировщики. Если ок - отлично, если ошибка - отдаём на исправление и после проверяем повторно. Кажется, нет никакой проблемы. Бери да проверяй. Но не тут то было.
На серверах конечно же Linux и это плюс. Но он Astra и это минус. В теории, мы можем взять и поставить туда любой пакет с lldp, но на практике не можем. Не спрашивайте почему, такой вот кейс. Кажется, что только руками? А вот и нет.
На серверах стоят карточки Chelsio TR6225, и внезапно выяснилось, что они не просто так называются SmartNIC, мало того что умеют во всякие TCP Offload, так они ещё и светят LLDP со своих портов. Как им управлять я не нашёл, но в целом уже спасибо и за это. Правда есть один нюанс. Светят они без указания своего hostname, наименования порта, да и вообще нет никаких TLV, только лишь один MAC, да и тот не полностью совпадает с тем, что выдаёт вывод “ip a”…
Присмотревшись к выводам “ip a” и тому, что видно по LLDP на стороне коммутатора, я заметил одну интересную особенность. Все адреса на хостах, имеют значения адресов, начинающиеся либо с “0”, либо с “8”. При этом все значения полученные по LLDP с этих же хостов, имеют значения, начинающиеся с “7”, или с “F”.
Так, так, так. То есть карточка берёт свой физический MAC интерфейса, прибавляет к нему +7 и вот такой MAC адрес в результате отправляет по LLDP.
Собственно решение уже понятно. Нужно собрать все значения с хостов с указанием их хостнеймов, наименований интерфейсов и тех MAC адресов, которые на них указаны. Дальше сдвинуть полученные значения на +7 и уже пытаться матчить по тому, что получаем на коммутаторах, что в итоге сравнить с таблицей коммутации, спроектированной изначально. 😂
Вот таким “очевидным” и “простым” способом, мы нашли часть перепутанных линков на хостах и доказали, что коммутатор настроен корректно. 👍