LLDP (Link Layer Discovery Protocol) в VyOS

LLDP (Link Layer Discovery Protocol) - это стандартный протокол канального уровня (IEEE 802.1AB), используемый для автоматического обнаружения соседних сетевых устройств и обмена информацией о конфигурации. LLDP позволяет сетевым устройствам анонсировать свою идентификацию, возможности и соседей в локальной сети.

Обзор

LLDP используется для:

  • Автоматического обнаружения топологии сети: Определение физического подключения устройств
  • Документирования инфраструктуры: Автоматический сбор информации о соседних устройствах
  • Диагностики: Проверка корректности подключения кабелей
  • Мониторинга: Интеграция с системами мониторинга для визуализации топологии
  • Инвентаризации: Сбор информации о моделях, версиях ПО, серийных номерах

Как работает LLDP

LLDP работает путем передачи специальных Ethernet-фреймов (multicast) на адрес 01:80:c2:00:00:0e:

  1. Устройство периодически отправляет LLDP-пакеты на все активные интерфейсы
  2. Соседние устройства принимают эти пакеты и сохраняют информацию
  3. Информация хранится в течение определенного времени (TTL)
  4. Устройства также слушают LLDP-пакеты от соседей

Передаваемая информация

LLDP может передавать следующие типы данных (TLVs - Type-Length-Value):

  • Chassis ID: Уникальный идентификатор устройства (MAC-адрес, серийный номер)
  • Port ID: Идентификатор порта/интерфейса
  • TTL: Время жизни записи (обычно 120 секунд)
  • System Name: Имя устройства (hostname)
  • System Description: Описание системы (модель, версия ОС)
  • System Capabilities: Возможности устройства (router, switch, bridge)
  • Management Address: IP-адрес для управления
  • Port Description: Описание порта
  • Port VLAN ID: VLAN на порту (опционально)
  • Link Aggregation: Информация о link aggregation (опционально)

LLDP vs CDP

ХарактеристикаLLDPCDP (Cisco Discovery Protocol)
СтандартIEEE 802.1AB (открытый)Cisco proprietary
ПоддержкаВсе производителиТолько Cisco
Multicast адрес01:80:c2:00:00:0e01:00:0c:cc:cc:cc
Интервал отправки30 секунд (по умолчанию)60 секунд
РекомендацияПредпочтительноДля Cisco-only сетей

Базовая конфигурация

Включение LLDP

# Включить LLDP глобально
set service lldp

commit
save

После включения LLDP будет работать на всех интерфейсах по умолчанию.

Просмотр соседей LLDP

# Показать всех соседей
show lldp neighbors

# Детальная информация о соседях
show lldp neighbors detail

# Соседи на конкретном интерфейсе
show lldp neighbors interface eth0

Пример вывода:

Interface    Device ID         Port ID    Capability
---------    ---------         -------    ----------
eth0         switch-core-01    Gi1/0/1    Bridge,Router
eth1         switch-access-02  Gi2/0/24   Bridge

Настройка параметров LLDP

# Включить LLDP
set service lldp

# Интервал отправки LLDP-пакетов (в секундах)
set service lldp legacy-protocols cdp  # Опционально: для совместимости с CDP

# Management address (для доступа к устройству)
set service lldp management-address 192.168.1.1

commit
save

Расширенная конфигурация

Настройка LLDP на конкретных интерфейсах

# Включить LLDP
set service lldp

# Отключить LLDP на конкретном интерфейсе
set service lldp interface eth2 disable

# Включить обратно (удалить disable)
delete service lldp interface eth2 disable

commit
save

Настройка описания для соседей

# Включить LLDP
set service lldp

# Установить location (физическое расположение)
set service lldp snmp location "DataCenter-1, Rack-15, RU-42"

commit
save

Настройка legacy protocols (CDP)

Для совместимости с Cisco устройствами можно включить CDP:

# Включить LLDP с поддержкой CDP
set service lldp
set service lldp legacy-protocols cdp

commit
save

Примечание: CDP - это проприетарный протокол Cisco, но VyOS может слушать CDP-пакеты для совместимости.

SNMP интеграция

# Включить LLDP
set service lldp

# Установить SNMP location для LLDP
set service lldp snmp location "Building-A, Floor-3, Room-301"

# Включить SNMP для доступа к LLDP MIB
set service snmp community public authorization ro
set service snmp listen-address 0.0.0.0

commit
save

LLDP MIB (LLDP-MIB) доступен через SNMP:

  • OID базовый: 1.0.8802.1.1.2
  • Локальная информация: 1.0.8802.1.1.2.1.3
  • Удаленная информация: 1.0.8802.1.1.2.1.4

Примеры конфигураций

Пример 1: Базовая конфигурация LLDP

# Включить LLDP на всех интерфейсах
set service lldp

# Установить management address
set service lldp management-address 192.168.1.1

# Установить location
set service lldp snmp location "Main Office, Network Closet A"

commit
save

Проверка:

show lldp neighbors
show lldp neighbors detail

Пример 2: LLDP в среде с Cisco устройствами

# Включить LLDP с CDP compatibility
set service lldp
set service lldp legacy-protocols cdp

# Management address
set service lldp management-address 10.0.0.1

commit
save

Проверка Cisco соседей:

show lldp neighbors
# Или на Cisco стороне:
# show cdp neighbors

Пример 3: Селективное включение LLDP

# Включить LLDP глобально
set service lldp

# Отключить на интерфейсах к конечным пользователям (security)
set service lldp interface eth2 disable
set service lldp interface eth3 disable

# Оставить включенным на uplink интерфейсах (eth0, eth1)

commit
save

Пример 4: LLDP для документирования ЦОДа

# Включить LLDP
set service lldp

# Детальная информация о расположении
set service lldp snmp location "DC1, Pod-3, Rack-15, RU-42, Row-G"

# Management address
set service lldp management-address 10.255.255.1

# SNMP для мониторинга
set service snmp community monitoring authorization ro
set service snmp community monitoring network 10.0.0.0/8

commit
save

Пример 5: LLDP с автоматизацией (Ansible)

Конфигурация VyOS:

# Включить LLDP
set service lldp
set service lldp management-address 192.168.1.1

commit
save

Ansible playbook для сбора LLDP информации:

- name: Collect LLDP information from VyOS routers
  hosts: vyos_routers
  gather_facts: no

  tasks:
    - name: Get LLDP neighbors
      vyos.vyos.vyos_command:
        commands:
          - show lldp neighbors detail
      register: lldp_output

    - name: Display LLDP neighbors
      debug:
        var: lldp_output.stdout_lines

    - name: Save to file
      copy:
        content: "{{ lldp_output.stdout[0] }}"
        dest: "./lldp_{{ inventory_hostname }}.txt"

Пример 6: LLDP мониторинг с LibreNMS

VyOS конфигурация:

# LLDP
set service lldp
set service lldp management-address 192.168.1.1

# SNMP для LibreNMS
set service snmp community librenms authorization ro
set service snmp community librenms network 192.168.1.0/24
set service snmp listen-address 0.0.0.0

commit
save

LibreNMS автоматически обнаружит LLDP соседей и построит карту топологии.

Мониторинг и диагностика

Просмотр LLDP соседей

# Все соседи (краткий формат)
show lldp neighbors

# Детальная информация о всех соседях
show lldp neighbors detail

# Соседи на конкретном интерфейсе
show lldp neighbors interface eth0

# Информация о конкретном соседе
show lldp neighbors interface eth0 detail

Примеры вывода

Краткий формат:

Capability Codes: R - Router, B - Bridge, W - Wlan r - Repeater, S - Station
                  D - Docsis, T - Telephone, O - Other

Interface    Local    Remote           Remote               Capability
             Port ID  Chassis ID       Port ID
---------    -------  --------------   -------------------  ----------
eth0         eth0     00:1b:21:d4:d0   GigabitEthernet1/0/1 B,R
eth1         eth1     00:1b:21:d4:d1   GigabitEthernet2/0/5 B

Детальный формат:

Interface: eth0
  Chassis ID: 00:1b:21:d4:d0:00
  System Name: switch-core-01
  System Description: Cisco IOS Software, Version 15.2(4)E
  Port ID: GigabitEthernet1/0/1
  Port Description: Uplink to VyOS Router
  Capability: Bridge, Router
  Management Address: 192.168.1.10
  Time to Live: 120 seconds

Проверка локальной информации

# Локальная информация LLDP
show lldp interface

# Детали локального интерфейса
show lldp interface eth0

Отладка LLDP

# Проверка работы LLDP демона
show log | match lldp

# Проверка процесса lldpd
ps aux | grep lldpd

# Restart LLDP service (если необходимо)
sudo systemctl restart lldpd

# Статус сервиса
sudo systemctl status lldpd

Мониторинг LLDP пакетов

# Захват LLDP пакетов на интерфейсе
sudo tcpdump -i eth0 -vv ether proto 0x88cc

# Или с использованием multicast адреса
sudo tcpdump -i eth0 ether dst 01:80:c2:00:00:0e

SNMP мониторинг LLDP

# Получение LLDP информации через SNMP
snmpwalk -v2c -c public 192.168.1.1 LLDP-MIB::lldpRemTable

# Локальная информация
snmpwalk -v2c -c public 192.168.1.1 LLDP-MIB::lldpLocPortTable

# Удаленные устройства
snmpwalk -v2c -c public 192.168.1.1 LLDP-MIB::lldpRemChassisId

Устранение неполадок

Проблема: LLDP соседи не обнаруживаются

Диагностика:

# 1. Проверка, что LLDP включен
show configuration service lldp

# 2. Проверка интерфейса (не disabled ли)
show configuration service lldp interface

# 3. Проверка статуса интерфейса
show interfaces

# 4. Захват трафика LLDP
sudo tcpdump -i eth0 ether proto 0x88cc

# 5. Проверка логов
show log | match lldp

Решение:

# Включить LLDP, если отключен
set service lldp

# Убедиться, что интерфейс не disabled
delete service lldp interface eth0 disable

# Проверить, что интерфейс up
show interfaces ethernet eth0

commit
save

# Перезапуск LLDP daemon (если необходимо)
sudo systemctl restart lldpd

Проблема: LLDP работает, но не передается нужная информация

Причина: Некоторая информация может не передаваться по умолчанию.

Решение:

# Убедиться, что установлен management address
set service lldp management-address 192.168.1.1

# Установить location
set service lldp snmp location "Building-A, Floor-2"

commit
save

Проблема: LLDP не работает с Cisco устройствами

Причина: Cisco может использовать CDP вместо LLDP.

Решение:

На VyOS:

# Включить CDP compatibility
set service lldp legacy-protocols cdp

commit
save

На Cisco:

# Включить LLDP (если не включен)
lldp run

# На интерфейсах
interface GigabitEthernet1/0/1
  lldp transmit
  lldp receive

Проблема: LLDP соседи появляются и исчезают

Причина: TTL (Time To Live) истекает быстрее, чем приходят новые пакеты.

Диагностика:

# Проверка TTL в детальной информации
show lldp neighbors detail

# Мониторинг исчезновений
watch -n 5 'show lldp neighbors'

Решение:

Проблема обычно на стороне соседа. Проверить:

  • Интервал отправки LLDP-пакетов на соседнем устройстве
  • Нагрузка на процессор соседнего устройства
  • Проблемы с кабелем или портом

Проблема: LLDP показывает неправильную информацию

Причина: Кэшированная информация от старого соседа.

Решение:

# Перезапуск LLDP для очистки кэша
sudo systemctl restart lldpd

# Подождать 30-60 секунд для получения новых LLDP-пакетов
sleep 60

# Проверка
show lldp neighbors

Проблема: SNMP не возвращает LLDP информацию

Диагностика:

# Проверка SNMP конфигурации
show configuration service snmp

# Тест SNMP доступа
snmpwalk -v2c -c public localhost SNMPv2-MIB::sysDescr

# Проверка LLDP MIB
snmpwalk -v2c -c public localhost LLDP-MIB::lldpLocChassisId

Решение:

# Убедиться, что SNMP включен
set service snmp community public authorization ro
set service snmp listen-address 0.0.0.0

commit
save

# Перезапуск SNMP
sudo systemctl restart snmpd

Интеграция с системами мониторинга

LibreNMS

LibreNMS автоматически обнаруживает и визуализирует LLDP топологию.

Конфигурация VyOS:

set service lldp
set service lldp management-address 192.168.1.1
set service snmp community librenms authorization ro
set service snmp listen-address 0.0.0.0

commit
save

В LibreNMS:

  1. Добавить устройство через Web UI или CLI
  2. LibreNMS автоматически обнаружит LLDP соседей
  3. Карта топологии будет построена автоматически (Map → Topology)

Observium

Конфигурация VyOS:

set service lldp
set service lldp management-address 192.168.1.1
set service snmp community observium authorization ro
set service snmp listen-address 0.0.0.0

commit
save

Observium использует LLDP MIB для построения карты сети.

Zabbix

Конфигурация VyOS:

set service lldp
set service lldp management-address 192.168.1.1
set service snmp community zabbix authorization ro
set service snmp v3 user zabbix auth type sha
set service snmp v3 user zabbix auth plaintext-password 'AuthPassword123!'
set service snmp v3 user zabbix privacy type aes
set service snmp v3 user zabbix privacy plaintext-password 'PrivPassword123!'

commit
save

Zabbix template для LLDP мониторинга использует SNMP discovery для автоматического обнаружения соседей.

Netbox

Netbox может импортировать LLDP данные через API или скрипты.

Скрипт для экспорта LLDP в JSON:

#!/bin/bash

# Получение LLDP neighbors в JSON формате
vtysh -c "show lldp neighbors detail json" > /tmp/lldp_neighbors.json

# Отправка в Netbox через API
curl -X POST https://netbox.example.com/api/dcim/cables/ \
  -H "Authorization: Token YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d @/tmp/lldp_neighbors.json

Grafana + Prometheus

LLDP данные можно экспортировать через SNMP exporter для Prometheus.

Prometheus SNMP exporter config:

modules:
  lldp:
    walk:
      - 1.0.8802.1.1.2  # LLDP-MIB
    metrics:
      - name: lldpRemSysName
        oid: 1.0.8802.1.1.2.1.4.1.1.9
        type: DisplayString

Лучшие практики

1. Всегда включать LLDP

Включайте LLDP на всех сетевых устройствах для автоматического документирования:

set service lldp
set service lldp management-address <mgmt-ip>

2. Установка информативного location

Используйте детальное описание физического расположения:

set service lldp snmp location "DC-Moscow, Building-2, Floor-3, Rack-A15, RU-42"

3. Отключение LLDP на untrusted интерфейсах

Отключайте LLDP на портах, доступных конечным пользователям (security):

set service lldp interface eth2 disable  # User-facing port
set service lldp interface eth3 disable  # Guest network

4. CDP compatibility для смешанных сред

В сетях с Cisco оборудованием включайте CDP:

set service lldp legacy-protocols cdp

5. SNMP интеграция для мониторинга

Всегда настраивайте SNMP для доступа к LLDP MIB:

set service snmp community monitoring authorization ro

6. Регулярная проверка топологии

Периодически проверяйте LLDP соседей для обнаружения изменений:

show lldp neighbors

Используйте автоматизацию (Ansible, Python) для регулярного аудита.

7. Документирование через описания интерфейсов

Используйте описания интерфейсов в сочетании с LLDP:

set interfaces ethernet eth0 description "Uplink to switch-core-01 Gi1/0/1"

8. Мониторинг изменений топологии

Настройте алерты на изменения LLDP соседей в системах мониторинга для обнаружения:

  • Неавторизованных подключений
  • Замены оборудования
  • Проблем с кабелями

9. Использование management VLAN

Настройте management address из выделенного management VLAN:

set interfaces ethernet eth0 vif 99 address 10.255.255.1/24
set service lldp management-address 10.255.255.1

10. Резервное копирование LLDP данных

Периодически сохраняйте вывод LLDP для документации:

show lldp neighbors detail > /config/lldp-backup-$(date +%Y%m%d).txt

Полезные команды

# Показать всех LLDP соседей
show lldp neighbors

# Детальная информация
show lldp neighbors detail

# Соседи на конкретном интерфейсе
show lldp neighbors interface eth0

# Локальная информация LLDP
show lldp interface

# Конфигурация LLDP
show configuration service lldp

# Логи LLDP
show log | match lldp

# Захват LLDP пакетов
sudo tcpdump -i eth0 ether proto 0x88cc

# SNMP запрос LLDP данных
snmpwalk -v2c -c public localhost LLDP-MIB::lldpRemTable

# Статус LLDP демона
sudo systemctl status lldpd

# Перезапуск LLDP
sudo systemctl restart lldpd

# Сохранение LLDP информации в файл
show lldp neighbors detail > /tmp/lldp-neighbors.txt

Интеграция с автоматизацией

Python скрипт для сбора LLDP данных

#!/usr/bin/env python3

import subprocess
import json
import re

def get_lldp_neighbors():
    """Получение LLDP соседей с VyOS роутера"""
    try:
        # Выполнение команды через SSH или локально
        result = subprocess.run(
            ['vtysh', '-c', 'show lldp neighbors detail'],
            capture_output=True,
            text=True
        )

        # Парсинг вывода
        neighbors = []
        current = {}

        for line in result.stdout.splitlines():
            if line.startswith('Interface:'):
                if current:
                    neighbors.append(current)
                current = {'interface': line.split(':')[1].strip()}
            elif 'System Name:' in line:
                current['system_name'] = line.split(':')[1].strip()
            elif 'Port ID:' in line:
                current['port_id'] = line.split(':')[1].strip()
            elif 'Management Address:' in line:
                current['mgmt_address'] = line.split(':')[1].strip()

        if current:
            neighbors.append(current)

        return neighbors

    except Exception as e:
        print(f"Error: {e}")
        return []

if __name__ == '__main__':
    neighbors = get_lldp_neighbors()
    print(json.dumps(neighbors, indent=2))

Ansible playbook для LLDP аудита

- name: LLDP Topology Audit
  hosts: vyos_routers
  gather_facts: no

  tasks:
    - name: Collect LLDP neighbors
      vyos.vyos.vyos_command:
        commands:
          - show lldp neighbors detail
      register: lldp_data

    - name: Parse and validate topology
      set_fact:
        lldp_neighbors: "{{ lldp_data.stdout[0] | parse_lldp }}"

    - name: Check for unexpected neighbors
      debug:
        msg: "WARNING: Unexpected neighbor detected!"
      when: "'unknown' in lldp_neighbors"

    - name: Generate topology report
      template:
        src: topology_report.j2
        dest: "./reports/{{ inventory_hostname }}_lldp.html"

Заключение

LLDP (Link Layer Discovery Protocol) - это важный инструмент для автоматического обнаружения и документирования сетевой топологии. VyOS предоставляет полную поддержку LLDP с дополнительной совместимостью с Cisco CDP.

Основные преимущества LLDP:

  • Автоматическое обнаружение соседних устройств
  • Стандартизированный протокол (IEEE 802.1AB)
  • Интеграция с системами мониторинга через SNMP
  • Упрощение документирования инфраструктуры
  • Диагностика проблем подключения

Рекомендации для production:

  • Включайте LLDP на всех сетевых устройствах
  • Отключайте LLDP на untrusted портах для безопасности
  • Используйте детальные location descriptions
  • Интегрируйте с системами мониторинга (LibreNMS, Zabbix, Observium)
  • Регулярно аудируйте топологию через LLDP данные
  • Документируйте изменения в топологии

LLDP в VyOS обеспечивает надежное обнаружение топологии и интегрируется со всеми современными системами мониторинга, делая управление сетевой инфраструктурой более эффективным.

Проверено OpenNix LLC · Обновлено